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 plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

画图样例 

from matplotlib import pyplot as plt
colors=['r','g','b','k']
x=np.linspace(-2*np.pi,2*np.pi,500)#生成-2*pi到2*pi 含有500个数据的数组
y1=x**2
y2=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)

python 中 Matplotlib画图技巧

4.通用模板

import numpy as np
import 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()

 python 中 Matplotlib画图技巧

 5.高阶技巧:twinx/ twiny

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

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,10,num=60)
y=np.sin(x)
z=0.01*np.cos(x)-0.9
plt.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()

python 中 Matplotlib画图技巧

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 np
import matplotlib.pyplot as plt
fig = 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.15
ax5=fig.add_axes([left, bottom, width, height])
ax5.bar(x4, y4);

python 中 Matplotlib画图技巧

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月10日
下一篇 2023年3月10日

相关推荐