目录
一、matplotlib.pyplot绘图相关对象
1、容器类:图(figure)、坐标系(axes)、坐标轴(axis)、刻度(tick)
2、基础类:线(line)、点(marker)、文本(text)、图例(legend)、网格(grid)、标题(title)
二、绘图的类型
1、线形图:plot()
2、直方图:hist()
3、条形图:bar()
4、饼图:pie()
5、散点图:scatter()
6、3D图:from mpl_toolkits.mplt3d import Axes3d
7、动态交互图:pyecharts
一、首先要检测环境
源码:
pip show matplotlib
输出:
Name: matplotlib Version: 3.5.2 Summary: Python plotting package Home-page: https://matplotlib.org Author: John D. Hunter, Michael Droettboom Author-email: matplotlib-users@python.org License: PSF Location: c:\users\administrator\anaconda3\lib\site-packages Requires: cycler, fonttools, kiwisolver, numpy, packaging, pillow, pyparsing, python-dateutil Required-by: seaborn Note: you may need to restart the kernel to use updated packages.
二、导入第三方库
import matplotlib.pyplot as plt #导入第三方数据可视化库matplotlib中的pyplot绘图模块
import numpy as np #导入科学计算库,别名为np
三、不同绘图类型
1、线型图(plot)
源码:
#1、线形图:plot()
plt.plot([1,5,-8,7,4]) #默认为y坐标
输出:
(1)图形不变,x轴变
方法里的点需要用列表或数组描述(用[]),如果只有一组数据表示y坐标(x坐标默认为0,1,2,。。。),如果有两组分别为x和y值,要求x值和y值位数相等
源码:
#方法里的点需要用列表或数组描述(用[]),如果只有一组数据表示y坐标(x坐标默认为0,1,2,。。。),如果有两组分别为x和y值,要求x值和y值位数相等
plt.plot([1,2,3,5,7],[1,5,-8,7,4])#第一组列表或数组为X坐标,第二组列表或数组为Y坐标
输出:
源码:
plt.plot([5,8,6,3])
plt.xlabel('Gread')#x轴坐标签,坐标系默认为英文,如果需要显示为中文另加说明
plt.ylabel('Student')#y轴坐标签
plt.savefig('../R&Q_pic/test_0.png',dpi=600)
输出:
(2)绘制平行四边形
源码:
#绘制平行四边形
plt.plot([1,2,3,2,1],[1,2,2,1,1])
plt.axis([-10,10,-10,10]) #设置坐标轴取值范围,前面两位为x轴,后面两位为y轴,放数组【】里面
#plt.axis('off') #隐藏坐标轴
plt.savefig('../R&Q_pic/test_1.png',dpi=600) #保存图形
输出:
(3)同一绘图区域绘制多图
源码:
#同一绘图区域绘制多图
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(10) #创建一个0-9的整数序列
plt.plot(a,a*1.5,'ro-',label='a')
plt.plot(a,a*2.5,'gx--',label='b')
plt.plot(a,a*3.5,'y*',label='c')
plt.plot(a,a*4.5,'bs-',label='d')
plt.plot(a,a**2,'mH--',label='e')
plt.savefig('../R&Q_pic/test_2.png',dpi=600)
plt.legend() #显示图例
plt.show() #显示图表
输出:
源码:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='kaiti'
x=np.arange(0,4,0.02)#生成x轴序列
y_1=np.sin(np.pi*x)+2#生成y轴序列
y_2=np.cos(np.pi*x)
plt.plot(x,y_1,'mx')
plt.plot(x,y_2,'x')
plt.legend(['正弦曲线','余弦曲线'])
plt.title('正弦曲线图') #图表标题
plt.savefig('../R&Q_pic/test_3.png',dpi=600)
#plt.show()#显示图表
输出:
(4)多区域绘图
源码:
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
a=np.arange(0,5,0.02)
plt.subplot(322) #将当前坐标系切割成多个子块(3行2列,第2个区域)
plt.plot(a,f(a))
plt.subplot(323)
plt.plot(a,np.cos(2*np.pi*a),'-.',color='r')
plt.subplot(324)
plt.plot(a,np.sin(2*np.pi*a),'--',color='g')
plt.subplot(325)
plt.plot(a,np.tan(2*np.pi*a),':',color='m')
plt.savefig('../R&Q_pic/test_5.png',dpi=600)
plt.show()#显示图表
输出:
(5)综合示例
源码:
import matplotlib.pyplot as plt
plt.figure(num='气温趋势',figsize=(6,4)) #设置绘图区域大小
plt.rcParams['font.family']='Kaiti' #设置字体
x=["周一","周二","周三","周四","周五","周六","周日"]
y_1=[20,15,18,16,21,14,10] #一周最高气温
y_2=[12,8,14,10,13,9,4] #一周最低气温
plt.title("一周气温变化趋势") #图片标题
plt.xlabel("星期") #x轴标签
plt.ylabel("气温") #y轴标签
plt.plot(x,y_1,'rs--',label="最高气温") #绘制最高气温
plt.plot(x,y_2,'bo--',label="最低气温") #绘制最低气温
plt.legend() #显示图例
plt.savefig('../R&Q_pic/test5.png',dpi=600) #保存照片
plt.show()
输出:
2、直方图(hist)
源码:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='STSong'
datas_1=10+np.random.randn(1000) #随机生成1000个零
datas_2=12+np.random.randn(1000) #随机生成1000个零
plt.hist(datas_1,bins=30)
plt.hist(datas_2,bins=30,alpha=0.4)
plt.legend(["以10为中心的正态分布","以12为中心的正态分布"])
plt.title("直方图")
plt.xlabel("区间")
plt.ylabel("频数")
plt.savefig('../R&Q_pic/test_6.png',dpi=600)
plt.show()#显示图表
输出:
3、条形图 (bar)
源码:
import matplotlib.pyplot as plt
plt.rcParams['font.family']='STSong'
years=["2014","2015","2016","2017","2018","2019"]
baokao_nums=[172,164.9,177,201,238,290]
luqu_nums=[54.87,57.06,58.98,72.22,76.25,79.3]
x=range(len(years))
plt.bar(x,height=baokao_nums,width=0.4)
plt.bar([i+0.4 for i in x],luqu_nums,width=0.4)
plt.xticks([i+0.2 for i in x],years) #横坐标对应位置显示内容
plt.legend(["研究生报考人数","研究生录取人数"])
plt.title("研究生历年报考和录取情况")
plt.xlabel("年份")
plt.ylabel("人数/万人")
plt.savefig('../R&Q_pic/test_7.png',dpi=600)
plt.show()#显示图表
输出:
4、饼图(pie)
源码:
#案例:已知一个学生的活动时间分配为:学习8小时、睡觉7小时、吃饭3小时、玩乐6小时,绘制该学生一天时间分配饼状图
import matplotlib.pyplot as plt
plt.rcParams['font.family']='FangSong'
plt.rcParams['font.size']=18 #设置字体大小
labels=['学习','睡觉','吃饭','玩乐'] #活动标签
hours=[8,7,3,6] #时间分配
colors=['c','m','r','y']#各部分颜色
plt.pie(hours,labels=labels,colors=colors,shadow=True,explode=(0,0.1,0,0),\
autopct='%.1f%%',labeldistance=1.2)
plt.title("一天时间分配饼状图")
plt.savefig('../R&Q_pic/test_8.png',dpi=600)
plt.show()#显示图表
输出:
5、散点图(scatter)
源码:
import matplotlib.pyplot as plt
import numpy as np
num=50
plt.rcParams['font.family']='STSong'
plt.rcParams['font.size']=18 #设置字体大小
x_scatter=np.random.randint(1,10,num)
y_scatter=np.random.randint(1,10,num)
colors=range(num)
size=np.random.randint(30,500,num)
plt.title("散点图")
plt.scatter(x_scatter,y_scatter,c=colors,s=size)
plt.savefig('figure')
plt.show()#显示图表
输出:
6、3D图
源码 :
#3D图: from mpl _ toolkits .mplt3d import Axes3D#示例:绘制#= sin ( sqrt ( x 2+ y '2))/ sqrt (x2+ y '2)的图像
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure( num ='3D绘图', figsize=(12,6))
ax =Axes3D( fig,auto_add_to_figure= False )
fig.add_axes(ax)
X,Y=np.mgrid[-20:20:100j,-20:20:100j] #生成代表 X 轴和 Y 轴数据的列表,并进行网格化
Z = np.sin( np.sqrt(X**2+Y**2))/np.sqrt(X**2+Y**2)
# Z = mp . sin ( np .5qrt( X **2+15*21)
#绘制三维图
surf = ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
ax.set_zlim(-0.5,1)#设置 Z 轴范围
ax.set_xlabel ('X')
ax.set_ylabel ('Y')
ax.set_zlabel ('Z')
plt.title('$z =sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)$的三维图形')#设置标题
fig.colorbar(surf,shrink=0.5,aspect=5)
plt.savefig('../R&Q_pic/test9',dpi =600)
plt.show()
输出: