matplotlib.pyplot画图

一、创建图形实例

  1. figure(num,figsize,dpi,facecolor,edgecolor)一个画板窗口,绘图只能在子图上,一个窗口可有多个子图;
    num窗口编号,可以使数字或字符串; facecolor设置窗口的背景颜色; edgecolor边框的颜色; figsize窗口大小,单位是英寸; dpi分辨率;
  2. plt表示当前操作的图,可以用plt设置也可以用子图属性进行设置;
import matplotlib.pyplot as plt 

fig = plt.figure(1,figsize(15,15),facecolor='white')

二、绘制子图

  1. subplot(nrows,ncols,index,**kwargs)其中,
    nrows是子图所在行;ncols是子图所在列数;index是整个窗口上该子图的编号,1<=index<=nrows*ncols;[比如subplot(3,2,1)即:这个窗口可以画3*2个子图,我是第1个(第一行第一个);subplot(3,2,5)是第5个子图,在第三行第一个;] ;如果行列和编号数都小于10可以连在一起写,即(3,2,1)和(321)一样;frameon子图边框,默认值True;

  2. add_subplot()subplot()都是创建子图,
    add_subplot()subplot()参数使用上没什么区别;
    调用的两个函数的区别是:

fig = plt.figure()  #一个窗口
ax1 = fig.add_subplot(3,2,1)   #这个窗口上第一个子图
ax2 = plt.subplot(3,2,2)    #这个窗口上第二个子图
  1. plt设置的事当前的子图,见下面plt.grid()的作用
''' key1 在一个可以放2*2个子图的窗口 依次创建3个子图'''
#编号为1的白色窗口
fig = plt.figure(1,facecolor='white')
#添加一个 编号为1,没有轴线和边框 的子图
ax1 = fig.add_subplot(2,2,1,frameon=False) 
#添加一个 编号为2,有轴线有边框背景色为桃色 的子图
ax2 = fig.add_subplot(2,2,2,facecolor='#fcb69f') 
#当前操作的图示ax2, plt.grid()会让ax2显示网格,而不是ax1和ax2都有网格
plt.grid() 
#添加一个 编号是3 的子图, ax3没有网格
ax3 = plt.subplot(2,2,3)
#等同于 ax2 = fig.add_subplot(2,2,3)

plt.show()

网格颜色和样式参考https://blog.csdn.net/weixin_41789707/article/details/81035997详细解释

  1. plt.subplots(nrows,ncols) 创建容放nrows*ncols个子图的窗口
'''key2 在一个可以放2*2个子图的窗口 一次性创建2*2个子图'''
#一个窗口,2*2 个子图,返回子图数组
fig2, axs = plt.subplots(2,2)
ax4 = axs[0]
ax5 = axs[1]
plt.show()
  1. 上面一共创建了两个窗口,第一个窗口3个子图,第二个窗口4个子图,根据子图获取所属窗口
getFig = ax1.figure   #获取到第一个窗口
  1. 清除窗口上的轴(清除子图)
#清除所有的子图
fig.clf()   #或者plt.clf()

#清除某个子图,例如清除ax2
fig.clf(ax2)   #或者plt.clf(ax2)

#清除当前这个子图上的东西?,在下并不清楚
plt.cla()   

三、子图修饰

注:字符串前面的 u/U 表示以unicode编码,为了防止中文乱码;如果在绘图中中文显示是小方块应该是matplotlib没有中文字体包,修复方式见

'''key1 用pyplot'''
plt.title(U'画图')	#设置图的标题
plt.xlabel('年份')	#x轴名
plt.ylabel('增长率')	#y轴名
plt.axis([-1,2,0,4])	#x轴从-1到2,y轴从0到4
plt.xlim(0,20)	#x轴从0到20,会覆盖上面的plt.axis()对x的设置
plt.ylim(-4,10)	#y轴从-4到10,会覆盖上面的plt.axis()对y的设置
plt.xticks([])	#清除x轴刻度
plt.xticks([-1,-0.5,0,0.5,1,1.5])	#设置x轴刻度,覆盖之前的设置
'''key2'''
ax1.set_title(U'画图')#设置图的标题
ax1.set_xlabel('年份')	#x轴名
ax1.set_ylabel('增长率')	#y轴名
ax1.set_xlim(0,20)	#x轴从0到20,会覆盖上面的plt.axis()对x的设置
ax1.set_ylim(-4,10)	#y轴从-4到10,会覆盖上面的plt.axis()对y的设置
ax1.set_xticks([])	#清除x轴刻度
ax1.set_xticks([-1,-0.5,0,0.5,1,1.5])	#设置x轴刻度,覆盖之前的设置

四、注解工具ax1.annotate 和ax1.text()

annotate(xy, xycoords, s, xytext, textcorrds, arrowprops, bbox, ha, va, color) 指向型
xy被注释的点的坐标;
xycoords被注解的点的坐标的属性;(不造什么意思
s注释文本;
xytext注解文本的标准坐标;
textcoords注解文本的坐标的属性;(不造什么意思
arrowprops箭头样式,可支持字典数据类型;
bbox注解文本框的样式,支持字典数据类型;
color注解文本颜色;
hava决定注解文本的标准坐标相对于注解文本框的位置;ha是水平方向,取值有right, center, left;va是垂直方向,取值有top, center, bottom;

#注释文本框的样式:锯齿框,颜色深度为0.9
textStyle = dict(boxstyle='sawtooth',fc='0.9')
#圆角框,深度为0.5
textStyle2 = dict(boxstyle='round4',fc='0.5')
#箭头样式
arrow_args = dict(arrowstyle='->')
#画一个指向点(0.5,0.1)的注解
ax1.annotate(xy=(0.5,0.1),s='haha',xytext=(0.1,0.5),va='top',ha='right',bbox=textStyle,arrowprops=arrow_args)
#画一个指向(0.7,0.1)的注解
ax1.annotate(xy=(0.7,0.1),s='hoho',xytext=(0.4,0.5), va='bottom',ha='left',bbox=TextStyle,arrowprops=arrow_args)

plt.show()

效果展示
ax1.text(x,y,s,family,fontsize,style,color) 没有指向,单纯在图上添加一个文本
x,y注解文本的坐标;
s注解文本内容;
family字体,有 ‘serif’, ‘sans-serif’, ‘cursive’, ‘fantasy’, ‘monospace’ ;
fontsize字体大小
style字体样式,‘normal’, ‘italic’, ‘oblique’;
color字体颜色;
在上面的代码后( plt.show()前 )添加几行:

ax1.scatter([0.8],[0.5])  #在(0.8, 0.5)画个点
ax1.text(0.8,0.1,'我是一行字')	#在(0.8,0.1)写一个注解
#调整一下坐标轴,不然.....
ax1.set_xlim(0,1)	
ax1.set_ylim(0,2)

效果展示

五、ax1.plot()和ax1.scatter()画图

scatter()是画散点图的;
plot()默认画直线图,如果设置线条格式为’o’也可以画散点图
参见https://blog.csdn.net/Poul_henry/article/details/88602806详细解释

六、直线图、极坐标图、柱状图等等

参见https://www.jianshu.com/p/da385a35f68d

七、保存图片

plt.savefig('haha.jpg',dpi=400)

八、修复绘图不能显示中文的问题

(参考自https://www.zhihu.com/question/25404709/answer/309784195)

创建一个.py文件(或者python launcher),输入:

import matplotlib
print(matplotlib.matplotlib_fname())

执行,得到一个没有后缀的文件<我的python安装路径>Python\Python37\lib\site-packages\matplotlib\mpl-data\matplotlibrc ,文件名matplotlibrc,打开这个文件,查找下面这三行,把前面的注释#删掉:

font.family : sans-serif
font.sans-serif :
axes.unicode_minus :

第二行的冒号后面加上SimHei,即(可能每个人原来的字体有不同):

font.sans-serif : SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

下载 simhei.tff 字体包https://www.fontpalace.com/font-download/SimHei/ ,在下下载的时候崩溃了,直接在c盘搜了一个系统自带的(好使!),放在<我的python安装路径>Python\Python37\lib\site-packages\matplotlib\mpl-data\fonts\ttf文件夹中(用前面得到的那个路径来找的),文件名确认为SimHei.ttf

然后在.py文件写下面两句,重新加载字体包:

from matplotlib.font_manager import _rebuild
_rebuild()

完成

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值