赞
踩
平时经常用到一个image上面附着一些点或者矩形的操作,以及中英文文字的转换,这里做一个简单的总结。
使用的环境是Python3 + jupyter notebook + matplotlib.pyplot
如果平台没有中文环境,先下载一下
wget http://d.xiazaiziti.com/en_fonts/fonts/s/SimHei.ttf
把它放在python放置字体的环境下(获取随便放哪里都可以)
然后jupyter使用的时候在头部加入字体配置,
- from matplotlib.font_manager import FontProperties
- 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)
1 使用均值和方差来控制画图的scale
2 在新建图像的时候设定dpi,图像就不会看起来有alias
3 设置extent修改轴的刻度值
4 设置set_aspect改变横轴和纵轴的比例
5 最后返回ax方便后续在此图上增加plot
- import matplotlib.pyplot as plt
- import matplotlib.colors as pcl
-
- def plot_shot(OUT=None, scale=0.1):
-
- sc1 = OUT.mean() - scale*OUT.std()
- sc2 = OUT.mean() + scale*OUT.std()
- cN = pcl.Normalize(vmin=sc1, vmax=sc2)
-
- fig, ax = plt.subplots(figsize=(6,3), dpi=120)
- # im = ax.imshow(OUT, aspect=16/400, cmap='seismic', norm=cN, interpolation='nearest')
- # im = ax.imshow(OUT, cmap='seismic', norm=cN, interpolation='bicubic', extent=[0,126,3,0])
- im = ax.imshow(OUT, cmap='gray', norm=cN, interpolation='bicubic', extent=[0,126,3,0])
- ax.set_aspect(20)
-
- # plt.colorbar(im, shrink=0.3, orientation='horizontal')
- # plt.axis('off')
- return ax
1 引入上一个image的ax以在此基础上加入新的点
2 轴和轴比aspect设置为相同的
3 配置一下正确的x轴的坐标值
- def spplot(ax=None, ref_bb=None, cal_bb=None, pre_bb=None, pre_bbo=None, auto_bb=None, ishh=None, ich=None):
- # 模型效果可视化
- if ax is None:
- fig, ax = plt.subplots(figsize=(6,3), dpi=300)
- if ref_bb is not None:
- ax.plot( ref_bb, 'ko', markersize=2, label=u'手动拾取')
-
- if cal_bb is not None:
- ax.plot( cal_bb, 'y1', markersize=3, label=u'走时计算法')
-
- if auto_bb is not None:
- ax.plot( auto_bb, 'b.', markersize=2, label=u'最大振幅法')
-
- ax.plot( pre_bb, 'rx', markersize=2, label=u'PSnet预测法-K57')
-
- if pre_bbo is not None:
- ax.plot( pre_bbo, 'gx', markersize=2, label=u'PSnet预测法-K7')
-
-
- # 标题
- # plt.title('Shot ID ' + str(ishh) )
- plt.title(u'炮集编号 ' + str(ishh), fontsize=10, fontproperties=SimHei)#, fontproperties=font_set) # 标题
- # 图例
- # plt.legend(loc='upper right', fontsize=8)
- plt.legend(fontsize=8, prop=SimHei)#, fontproperties=SimHei) # 图例位置
-
- # y轴
- # plt.ylabel('Time (s)')
- plt.ylabel(u'时间(秒)', fontsize=10, fontproperties=SimHei) # y轴标题
- plt.gca().invert_yaxis()
- plt.ylim([3, 0])
-
- # x轴
- nx = 126; step_x = 20;
- x = np.arange(500,126*20+500,20)
- x_positions = np.arange(0, nx, step_x) # pixel count at label position
- x_labels = x[::step_x] # labels you want to see
- plt.xticks(x_positions, x_labels)
-
- # plt.xlabel('Depth (m)')
- plt.xlabel(u'深度(米)', fontsize=10, fontproperties=SimHei) # x轴标题
-
- # 轴比
- ax.set_aspect(20)
-
- return ax
一般都是后期ppt加入,但是为了实现全部自动化,可以用matplotlib里面的patches
- import matplotlib.patches as patches
- def insert_box(ax=None, left_x=0, left_y=0, nx=10, ny=10 ):
- if ax is None:
- fig, ax = plt.subplots(figsize=(6,3), dpi=300)
-
- rect = patches.Rectangle((left_x, left_y),
- nx,
- ny,
- linewidth=1,
- edgecolor='red',
- fill = False)
- ax.add_patch(rect)
- # plt.show()
- return ax
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。