Matplotlib绘图(进阶篇)

  • Post author:
  • Post category:其他


目录


一、创建图像并设置分辨率


二、绘制图像设置坐标轴的上下限


三、移动坐标脊柱使用gca()


四、添加图例使用label参数


五、注释


①有指向型文本注释 annotate()


②无指向型文本注释 text()


六、保存图片savefig()


一、创建图像并设置分辨率

import matplotlib.pyplot as plt
import numpy as np
# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

二、绘制图像设置坐标轴的上下限

import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

plt.show()

三、移动坐标脊柱使用gca()


说明:实际上每幅图有四条脊柱(上下左右),为了将脊柱放在图的中间,我们必须将其中的两条设置为无色,然后调整剩下的两条到合适的位置——数据空间的 0 点。

import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

ax=plt.gca()

# 设置右边和上边的边框线颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 把bottom设置为x轴刻度线
ax.xaxis.set_ticks_position('bottom')
# 设置bottom对应到0点
ax.spines['bottom'].set_position(('data',0))

# 把left设置为y轴刻度线
ax.yaxis.set_ticks_position('left')
# 设置left对应到0点
ax.spines['left'].set_position(('data',0))

plt.show()

四、添加图例使用label参数

import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

ax=plt.gca()

# 设置右边和上边的边框线颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 把bottom设置为x轴刻度线
ax.xaxis.set_ticks_position('bottom')
# 设置bottom对应到0点
ax.spines['bottom'].set_position(('data',0))

# 把left设置为y轴刻度线
ax.yaxis.set_ticks_position('left')
# 设置left对应到0点
ax.spines['left'].set_position(('data',0))

# 添加图例
plt.plot(X,C,color='y',linestyle='-',linewidth=2,label='cosine')       
plt.plot(X,S,color='r',linestyle='--',linewidth=2,label='sine')

# legend显示图例位置,不加参数,系统选择合适位置
# loc参数可以控制具体位置 1234象限
plt.legend(loc=2)

plt.show()

五、注释

①有指向型文本注释 annotate()


annotate():在图中带有指向型文本注释信息,突显细节

常用参数:

  • s:str, 注释信息内容
  • xy:(float,float), 箭头点所在的坐标位置
  • xycoords:为被注释点的坐标系属性,通常xycoords值为’data’,即以被注释的坐标点xy为参考
  • xytext:(float,float), 注释内容的坐标位置
  • textcoords: 设置注释文本的坐标系属性
  • fontsize:设置字体大小
  • weight::str or int, 设置字体线型其中字符串从小到大可选项有:
  • {‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}
  • color:str or tuple, 设置字体颜色
  • arrowprops:dict,设置指向箭头的参数,字典中key值有:
  • ①arrowstyle:设置箭头的样式
  • ‘-’ None
  • ‘->’ head_length=0.4,head_width=0.2
  • ‘-[’ widthB=1.0,lengthB=0.2,angleB=None
  • ‘|-|’ widthA=1.0,widthB=1.0
  • ‘-|>’ head_length=0.4,head_width=0.2
  • ‘<-’ head_length=0.4,head_width=0.2
  • ‘<->’ head_length=0.4,head_width=0.2
  • ‘<|-’ head_length=0.4,head_width=0.2
  • ‘<|-|>’ head_length=0.4,head_width=0.2
  • ‘fancy’ head_length=0.4,head_width=0.4,tail_width=0.4
  • ‘simple’ head_length=0.5,head_width=0.5,tail_width=0.2
  • ‘wedge’ tail_width=0.3,shrink_factor=0.5
  • ②connectionstyle:设置两个点之间的连接路径,候选项有’arc3′,’arc’,’angle’,’angle3’,可以防止箭头被曲线内容遮挡
  • ③color:设置箭头颜色,见前面的color参数。
  • bbox:dict,为注释文本添加边框,其key有:
  • ①boxstyle方框外形
  • circle:圆圈
  • darrow:双箭头
  • larrow:左箭头
  • rarrow:右箭头
  • round:成圆角矩形
  • round4:膨胀矩形
  • roundtooth:波浪线矩形
  • sawtooth:锯齿矩形
  • square:成直角矩形
  • ②facecolor(可简写为fc):设置背景颜色
  • ③edgecolor(可简写为ec):设置边框线条颜色
  • ④lineweight(可简写为lw):设置边框线型粗细
  • ⑤alpha:设置透明度,[0,1]之间的小数,0代表完全透明,即类似③颜色设置无效。
import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

ax=plt.gca()

# 设置右边和上边的边框线颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 把bottom设置为x轴刻度线
ax.xaxis.set_ticks_position('bottom')
# 设置bottom对应到0点
ax.spines['bottom'].set_position(('data',0))

# 把left设置为y轴刻度线
ax.yaxis.set_ticks_position('left')
# 设置left对应到0点
ax.spines['left'].set_position(('data',0))

# 添加图例
plt.plot(X,C,color='y',linestyle='-',linewidth=2,label='cosine')       
plt.plot(X,S,color='r',linestyle='--',linewidth=2,label='sine')

# legend显示图例位置,不加参数,系统选择合适位置
# loc参数可以控制具体位置 1234象限
plt.legend(loc=2)

# 设置有指向型注释文本annotate()
t=2*np.pi/3
plt.plot([t,t],[0,np.cos(t)])
plt.scatter([t,],[np.cos(t),],50,color='b')

plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), 
         xycoords='data',
         xytext=(-90, -50), 
         textcoords='offset points', 
         fontsize=16,
         arrowprops=dict(arrowstyle="-|>", connectionstyle="angle3,angleA=-90,angleB=80"),
         bbox=dict(boxstyle='roundtooth,
                   pad=0.1',
                   fc='w',
                   ec='r',
                   lw=2,
                   alpha=0.5))

