『Plotly实战指南』--柱状图绘制基础篇
柱状图作为最基础的数据可视化形式之一,能直观展示不同类别数据的对比关系,适用于一下的场景:
- 比较不同类别之间的数据大小,如不同产品的销售额对比。
- 展示数据的分布情况,如各年龄段的人口数量分布。
- 分析时间序列数据的变化趋势,如某公司近几年的利润变化。
今天,我们就来深入探索Plotly柱状图的绘制基础,掌握垂直柱状图和水平柱状图的绘制方法。
1. 垂直柱状图绘制
1.1. 数据准备
适合绘制垂直柱状图的数据通常是具有明确类别和对应数值的数据。
例如,关于不同城市人口数量的数据:城市名称作为类别,人口数量作为数值,这样的数据结构就非常适合用垂直柱状图来展示。
创建示例数据:
# 示例数据
data = {
"城市": ["北京", "上海", "广州", "深圳", "成都"],
"人口数量(万)": [2189, 2487, 1530, 1259, 1633]
}
1.2. 绘图
使用 Plotly 创建垂直柱状图的基本代码结构如下:
import plotly.express as px
# 示例数据
data = {
"城市": ["北京", "上海", "广州", "深圳", "成都"],
"人口数量(万)": [2189, 2487, 1530, 1259, 1633]
}
# 创建垂直柱状图
fig = px.bar(
data_frame=data,
x="城市",
y="人口数量(万)",
title="各城市人口数量柱状图"
)
# 显示图形
fig.show()

在上述代码中,我们通过px.bar()函数来创建垂直柱状图。
其中,data_frame 参数用于指定数据源,x参数指定类别的列名,y参数指定数值的列名。
Plotly 会自动将y列中的数值映射到柱状的高度上,从而实现数据到图形的转换。
1.3. 坐标轴标签与刻度设置
上一节的代码将生成一个垂直柱状图,横轴显示城市名称,纵轴显示人口数量,每个城市的柱子高度对应其相应的人口数量。
通过这个直观的图形,我们可以很容易地比较各城市的人口规模。
但是,为了使柱状图更加清晰易懂,我们常常需要对坐标轴标签和刻度进行设置。
# 设置 X 轴标签
fig.update_xaxes(title_text="城市名称")
# 设置 Y 轴标签
fig.update_yaxes(title_text="人口数量(万人)")
# 调整 X 轴刻度角度和字体大小
fig.update_xaxes(tickangle=45, tickfont=dict(size=10))
# 设置 Y 轴刻度间隔和字体大小
fig.update_yaxes(dtick=500, tickfont=dict(size=10))
fig.update_yaxes(range=[0, 3000]) # 设置 Y 轴范围为 0 到 3000

通过这些设置,我们可以使坐标轴的标签和刻度更加符合数据的特点和展示需求,从而提高图表的可读性。
2. 水平柱状图绘制
2.1. 数据准备
水平柱状图适用于展示类别名称较长或需要强调数据大小对比的情况。
例如,对于一组关于不同国家 GDP 的数据,国家名称作为类别,GDP 数值作为对应的值,这种数据结构适合用水平柱状图来呈现,尤其是当国家名称较长时,水平布局能更好地展示类别信息。
# 示例数据
data = {
"国家": ["美国", "中国", "日本", "德国", "英国"],
"GDP(万亿美元)": [25.0, 17.7, 4.9, 4.2, 3.1]
}
2.2. 绘图
要实现水平柱状图,只需对垂直柱状图的代码稍作修改:
import plotly.express as px
# 示例数据
data = {
"国家": ["美国", "中国", "日本", "德国", "英国"],
"GDP(万亿美元)": [25.0, 17.7, 4.9, 4.2, 3.1]
}
# 创建水平柱状图
fig = px.bar(
data_frame=data,
y="国家", # 将类别列指定为 Y 轴
x="GDP(万亿美元)", # 将数值列指定为 X 轴
orientation='h', # 设置柱状图为水平方向
title="各国 GDP 水平柱状图"
)
# 显示图形
fig.show()

在上述代码中,我们将 y 参数设置为类别列,x 参数设置为数值列,并通过 orientation='h' 参数指定柱状图为水平布局。
这样,Plotly 就会根据数据生成水平柱状图。
运行代码后,生成一个水平柱状图,横轴表示 GDP 数值,纵轴表示国家名称,每个国家的柱子水平延伸,长度对应其 GDP 大小。
这种布局使得国家名称能够完整显示,便于比较各国 GDP 的差异。
2.3. 坐标轴和标签布局
了使水平柱状图更加美观和易读,也可以对坐标轴和标签进行调整。
# 反转 Y 轴顺序,使柱子从上到下排列
fig.update_yaxes(autorange="reversed")
fig.update_layout(
margin=dict(l=150), # 增加左侧边距,防止国家名称被截断
title_x=0.5 # 将标题居中显示
)
# 设置 Y 轴刻度垂直显示,字体大小为 12
fig.update_yaxes(tickangle=0, tickfont=dict(size=12))
# 设置 X 轴刻度角度为 45 度,字体大小为 10
fig.update_xaxes(tickangle=45, tickfont=dict(size=10))

通过这些调整,水平柱状图的坐标轴方向和标签布局将更加合理,图表的整体效果将得到显著提升。
3. 两种柱状图的对比
垂直柱状图和水平柱状图在视觉上最大的差异在于坐标轴的方向和柱子的排列方式。
垂直柱状图适合展示类别名称较短、需要强调数据分布或趋势的情况;
而水平柱状图则更适合类别名称较长、需要突出数据大小对比的场景。
在选择时,根据自己的数据选择不同的柱状图:
- 类别名称较短且数据点较少:优先选择垂直柱状图,因为它更符合人们的阅读习惯,能够直观地展示数据的高低变化。
- 类别名称较长或数据点较多:水平柱状图是更好的选择,它可以避免类别名称被截断,使每个类别的数据都能清晰地展示出来。
- 需要强调数据大小对比:水平柱状图在展示数据大小差异时更具优势,因为水平排列的柱子在视觉上更容易比较长度。
- 展示时间序列数据或数据分布:垂直柱状图更适合,它能够清晰地呈现数据随时间或其他连续变量的变化趋势。
4. 总结
通过本文,我们掌握了Plotly绘制基础柱状图的关键步骤,包括垂直柱状图和水平柱状图的创建方法、数据映射、坐标轴设置以及标签优化等。
Plotly 强大的功能为我们提供了丰富的可视化手段,能够帮助我们将数据以直观、美观的方式呈现出来。
在实际项目中,我们可以根据数据的特点和分析需求,灵活选择合适的柱状图类型,并运用所学的知识对图表进行定制和优化,从而更好地传达数据背后的信息和价值。
『Plotly实战指南』--柱状图绘制基础篇的更多相关文章
- 20165308『网络对抗技术』Exp5 MSF基础应用
20165308『网络对抗技术』Exp5 MSF基础应用 一.原理与实践说明 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实 ...
- 20155308『网络对抗技术』Exp5 MSF基础应用
20155308『网络对抗技术』Exp5 MSF基础应用 一.原理与实践说明 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实 ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API
目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)
目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
随机推荐
- 【杂谈】Kafka的日志段为什么不用内存映射?
什么是内存映射(Memory-Mapped File)? 内存映射(mmap)是一种将文件内容映射到内存中的技术,应用程序可以像操作内存一样对文件内容进行读写,而不需要显式地进行磁盘 I/O 操作.修 ...
- IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)
本文由金蝶随手记技术团队丁同舟分享. 1.引言 跟移动端IM中追求数据传输效率.网络流量消耗等需求一样,随手记客户端与服务端交互的过程中,对部分数据的传输大小和效率也有较高的要求,普通的数据格式如 J ...
- 记录以下uniapp写小程序然后进行图片上传压缩
今天记录一下uniapp写小程序上传图片压缩的功能 首先定义上传图片的方法 然后res.tempFilePath[0]就是图片的临时路径 其次定义压缩图片然后获取压缩后图片大小的方法,方法使用canv ...
- 《C++并发编程实战》读书笔记(2):线程间共享数据
1.使用互斥量 在C++中,我们通过构造std::mutex的实例来创建互斥量,调用成员函数lock()对其加锁,调用unlock()解锁.但通常更推荐的做法是使用标准库提供的类模板std::lock ...
- 项目PMP之三项目经理
一.项目经理定义:由执行组织委派,领导实现目标 二.影响范围: 项目本身:相关方沟通.完善各职能结构:通过人际关系和沟通技能及积极态度充当沟通者,以平衡项目相关方并达成共识 组织:组织结构中进行积极沟 ...
- C 将十进制数转换成二~十六进制数中的任意一种
问题:将一个十进制整数转换成二~十六进制数中的任意一种进制数 代码: #include <stdio.h> #include <stdlib.h> int b; int i = ...
- 面试题: == 和 equals() 区别【包装类重写了object类中的equals方法】
/* * * 面试题: == 和 equals() 区别 * * 一.回顾 == 的使用: * == :运算符 * 1. 可以使用在基本数据类型变量和引用数据类型变量中 * 2. 如果比较的是基本数据 ...
- 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解 背景 最近遇到一个客户需求,客户的生产环境有大量的SQL Server数据库(大概180套),客户的诉求是需要把生产环境 ...
- C++学习:CRTP 模式是什么
CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)是 C++ 中的一种设计模式. 基本概念 CRTP 是指一个类(通常是基类)以其派生类作为模板参数 ...
- Linux安装Python 3.11
Linux安装python 在Linux上安装Python 3.11,你可以按照以下步骤进行.这些步骤以CentOS为例,但其他Linux发行版的过程大同小异,可能只需稍作调整. 1. 检查Pytho ...