前言
- 本文将分享使用Matplotlib进行数据可视化的一些实践经验和学习心得,包括基本图表的绘制方法和一些实用的技巧。
- 数据可视化是数据分析中的重要环节,它可以帮助我们更直观地理解数据。Matplotlib作为Python中一个功能强大的数据可视化库,提供了丰富的图表绘制功能。
-
Matplotlib简介
Matplotlib支持绘制多种类型的图表,包括线图、散点图、柱状图、饼图等,同时还支持图表的定制化,如颜色、线条样式、字体等。
数据可视化有哪些优势?
1、数据可视化的沟通效率更高,无论是从报告者还是接受者的角度。
数据可视化是一种非常清晰的沟通方式,使用大数据可视化的工具报告,用一些简短的图形就能体现那些复杂信息。
这是因为人脑对视觉信息的处理要比书面信息容易得多。使用图表来总结复杂的数据,可以确保对关系的理解要比那些混乱的报告或电子表格更快。正是由于这个优点,数据可视化越来越受到了大家的关注。
2、数据可视化,能够提高数据分析的效率。
现代的数据可视化工具,有很多好用的功能点,包括:参数过滤、图表联动、图表钻取、参数联动、动态显示报表标题、动态分组、动态sheet扩展等等。能够快速完成数据分析。
比如最简单实用的优势:能实现对组件的自适应布局和自由布局。
比如在日常的报表制作过程中,老板想要根据月份查看每个月份的销售额对比情况,一般方法就是每个月做一张表,然后拉到一起做对比,老板绝对没有那个耐心去找数字。
3、数据可视化,能够进行更好地从结果追溯原因,帮助运营决策。
数据可视化的能让人理解运营和结果之间的连接,具体就是数据可视化允许用户去跟踪运营和整体业务性能之间的连接。
比如某地区的销售额下降了,然后,相关主管可以深入了解这些差异发生在哪里,并开始制定计划。通过这种方式,数据可视化可以让管理人员立即发现问题并采取行动从而及时止损。
Matplotlib数据可视化
常见的图形及其绘制方法
柱形图
- 柱形图能够查看各项数据的大小差异
- 绘图函数:plt.bar(x,height,width,...)
- 可以通过多个plt.bar()绘制多重柱形图
参数 | 作用 |
x | 列表,表示柱子在x轴的刻度,一般为字符 |
height | 列表,表示柱子在y轴的刻度,为数字 |
width | 数字,表示柱子的宽度 |
... | ... |
x=result.index
y=result.values
plt.rcParams['font.family']='SimHei'
plt.bar(
x,
y,
width=0.5,
color='#ff8080'
)
plt.title('Python类图书销量')
plt.xticks(rotation=15)
for a,b in zip(x,y):
plt.text(
a,
b+500,
f'{b}',
ha='center'
)
plt.show()
-
x:x轴数据 y:y轴数据
-
plt.rcParams['font.family']='SimHei' :让图形显示中文
-
plt.bar:柱形图函数
-
width:柱子宽度
-
color:柱子颜色
-
title:标题
-
plt.xticks:x轴刻度倾斜
-
zip:
将两个列表中的元素配对,形成元组 -
a:标签x轴坐标
-
b+500:标签y轴坐标
-
f'{b}'
:文本标签的内容 -
ha='center'
:文本的水平对齐方式 -
plt.show() # 显示图形
饼图
- 饼图能够查看各项数据在总计中的占比情况
- 绘图函数:plt.pie(x,labels,radius,autopct...)
参数 | 作用 |
x | 接收列表,里面是各个数据的值 |
labels | 接收列表,里面是各个数据的标签 |
radius | 接收数字,表示饼图的半径,默认是1 |
autopct | 接收字符串"%%1.xf%',表示饼图中显示百分比数并保留一位小数。 |
... | ... |
plt.pie(
gender_zffs.loc['男',:],
labels=gender_zffs.loc['男',:].index,
autopct='%1.2f%%',
explode=[0,0,0.1],
colors=['#ff8080','skyblue','pink']
)
plt.show()
loc['男',:]:
表示选择 '男' 这一行的所有数据labels=gender_zffs.loc['男',:].index
: 这是饼图每个扇区的文本标签.index
表示使用gender_zffs
中 '男' 这一行的索引作为标签-
explode=[0,0,0.1]: 扁形到原点的距离
折线图
- 折线图能够查看时间序列数据的波动趋势
- 绘图函数:plt.plot(x,y,color,linestyle,marker,format string,...)
参数 | 作用 |
x | X轴数据,传入参数值时不要写参数名x |
y | Y轴数据,传入参数值时不要写参数名y |
color | 图形颜色,接收颜色英文名首字母、十六进制颜色代码等 |
linestyle | 线条样式,'-'是实线,'--'是虚线 |
marker | 点的样式,'*'是星号,"o'是圆点 |
format_string | 可以通过一串字符控制图形样式,如'--0表示红色、虚线、圆点 |
... | ... |
plt.plot(
x,
y1,
'-',
y2,
'--'
)
plt.title('某股票开盘价和20日均线的折线图')
plt.xticks([0,100,200,300,400,500,600],rotation=15)
-
y1
: 这是第一个 y 轴数据序列,将与 x 轴数据一起绘制成折线 -
y2
: 这是第二个 y 轴数据序列,通常用于比较两个不同的数据趋势 plt.xticks([0,100,200,300,400,500,600], rotation=15)
: 这行代码设置了 x 轴的刻度位置和标签[0,100,200,300,400,500,600]
是 x 轴上显示刻度的点rotation=15
表示将 x 轴的刻度标签旋转 15 度
散点图
- 散点图能够查看两个序列数据之间的相关关系
- 绘图函数:plt.scatter(x,y,s,c,marker,...)
参数 | 作用 |
x | X轴数据,传入一个列表序列类型数据 |
y | Y轴数据,传入一个列表序列类型数据 |
s | 点标记的大小 |
c | 点标记的颜色 |
marker | 点的样式,'*'是星号,'o'是圆点 |
... | ... |
plt.scatter(
df_book['浏览量'],
df_book['成交商品件数'],
s = 1,
c=['pink']
)
plt.title('浏览量和成交商品件数')
plt.xlim(0,5000)
plt.ylim(0,400)
plt.show
scatter
函数可以接受数据点的坐标、大小、颜色等参数。-
plt.xlim(0,5000):x轴显示的范围
-
plt.ylim(0,400):y轴显示的范围
直方图
- 直方图能够查看序列数据的分布情况
- 数据的分布即统计序列在不同区间内数据的个数
- 绘图函数:plt.hist(x,bins,….)
参数 | 作用 |
x | 列表、序列数据 |
bins | 统计数据分布的区间,接收一个列表 |
... | ... |
plt.hist(
df_air['年龄'],
bins=[i for i in range(0,100,2)],
color='pink'
)
plt.title('用户年龄分布图(直方图)')
plt.show()
-
bins=[i for i in range(0,100,2)]:柱子的区间边界点,以列表生成式的方式生成较方便
箱型图
- 通过四分位数(Q1\Q2\Q3)和上限、下限表示数据分布
- 上限=Q3+1.5*(Q3-Q1),下限=Q1-1.5*(Q3-Q1)
- 箱型图通过圆点来显示序列的异常值
- 绘图函数:plt.boxplot(x,labels,vert,whis...)
参数 | 作用 |
x | 列表、序列数据,可以接收多个序列 |
lables | 序列数据的标签,接收字符串的列表 |
vert | 控制箱型图的方向,接收布尔值 |
whis | 控制上下限和上下位分数之间的距离,默认为1.5 |
... | ... |
plt.boxplot(
df_air['年龄'].dropna(),
labels=['年龄'],
vert=False,
)
plt.show()
-
df_air['年龄'].dropna(): 数据中不能有空值,如果画多个箱形图,则数据要以列表的形式作为第一参数
-
labels=['年龄']: 必须输入一个列表
同时绘制多张图
创建画布
- 生成画布函数:plt.figure(figsize=(a,b))
- figsize: 设置空白画布的大小,接收一个含有两个元素的元组,表示画布的长和宽。
plt.figure(figsize=(8, 4))
plt. show()
添加子图的逻辑
- 子图区域选择函数:plt.subplot(x,y,z)
- 执行后会在画布中选定一个区域,由参数xyz决定
- x,y: 表示将画布对象划分为x行y列,共 x*y 个区域
- z: 表示在上述的 x*y 个区域中的第z个(从左到右,从上到下)区域上画图
plt.figure(figsize=(16,8))
plt.subplot(2,3,4)
pit.subplot(2,3,2)
plt.subplot(2,3,5)
plt.subplot(2,3,1)
plt.subplot(2,3,3)
plt.subplot(3,2,6)
plt.show()
心得体会
- 通过不断尝试绘制不同类型的图表,我对Matplotlib的理解逐渐加深。每解决一个问题,我的技能就更加熟练。
- 在绘制图表之前,我学会了如何更好地理解和组织数据。清晰的数据结构是成功可视化的关键。
- Matplotlib提供了大量的自定义选项,我学会了如何根据需要调整图表的外观,使它们既美观又信息丰富。
- 在处理大型数据集时,通过优化数据结构和使用更高效的绘图方法,如批量处理数据,我解决了这个问题。
- 在尝试创建复杂的图表布局时,通过学习
subplot
的使用,我能够更好地控制图表布局。 - 最后,Matplotlib是一个强大的工具,但要充分利用它,需要时间和实践。