plt.plot([t,t],[0,np.sin(t)])
plt.scatter([t,],[np.sin(t),],50,color='r')

plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="-|>", 
         connectionstyle="arc3,rad=.3"),
         bbox=dict(boxstyle='round,pad=.5',fc='w',ec='r',lw=2,alpha=0.5))

plt.show()

②无指向型文本注释 text()


text()语法:plt.text(x,y,s,family,fontsize,style,color)

  • x,y代表注释内容位置
  • s代表注释文本内容
  • family设置字体,自带的可选项有{‘serif’, ‘sans-serif’, ‘cursive’, ‘fantasy’, ‘monospace’}
  • fontsize字体大小
  • style设置字体样式,可选项{‘normal’, ‘italic'(斜体), ‘oblique'(也是斜体)}
import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

ax=plt.gca()

# 设置右边和上边的边框线颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 把bottom设置为x轴刻度线
ax.xaxis.set_ticks_position('bottom')
# 设置bottom对应到0点
ax.spines['bottom'].set_position(('data',0))

# 把left设置为y轴刻度线
ax.yaxis.set_ticks_position('left')
# 设置left对应到0点
ax.spines['left'].set_position(('data',0))

# 添加图例
plt.plot(X,C,color='y',linestyle='-',linewidth=2,label='cosine')       
plt.plot(X,S,color='r',linestyle='--',linewidth=2,label='sine')

# legend显示图例位置,不加参数,系统选择合适位置
# loc参数可以控制具体位置 1234象限
plt.legend(loc=2)

t=2*np.pi/3
plt.plot([t,t],[0,np.cos(t)])
plt.scatter([t,],[np.cos(t),],50,color='b')

# 无指向型注释文本text()
# text()语法:plt.text(x,y,s,family,fontsize,style,color)
# x,y代表注释内容位置
# s代表注释文本内容
# family设置字体,自带的可选项有{'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'}
# fontsize字体大小
# style设置字体样式,可选项{'normal', 'italic'(斜体), 'oblique'(也是斜体)}
plt.text(x=t-1,y=np.cos(t)-0.5,s=r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',fontsize=15,family='monospace',style='normal')

plt.show()

六、保存图片savefig()


savefig()语法:

 savefig(fname, *, dpi='figure', format=None, metadata=None,
          bbox_inches=None, pad_inches=0.1,
          facecolor='auto', edgecolor='auto',
          backend=None, **kwargs
         )


常用参数:

  • fname:路径,可以自定义格式
  • dpi:分辨率,如果是“figure”,则使用数字的dpi值
import matplotlib.pyplot as plt
import numpy as np

# 创建一个8*6的图,并设置分辨率为80
plt.Figure(figsize=(8,6),dpi=80)

# endpoint默认为True,输出结束点 为False时,不输出结束点
X=np.linspace(-np.pi,np.pi,256,endpoint=True)

C,S=np.cos(X),np.sin(X)

# 绘制余弦曲线
plt.plot(X,C,color='y',linestyle='-',linewidth=2)

# 绘制正弦曲线
plt.plot(X,S,color='r',linestyle='--',linewidth=2)

# 设置x轴的上下限
plt.xlim(-4,4)

# 设置y轴的上下限
plt.ylim(-2,2)

# 设置x轴只显示-3到3之间的记号
plt.xticks(np.linspace(-3,3,7))

# 设置y轴只显示-1到1之间的记号
plt.yticks(np.linspace(-1,1,5))

ax=plt.gca()

# 设置右边和上边的边框线颜色为none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 把bottom设置为x轴刻度线
ax.xaxis.set_ticks_position('bottom')
# 设置bottom对应到0点
ax.spines['bottom'].set_position(('data',0))

# 把left设置为y轴刻度线
ax.yaxis.set_ticks_position('left')
# 设置left对应到0点
ax.spines['left'].set_position(('data',0))

# 添加图例
plt.plot(X,C,color='y',linestyle='-',linewidth=2,label='cosine')       
plt.plot(X,S,color='r',linestyle='--',linewidth=2,label='sine')

# legend显示图例位置,不加参数,系统选择合适位置
# loc参数可以控制具体位置 1234象限
plt.legend(loc=2)

# 保存图片
plt.savefig('annotate.png',dpi=100)

plt.show()



版权声明:本文为Yangyuqing_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。