Matplotlib 是 Python 中常用的 2D 绘图库,它能轻松地将数据进行可视化,作出精美的图表。
绘制折线图:
import matplotlib.pyplot as plt
#时间
x=['周一','周二','周三','周四','周五','周六','周日']
#能量值
y=[61,72,66,79,80,88,85]
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(x,y)
plt.show()
效果图:
如果要在一张图上显示两个折线图,只需要调用两次plt.plot(),并且显示图例,在调用 plt.plot()
方法时传入 label
参数,接着调用 plt.legend()
方法显示图例,例如:
#时间
x=['周一','周二','周三','周四','周五','周六','周日']
#能量值
y1=[61,72,66,79,80,88,85]
#money
y2=[11.5,18.5,58,16.5,50.13,12,130.94]
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(x,y1,label='能量值')
plt.plot(x,y2,label='money')
plt.legend()
plt.show()
效果图:
如果想自行选择图例位置的话可以通过 plt.legend()
方法的 loc
参数实现,loc
参数共有如下 11 种方式可供选择:
#靠上居中
plt.legend(loc='upper center')
绘制柱状图:
普通柱状图:
普通柱状图的画法很简单,调用 plt.bar()
方法即可。
- 传入两个参数,第一个参数是 x 轴上刻度的标签序列(列表、元组、数组等),第二个参数则用于指定每个柱子的高度,也就是具体的数据。
plt.bar()
还有一些可选参数,常用的有width
和color
,分别用于设置柱子的宽度(默认 0.8)和颜色。
#时间
x=['周一','周二','周三','周四','周五','周六','周日']
#能量值
y1=[61,72,66,79,80,88,85]
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#设置图表的标题
plt.title("xback的一周")
plt.bar(x,y1,label='能量值',width=0.6,color='purple')
plt.legend()
plt.show()
效果图:
堆叠柱状图:
#时间
x=['周一','周二','周三','周四','周五','周六','周日']
#能量值
y1=[61,72,66,79,80,88,85]
#money
y2=[11.5,18.5,58,16.5,50.13,12,80]
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.bar(x,y1,label='能量值',width=0.6,color='purple')
plt.bar(x,y2,label='money',width=0.6,color='red')
plt.title("xback的一周")
plt.legend()
plt.show()
效果图:
分组柱状图:
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(7)
width=0.3
#时间
day=['周一','周二','周三','周四','周五','周六','周日']
#能量值
y1=[61,72,66,79,80,88,85]
#money
y2=[11.5,18.5,58,16.5,50.13,12,80]
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.bar(x-width/2,y1,label='能量值',width=0.3,color='purple')
plt.bar(x+width/2,y2,label='money',width=0.3,color='red')
plt.title("xback的一周")
plt.xticks(x,day)
plt.legend()
plt.show()
效果图:
绘制饼图:
plt.pie()
方法每个参数的作用:第一个参数是绘图需要的数据;参数labels
指定了数据对应的标签;参数autopct
则给饼图自动添加百分比显示。'%0.1f%%'
可以分为两部分,一部分是%0.1f
表示保留一位小数,同理%0.2f
表示保留两位小数。- 另一部分是
%%
,其实它就表示输出一个%
,因为%
还字符串格式化输出中有特殊的含义,所以想要输出%
就得写成%%
。所以,'%0.1f%%'
的含义是保留一位小数的百分数,例如:53.3%。
#时间
day=['周一','周二','周三','周四','周五','周六','周日']
#能量值
happiness=[61,72,66,79,80,88,85]
#突出显示数据
explode=(0.1,0,0,0,0,0,0)
# 用来设置字体样式以正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.pie(happiness,explode=explode,autopct='%0.1f%%')
plt.title("xback的一周")
plt.show()
效果图:
绘制子图:
- 在 matplotlib 中,我们可以调用
plt.subplot()
方法来添加子图。plt.subplot()
方法的前两个参数分别是子图的行数和列数,第三个参数是子图的序号(从 1 开始) - 使用
set_title()
来为每个子图设置单独的标题。需要注意的是,如果想要给带有子图的图表设置总的标题的话,不是使用plt.title()
方法,而是通过plt.suptitle()
方法来设置带有子图的图表标题。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用来设置字体样式以正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 默认是使用Unicode负号,设置正常显示字符,如正常显示负号
x = np.arange(0, 2 * np.pi, 0.1)
plt.suptitle('三角函数可视化')
# 子图 1
ax1 = plt.subplot(2, 2, 1)
ax1.set_title('sin函数')
y1 = np.sin(x)
ax1.plot(x, y1)
# 子图 2
ax2 = plt.subplot(2, 2, 2)
ax2.set_title('cos函数')
y2 = np.cos(x)
ax2.plot(x, y2)
# 子图 3
ax3 = plt.subplot(2, 1, 2)
ax3.set_title('tan函数')
y3 = np.tan(x)
ax3.plot(x, y3)
plt.show()
效果图: