当前位置:   article > 正文

简单常用的matplotlib的画图脚本_python 绘图脚本

python 绘图脚本

平时经常用到一个image上面附着一些点或者矩形的操作,以及中英文文字的转换,这里做一个简单的总结。

使用的环境是Python3 + jupyter notebook + matplotlib.pyplot

中文环境设置

如果平台没有中文环境,先下载一下

wget http://d.xiazaiziti.com/en_fonts/fonts/s/SimHei.ttf

把它放在python放置字体的环境下(获取随便放哪里都可以)

然后jupyter使用的时候在头部加入字体配置, 

  1. from matplotlib.font_manager import FontProperties
  2. SimHei = FontProperties(fname='/home/wyw/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf')

使用的时候也要加入一个设置,例如, 

plt.legend(fontsize=8, prop=SimHei)
plt.ylabel(u'时间(秒)', fontsize=10, fontproperties=SimHei)

Image底图

1 使用均值和方差来控制画图的scale

2 在新建图像的时候设定dpi,图像就不会看起来有alias

3 设置extent修改轴的刻度值

4  设置set_aspect改变横轴和纵轴的比例

5 最后返回ax方便后续在此图上增加plot

  1. import matplotlib.pyplot as plt
  2. import matplotlib.colors as pcl
  3. def plot_shot(OUT=None, scale=0.1):
  4. sc1 = OUT.mean() - scale*OUT.std()
  5. sc2 = OUT.mean() + scale*OUT.std()
  6. cN = pcl.Normalize(vmin=sc1, vmax=sc2)
  7. fig, ax = plt.subplots(figsize=(6,3), dpi=120)
  8. # im = ax.imshow(OUT, aspect=16/400, cmap='seismic', norm=cN, interpolation='nearest')
  9. # im = ax.imshow(OUT, cmap='seismic', norm=cN, interpolation='bicubic', extent=[0,126,3,0])
  10. im = ax.imshow(OUT, cmap='gray', norm=cN, interpolation='bicubic', extent=[0,126,3,0])
  11. ax.set_aspect(20)
  12. # plt.colorbar(im, shrink=0.3, orientation='horizontal')
  13. # plt.axis('off')
  14. return ax

附加plot点

1 引入上一个image的ax以在此基础上加入新的点

2 轴和轴比aspect设置为相同的

3 配置一下正确的x轴的坐标值

  1. def spplot(ax=None, ref_bb=None, cal_bb=None, pre_bb=None, pre_bbo=None, auto_bb=None, ishh=None, ich=None):
  2. # 模型效果可视化
  3. if ax is None:
  4. fig, ax = plt.subplots(figsize=(6,3), dpi=300)
  5. if ref_bb is not None:
  6. ax.plot( ref_bb, 'ko', markersize=2, label=u'手动拾取')
  7. if cal_bb is not None:
  8. ax.plot( cal_bb, 'y1', markersize=3, label=u'走时计算法')
  9. if auto_bb is not None:
  10. ax.plot( auto_bb, 'b.', markersize=2, label=u'最大振幅法')
  11. ax.plot( pre_bb, 'rx', markersize=2, label=u'PSnet预测法-K57')
  12. if pre_bbo is not None:
  13. ax.plot( pre_bbo, 'gx', markersize=2, label=u'PSnet预测法-K7')
  14. # 标题
  15. # plt.title('Shot ID ' + str(ishh) )
  16. plt.title(u'炮集编号 ' + str(ishh), fontsize=10, fontproperties=SimHei)#, fontproperties=font_set) # 标题
  17. # 图例
  18. # plt.legend(loc='upper right', fontsize=8)
  19. plt.legend(fontsize=8, prop=SimHei)#, fontproperties=SimHei) # 图例位置
  20. # y轴
  21. # plt.ylabel('Time (s)')
  22. plt.ylabel(u'时间(秒)', fontsize=10, fontproperties=SimHei) # y轴标题
  23. plt.gca().invert_yaxis()
  24. plt.ylim([3, 0])
  25. # x轴
  26. nx = 126; step_x = 20;
  27. x = np.arange(500,126*20+500,20)
  28. x_positions = np.arange(0, nx, step_x) # pixel count at label position
  29. x_labels = x[::step_x] # labels you want to see
  30. plt.xticks(x_positions, x_labels)
  31. # plt.xlabel('Depth (m)')
  32. plt.xlabel(u'深度(米)', fontsize=10, fontproperties=SimHei) # x轴标题
  33. # 轴比
  34. ax.set_aspect(20)
  35. return ax

附加plot框

一般都是后期ppt加入,但是为了实现全部自动化,可以用matplotlib里面的patches

  1. import matplotlib.patches as patches
  2. def insert_box(ax=None, left_x=0, left_y=0, nx=10, ny=10 ):
  3. if ax is None:
  4. fig, ax = plt.subplots(figsize=(6,3), dpi=300)
  5. rect = patches.Rectangle((left_x, left_y),
  6. nx,
  7. ny,
  8. linewidth=1,
  9. edgecolor='red',
  10. fill = False)
  11. ax.add_patch(rect)
  12. # plt.show()
  13. return ax

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/166871
推荐阅读
相关标签
  

闽ICP备14008679号