导入
import matplotlib.pyplot as plt
import random #后面需要用的random模块
绘制流程
创建画布
plt.figure(figsize=(3,3))
绘制图像
plt.plot([1,2,3,4],[7,8,6,6]) #参数x,y
还可以跟参数color和linestyle
显示图像
plt.show()
添加自定义x,y刻度
plt.xticks()
plt.yticks()
x=range(60)
y_sh=[random.uniform(15,18) for i in x] #随机产生15-18之间的数
plt.figure(figsize=(20,8))
plt.plot(x,y_sh)
x_ticks_label=['11点{}分'.format(i) for i in x]
y_ticks=range(40)
plt.xticks(x[::5],x_ticks_label[::5]) #间隔5显示,并用后面参数(字符串)替换前面参数的表示
plt.yticks(y_ticks[::5]) #用y_ticks来显示y的刻度
plt.show()
注意:若要解决中文显示问题,添加如下代码
1.查询当前系统所有字体
from matplotlib.font_manager import FontManager
import subprocess
mpl_fonts = set(f.name for f in FontManager().ttflist)
print('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
print('\t' + f)
2.修改为一个支持中文的字体(Arial Unicode MS是支持中文的)
plt.rc("font",family='Arial Unicode MS')
添加网格显示
plt.grid(linestyle='--',alpha=0.5)
linestyle是网格线的形态,其中- -表示虚线,alpha是网格线的透明度
添加描述信息(x轴,y轴名称以及标题)
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('中午11点到12点温度曲线')
图像保存
注意:要在调用show方法之前调用,否则无法保存图片
plt.savefig('test.png')
显示图例
先加上label
y_bj=[random.uniform(1,3) for i in x]
plt.plot(x,y_sh,label='上海')
plt.plot(x,y_bj,color='r',linestyle='--',label='北京')
显示图例在最佳位置
plt.legend(loc='best') #也可以把参数写成loc=0
在多个坐标系下绘制多个图像
fig,axes=plt.subplots(nrows,ncols,figsize)
x=range(60)
y_sh=[random.uniform(15,18) for i in x]
y_bj=[random.uniform(1,3) for i in x]
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8))
axes[0].plot(x,y_sh,label='上海')
axes[1].plot(x,y_bj,label='北京',color='r',linestyle='--')
x_ticks=['11点{}分'.format(i) for i in x]
y_ticks=range(40)
axes[0].set_xticks(x[::5],x_ticks[::5])
axes[0].set_yticks(y_ticks[::5])
axes[1].set_xticks(x[::5],x_ticks[::5])
axes[1].set_yticks(y_ticks[::5])
axes[0].grid(linestyle='--')
axes[1].grid(linestyle='--')
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title('中午11点--12点某城市温度变化图')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title('中午11点--12点某城市温度变化图')
axes[0].legend(loc=0)
axes[1].legend(loc=0)
plt.show()
常见图形种类
折线图
plt.plot(x,y)
散点图
plt.scatter(x,y)
例子
x=[1,5,10]
y=[10,4,2]
plt.scatter(x,y)
plt.show()
柱状图
plt.bar(x,y,width,align='center')
x是传递的数据
例子
movie_n=['雷神4','神奇女侠','美国队长']
x=range(len(movie_n))
y=[76882,67211,23012]
plt.bar(x,y,width=0.5,color=['b','r','g'])
plt.xticks(x,movie_n)
plt.grid(linestyle='--')
plt.title('电影票房')
plt.show()
直方图
plt.hist(x,bins)
x是传递的数据,bins是指组数
例子
import numpy as np
x1=np.random.normal(1.75,1,100000000)
plt.hist(x1,1000)
plt.show()
饼图
plt.pie(x,labels,autopct,colors)
x是数量,labels是每部分名称,autopct是占比显示指定%1.2f%%
x=[1,2,3,4,5]
label=['class1','class2','class3','class4','class5']
explode=[0,0,0.1,0,0]
plt.figure(figsize=(20,8))
plt.pie(x,labels=label,autopct='%1.2f%%',explode=explode) #抽取第三块
plt.axis('equal') #让横轴竖轴等长
plt.show()