news 2026/10/1 3:00:21

探索Plotly:如何用柱状图展示复杂数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索Plotly:如何用柱状图展示复杂数据

这是第二款关于开源图形库的介绍。

现在, 我们这一节还是要接着去继续研究一下, 库里面那些其他的几种类型的图, 它们到底是用一种什么样的方式给构建起来的。

这节当中所主要涉及到的内容, 是对于一些柱状图的基本使用方法的展示。

1.柱状图

在开始绘制图像这个步骤之前, 我们首要的任务是先把准备好的那些数据给导入到程序里面去, 至于具体用什么样的数据呢, 这里选择用的是官方那边直接提供给我们的一个示例情况, 这个示例是关于咱们国家在每一年当中的生产总值还有人口数量这两个方面数据的。

# 导入数据

import plotly.express as px

data = px.data.gapminder() # 导入自带的数据

data_canada = data[data['country'] == 'China'] # 筛选国家的数据

data_canada.head()

最终能够获取到下述的相关数据信息。

而后我们着手进行图形的绘制工作, 针对柱状图这一种图表类型来说, 其操作的关键点在于明确界定横轴与纵轴所要代表的含义, 具体来说, 需要设定纵坐标指向人口数量数据内容, 同时要设定横坐标对应年份时间序列相关的数据项:

# 导入数据

fig = px.bar(data_canada, x='year', y='pop')

fig.show()

在这里, 我们可以看到人口数量呈现出逐年递增的趋势, 这种展示方式显得非常直观。这也是柱状图所具备的一个明显优势。尤其是在面对涉及时间序列数据的情况时, 使用柱状图能够更加有效地帮助我们分析和把握数据变化的具体状况。

我们有时候为了标注一些特殊的数据, 更清晰的突出重点, 可以对柱状图标色, 下面我们会单独对人均寿命, 人均国内总值进行显示, 主结构还是年份与人口数。

import plotly.express as px

data = px.data.gapminder() # 导入自带的数据

data_canada = data[data['country'] == 'China'] # 筛选数据

fig = px.bar(data_canada,

x='year',

y='pop',

hover_data=['人均寿命', '人均国内生产总值'], # 鼠标点击时的浮动数据

color='lifeExp', # 用预期寿命涂色

labels={'pop':'人口数'}, # 修改变量名

height=400 # 修改图片尺寸

)

fig.update_layout(title = '中国人口') # 加入标题

fig.show()

运行程序之后, 屏幕上就会出现下面这个柱状图的显示画面。

咱们接下来去瞧一瞧柱状图, 它还有另一种叫做组合的表现形式, 这其中包括了分组柱状图以及堆积柱状图这两类。

分组柱状图:

import plotly.graph_objects as go

animals=['狮子', '老虎', '猴子']

fig = go.Figure(data=[

go.Bar(name='重庆动物园', x=animals, y=[20, 14, 23]), # name是区分不同组的最主要参数

go.Bar(name='北京动物园', x=animals, y=[12, 18, 29])

])

# Change the bar mode

fig.update_layout(barmode='group') # 设置分组方式,这里显示为并列

fig.show()

请把下面的这张图示展示出来。

在此处添加图片以展示相关描述。

堆积柱状图:

import plotly.graph_objects as go

animals=['狮子', '老虎', '猴子']

fig = go.Figure(data=[

go.Bar(name='重庆动物园', x=animals, y=[20, 14, 23]),

go.Bar(name='北京动物园', x=animals, y=[12, 18, 29])

])

# Change the bar mode

fig.update_layout(barmode='stack') # 设置分组方式为堆积

fig.show()

得到:

2.柱状图的高级用法

为了那个柱状图, 我们来添加对应的标注信息。

import plotly.graph_objects as go

x = ['Product A', 'Product B', 'Product C']

y = [20, 14, 23]

fig = go.Figure(data=[go.Bar(

x=x, y=y,

text=y,

textposition='auto', # 标注位置自动调整

)])

fig.show()

关于 text这个参数的数值大小方面, 咱们能够通过调用下述所给出的方法来进行相应的调整工作。

其中, 那个东西可以用来对最小尺寸实施调整, 而另一个功能则是用来针对那些不符合规范准则的数字内容进行显现或者隐蔽操作的设定工作。

我在这一处进行了筛选操作, 针对的是来自欧洲各个国家的人口统计数据。

import plotly.express as px

df = px.data.gapminder().query("continent == 'Europe' and year == 2007 and pop > 2.e6")

fig = px.bar(df,

y='pop',

x='country',

text='pop')

fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')

fig.update_layout(uniformtext_minsize=2, uniformtext_mode='hide')

fig.show()

