1. Matplotlib包
python中非常常用的可视化工具包。而pandas中的画图工具与该工具包的用法非常相似,代码基本都是可以直接迁移过去的。
2.常用操作
(1) 折线图
import matplotlib.pyplot as plt
plt.plot([1,0,9],[4,5,6])
plt.show()
图形展示如下:
从上述图可以看到一个现象: plot()函数中的两个list变量一个作为x,一个作为y。x和y中的每个元素是一一对应的。plot并不会对x中元素进行排序。其中,plot()函数中有几个常用的参数,这些参数可以对折线的颜色、形式、宽度进行制定。常见的参数有:
参数 | 说明 |
---|---|
linewidth | 指定折线宽度 |
color | 指定折线颜色 |
alpha | 指定折线透明度 |
marker | 指定折点样式 |
linestyle | 指定折线样式 |
(2) X轴、Y轴
函数 | 说明 |
---|---|
xticks()、yticks() | 指定X轴、Y轴的刻度标签 |
xlabel()、ylabel() | X轴、Y轴的名称 |
xlim()、ylim() | 指定X轴、Y轴的展示范围。xlim()和ylim()用来确定最终的展示范围。xlim和xticks交叉的部分会有刻度,其余的部分不展示或没有对应的刻度。 |
import matplotlib.pyplot as plt
import random
x=range(2,26,2)
y=[random.randint(15,30) for i in x]
plt.figure(figsize=(20,8),dpi=80)
x_ticks_label=["{}:00".format(i) for i in x]
plt.xticks(x,x_ticks_label,rotation=45)
y_ticks_label=["{}℃".format(i) for i in range(min(y),max(y)+1)]
plt.yticks(range(min(y),max(y)+1),y_ticks_label)
plt.xlim(10,20)#x轴最小为10,最大为20。所以图中并没有展示出0到的8及22到24时刻的数据
plt.ylim(0,30)#最小为0,最大为30.从图中也可以看出,只有15到30部分才有刻度及对应的刻度标签
plt.xlabel("Time")
plt.ylabel("Temperature")
plt.plot(x,y)
plt.show()
(3) 显示中文
import matplotlib.pyplot as plt
import random
from matplotlib import font_manager
x=range(0,20)
y=[random.randint(10,30) for i in range(20)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#windows下的Jupyter引用中文
my_font=font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
plt.xlabel("时间",rotation=45,fontproperties=my_font,fontsize=20)
plt.ylabel("次数",fontproperties=my_font,fontsize=20)
plt.title("每分钟跳动次数",fontproperties=my_font,fontsize=20)
plt.show()
(4)plt.gca()获取当前图像元素
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,100)
fig=plt.figure(figsize=(5,10),dpi=80)
fig.add_subplot(2,1,1)
ax=fig.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(("data",0))
ax.spines['left'].set_position(('data',0))
plt.title('sin(x)')
plt.plot(x,np.sin(x))
ax2=fig.add_subplot(2,1,2)
ax=fig.gca()
#如果不加ax=fig.gca()则以下操作会作用在第一个子图上
ax.spines['bottom'].set_color('blue')
ax.spines['left'].set_color('blue')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.plot(x,np.cos(x),color='r')
plt.title('cos(X)')
plt.show()
(5) plt.text()给图形添加数据标注
import matplotlib.pyplot as plt
from matplotlib import font_manager
a=['流浪地球','疯狂外星人','飞驰人生','大黄蜂','熊出没','新喜剧人生']
b=['38.13','19.85','14.89','11.36','6.47','5.93']
my_font=font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
plt.figure(figsize=(10,8),dpi=80)
rects=plt.bar(range(len(a)),[float(i) for i in b],width=0.3,color=['r','g','b','r','g','b'])
print(type(rects))
plt.xticks(range(len(a)),a,fontproperties=my_font)
plt.yticks(range(0,41,5),range(0,41,5))
#这里可以使用for in是因为rects是可迭代的。但不是所有的图形元素都是可迭代的。
for rect in rects:
height=rect.get_height()
#plt.text()可以在图上的任意位置加文本内容
plt.text(rect.get_x()+rect.get_width()/2,height+0.3,str(height),ha='center')
plt.show()
(6) plt.axvline()和plt.axhline()添加竖线和横线
import matplotlib.pyplot as plt
plt.plot([1,0,9],[4,5,6])
plt.axvline(4.5,color='r',linestyle='--')#画竖线
plt.axhline(5,color='g',linestyle='--')#画横线
plt.show()
(7) 显示中文
import matplotlib as mpl
#Windows
mpl.rcParams['font.sans-serif']=['SimHei']
#MAC系统
mpl.rcParams['font.sans-serif']=['Arial Unicode MS']