300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python 中 Matplotlib画图技巧

python 中 Matplotlib画图技巧

时间:2024-07-21 00:32:21

相关推荐

python 中 Matplotlib画图技巧

1.模块介绍

matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。绘图函数是直接作用于当前axes(matplotlib中的专有名词,图形中组成部分,不是数学中的坐标系。)

import matplotlib.pyplot as plt#import matplotlib.pyplot //也可以

2.基本函数

plt.plot(x, y) --> plot函数可以接受任意个数的参数,在此处是将x和y数据代入xy坐标中plt.plot(x, y, 'ro', x, y1, 'g--') --> x和y用‘ro’即红色圆形来画,而x和y1则用‘g--’即绿色虚线来画,‘r-’代表红色实线,其他的g和b依此类推,‘o'是圆形的意思,’b^‘表示蓝色类似正三角形,ax.scatter --> 散点图plt.xlabel('x') --> x轴标签plt.ylabel('y(x)') --> y轴标签plt.title("Polynomial") --> 指定图形的主题名字plt.show() --> 显示坐标图plt.subplot(311) --> 该函数的第一个参数是子图的行数,第二个参数是子图的列数,第三个参数是一个从1开始的序号。另一种方式是将这3个参数结合成一个数字,如311。这样,子图将被组织成3行1列fig = plt.figure() --> 创建一个Matplotlib的figure对象——这是绘图组件的顶层容器

3.画图模板

显示画图时出现的中文和负号

import matplotlib.pyplot as pltfrom pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False

画图样例

from matplotlib import pyplot as pltcolors=['r','g','b','k']x=np.linspace(-2*np.pi,2*np.pi,500)#生成-2*pi到2*pi 含有500个数据的数组y1=x**2y2=np.sin(x)y3=np.cos(x)y4=np.log(abs(x))f=[y1,y2,y3,y4]ff=['$y=x^2$','$y=sin(x)$','$y=cos(x)$','$y=log(x)$']plt.figure(figsize=(16,10))for i in range(1,len(colors)+1):plt.subplot(220+i)#subplot(abc)代表在a*b的画布里的第几个图plt.plot(x,f[i-1],color=colors[i-1]);plt.title(ff[i-1],size=18)

4.通用模板

import numpy as npimport matplotlib.pyplot as plt#正确显示中文和负号plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False# 数据准备x=np.linspace(-np.pi,np.pi)y=np.sin(x)z=np.cos(x)# 设置画布大小plt.figure(figsize=(12, 5))# plot 画x与y和x与z的关系图plt.plot(x,y,label='sin(x)',color='red', linewidth=1,marker='o',markersize=3)plt.plot(x,z,label='cos(x)',color='blue',linewidth=1,linestyle='dashed',marker='<',markersize=3)# 设置x轴标签、坐标轴范围,坐标轴刻度,坐标轴刻度旋转角度plt.xlabel('x',size=14)plt.xlim(-np.pi,np.pi)plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],rotation=60,size=12) ## 设置y轴标签、坐标轴范围,坐标轴刻度,坐标轴刻度旋转角度plt.ylabel('y',size=14)plt.ylim(-1,1)plt.yticks([-1,-0.5,0.5,0,1],rotation=0,size=12)#标题plt.title('sin/cos画图',size=18)# 紧凑布局:自动调整图形、坐标轴、标签之间的距离,对于多个子图时尤其有用。plt.tight_layout()# 设置显示图例,要在plt.plot 时设置 label='xxx'才能显示图例plt.legend()#加网格线plt.grid(True)# 保存图像,可以是任意后缀名,dpi设置图像清晰度#plt.savefig('./fig1.pdf', dpi=600) #要放在plt.show()之前,否作保存的图像为空白# 显示图像plt.show()

5.高阶技巧:twinx/ twiny

设置两条曲线共用x轴,但不共用y轴,或者相反。从而将两个数量级差距很大的曲线画在同一幅画中。下面以sin(x)和cos(x)举例

import numpy as npimport matplotlib.pyplot as pltx=np.linspace(0,10,num=60)y=np.sin(x)z=0.01*np.cos(x)-0.9plt.figure(figsize=(12,5))# plot 画x与y的关系图L1,=plt.plot(x,y,label='sin(x)',color='red', linewidth=1)plt.ylabel('y')plt.ylim(-1,1)plt.yticks([-1,-0.5,0,1],rotation=0)# 设置共用x轴plt.twinx()# plot 画x与z的关系图L2,=plt.plot(x,z,label='cos(x)',color='blue',linewidth=1)plt.ylabel('z')plt.ylim(-0.91,-0.89)plt.yticks([-0.91,-0.905,-0.90,-0.895,-0.89],rotation=0)plt.legend(handles=[L1,L2])plt.xlabel('x')plt.title('$\sin(x) \quad and \quad \cos(x)$画图')plt.tight_layout()plt.show()

6.使用Matplotlib创建子图

fig.add_axes

先调用plt.figure()创建Figure对象,图表是所有坐标的容器。调用fig.add_axes()在图表的任意位置添加子图,该方法接收一个包含4个数字的列表:[𝑥,𝑦,𝑤𝑖𝑑𝑡ℎ,ℎ𝑒𝑖𝑔ℎ𝑡][x,y,width,height],分别代表子图左下角的坐标(x,y),子图的宽度和高度,这四个数字的取值范围都是[0,1][0,1],代表相对位置和大小。最后调用ax.plot将数据映射到子图。

# 创建图表对象import numpy as npimport matplotlib.pyplot as pltfig = plt.figure(figsize=(10, 7))# 创建子图ax1 = fig.add_axes([0, 0.5, 0.45, 0.45]) # 在图表的左上角创建一个子图ax2 = fig.add_axes([0, 0, 0.45, 0.45]) # 在图表的左下方创建一个子图ax3 = fig.add_axes([0.5, 0.5, 0.45, 0.45]) # 在图表的右上角创建一个子图ax4 = fig.add_axes([0.5, 0, 0.45, 0.45]) # 在图表的右下方创建一个子图# 左上角子图:曲线图x1 = np.linspace(-10, 10, 100)ax1.plot(x1, np.sin(x1), color="red");# 右下角子图:柱状图x2 = ["a", "b", "c", "d", "e", "f"]y2 = [1.2, 1.3, 2.5, 0.25, 5, 1.56]ax2.bar(x2, y2, color="blue");# 左上角子图:曲线图x3 = np.linspace(-10, 10, 100)ax3.plot(x3, np.cos(x3), color="green");# 右下角子图:柱状图x4 = ["a", "b", "c", "d", "e", "f"]y4 = [1.2, 1.3, 2.5, 0.25, 5, 1.56]ax4.plot(x4, y4, color="black");left, bottom, width, height = 0.55, 0.25, 0.15, 0.15ax5=fig.add_axes([left, bottom, width, height])ax5.bar(x4, y4);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。