这里用了一个fig ()方法, 该方法可用于调整柱状图和文字的显示格式以及显示的位置。

我们还能把坐标轴旋转, 具体做法比如使用 fig.(=-45) 这个参数, 让坐标轴旋转四百五十度。

除此之外, 我们还可以通过实际操作来进行自定义颜色的设置, 另外还可以调整宽度的数值。

import plotly.graph_objects as go

colors = ['lightslategray',] * 5

colors[1] = 'crimson'

fig = go.Figure(data=[go.Bar(

x=['Feature A', 'Feature B', 'Feature C',

'Feature D', 'Feature E'],

y=[20, 14, 23, 25, 22],

marker_color=colors # 颜色可以使单个颜色(标量),或者和数据维度一致

)])

fig.update_layout(title_text='Least Used Feature')

fig = go.Figure(data=[go.Bar(

x=[1, 2, 3, 5.5, 10],

y=[10, 8, 6, 4, 2],

width=[0.8, 0.8, 0.8, 3.5, 4] # 自定义宽度

)])

fig.show()

以及还有我们自定义柱的展示顺序:

import plotly.graph_objects as go

x=['b', 'a', 'c', 'd']

fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))

fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))

fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))

fig.update_layout(barmode='stack', xaxis={'categoryorder':'category ascending'}) # 字母表升序

fig.show()

得到结果:

3:总结

通过观察上述示例, 我们可以发现柱状图具备一个显著的优势, 这种优势体现在其能够十分清晰地展示出存在不同类别或者不同组别之间的差异情况, 这使得我们能够方便地对数据的大小以及发展趋势进行比较操作, 同时它也呈现出一种易于被理解与便于进行解释的特点。

它的问题在于, 倘若类别或者是分组变得特别庞大, 那么这幅图表就会出现非常拥挤的状况, 从而导致使用者在阅读起来变得非常困难,同时在进行比较的时候也会感到难以操作。

这一点, 柱状图和折线图它们两个看起来就很类似。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 3:00:21

6款论文降AI率网站亲测:键清零AI痕迹,这款性价比封神

2026年毕业季临近,知网、维普两大国内核心学术平台已完成AIGC检测算法的全面迭代升级:知网将AI检测模型更新至3.0版本,实现句子级精准识别,对AI生成内容的识别能力提升15-18个百分点;维普则重构检测逻辑,新…

作者头像 李华
网站建设 2026/10/1 3:00:05

RL-算法演进史05:Model-Based强化学习算法演进路线02

下一节: 5.6 E2C(Embed to Control):深度Latent Dynamics路线 重点分析: 为什么PILCO无法处理视觉输入; E2C如何将高维图像压缩到latent空间; Latent Dynamics如何成为Dreamer路线基础; E2C、PlaNet、Dreamer之间的数学关系。 继续 5.6 E2C(Embed to Control):深度…

作者头像 李华
网站建设 2026/10/1 2:59:20

二维Ising模型蒙特卡洛磁化分析:Metropolis算法与MATLAB实现

简介:基于Monte-Carlo模拟的二维Ising模型磁化分析系统,是一份使用MATLAB实现的数值模拟工具,面向凝聚态物理、材料科学等领域的研究人员和学生。它可在不开展复杂物理实验的情况下,预测铁磁材料在不同温度下的磁性能,…

作者头像 李华
网站建设 2026/10/1 2:58:14

第25篇:空间测量-面积量测——围一圈点就出面积,可这三个数说的不是同一块地

上回书说到,我们拿 Cesium 量了方向,又量了高度,再量了长度。回头一看——点有了、线有了,还差最后一样能撑起业务的东西:面。 还记得第 24 篇结尾本猿立的那个 flag 吗? 下一站是 #25 面积量测:长度会拐弯了,该围成面了——而"这一块地有多大"同样有三个答…

作者头像 李华
网站建设 2026/10/1 2:57:22

隧道代理实战:如何避免403/429导致采集任务大面积失败

在网页数据采集过程中,很多开发者都会遇到这样的情况:程序运行初期一切正常,但随着请求量不断增加,返回结果中开始出现大量403和429状态码。少量异常或许不会影响整体任务,但当错误比例持续升高时,往往会导…

作者头像 李华
网站建设 2026/10/1 2:55:59

人留在微信里的那些语音,换手机后就听不到了?微信聊天记录导出保存攻略(2026年最新版)

摘要 图片可以截图,文字可以复制,唯独语音——它最有人味,也最容易被丢掉。 老人在微信里发来的一段六十秒语音,讲的是家常、是叮嘱、是某句你当时听着平常、后来再也听不到的话。这些内容有个残酷的特点:它们只存在于…

作者头像 李华