python matplot 自由控制绘图

1、损失函数图

里面包含了:

  • 线条:颜色;
  • 图例:大小、字体、位置;
  • 坐标轴标题:位置、字体、大小。

效果图:

 代码:

plt.figure(figsize=(8, 6))  //图片大小
plt.plot(x,data1, color='orange', label='M1')
plt.plot(x,data2, color='green', label='M2')
plt.plot(x,data3, color='blue', label='M3')

#设置图例参数:大小、字体
plt.rcParams.update({'font.size': 17,'font.family': ['serif'],'font.serif':'Times New Roman'})
# 设置图例:位置、更细化的位置
plt.legend(loc='upper right')  # ,bbox_to_anchor=(0.8, 1)
# 坐标轴标题:名称、位置、字体、大小
plt.xlabel("Iterations", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.ylabel("Loss value", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.show()

2、画3合1的图

里面包含了:

  • 标题:字体、大小、位置;
  • 坐标轴标题:字体、大小、范围
  • 数值条color bar:样式、插值类型

效果图:

代码:

# 三合一 
# 整体图片设置:分组、大小
fig, ax = plt.subplots(1, 3, figsize=(20, 6))
# 每个图片之间的间隔
plt.tight_layout(pad=8)

# 图片1
index = 1     # 当前序号
ax0 = plt.subplot(1, 3, index)  # 确定绘制的位置
h = ax0.imshow(vT_comsol, interpolation='nearest', cmap='rainbow', vmin=vmin, vmax=vmax,
               extent=[0, 0.3, 0, 0.18],
               origin='lower', aspect='auto')
plt.xlabel("r/m", labelpad=10, fontdict={'family' : 'Times New Roman','fontsize': 15})
plt.ylabel("z/m", labelpad=10, fontdict={'family' : 'Times New Roman','fontsize': 15})
plt.title("Exact V(r,z)", pad=15, loc='center', fontdict={'family': 'Times New Roman','fontsize': 20})
divider0 = make_axes_locatable(ax0)
cax0 = divider0.append_axes("right", size="5%", pad=0.05)
fig.colorbar(h, cax=cax0)

# 图片2
ax1 = plt.subplot(1, 3, index + 1)
h1 = ax1.imshow(vvv, interpolation='nearest', cmap='rainbow', vmin=vmin, vmax=vmax,
                extent=[0, 0.3, 0, 0.18],
                origin='lower', aspect='auto')
plt.xlabel("r/m", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.ylabel("z/m", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.title("Predicted V(r,z)", pad=15, loc='center', fontdict={'family': 'Times New Roman','fontsize': 20})
divider1 = make_axes_locatable(ax1)
cax1 = divider1.append_axes("right", size="5%", pad=0.05)
fig.colorbar(h1, cax=cax1)

# 图片3
ax2 = plt.subplot(1, 3, index + 2)
h2 = ax2.imshow(v_error, interpolation='nearest', cmap='rainbow', vmin=v_errmin, vmax=v_errmax,
                extent=[0, 0.3, 0, 0.18],
                origin='lower', aspect='auto')
plt.xlabel("r/m", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.ylabel("z/m", labelpad=10, fontdict={'family': 'Times New Roman','fontsize': 15})
plt.title("Absolute error", pad=15, loc='center', fontdict={'family': 'Times New Roman','fontsize': 20})
divider2 = make_axes_locatable(ax2)
cax2 = divider2.append_axes("right", size="5%", pad=0.05)
fig.colorbar(h2, cax=cax2)

plt.show()

3、中文相关

python画图时,在标题、图例打印中文时,经常会无法显示。

我们可以去选择Windows自带的字体,打开相应目录,复制字体的名字;

设为预设字体,之后统一调用。即可正常显示中文。

效果图:

代码:

# 预设字体类型
myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc',size=15)


plt.figure(figsize=(10, 6))  # 设置整体图片的的大小
plt.plot(x,data1, label='曲线1')
plt.plot(x,data2, linestyle='-.', label='曲线2')


plt.legend(loc='upper right', prop = myfont)  # 图例设置为刚才预设的字体类型
# 坐标轴标题设置为刚才预设的字体类型
plt.xlabel("迭代次数", fontproperties=myfont)  
plt.ylabel("损失值", fontproperties=myfont)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值