contour画等值线图时候的一些设置

最近画图比较多,涉及到一些小tricks,包括

  • 设置子图间距
  • 设置等值线
  • 保存图片时紧凑
  • 句柄设置横纵坐标和刻度
  • 显示中文

以下面的一个代码示例来贯通这些技巧:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

###使得中文字体不乱码
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
#matplotlib.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus']=False

#构建一行两列的多子图, 设置子图之间的距离
fig1, axes = plt.subplots(1,2,figsize = (16,7))
fig1.tight_layout(pad = 2.7) #pad参数设置子图之间的间隔 

#构建数据
x = np.arange(-5,6)
y = np.arange(-5,6)
xx ,yy = np.meshgrid(x,y)

#已知 z1范围为[0,50],为同心圆;z2范围为[-25,50]
z1 = xx**2 + yy**2
z2 = xx**2 - yy**2

#设置画出数值 = x 的等值线,
#给出x, 从-50~50,每隔2画一条等值线
#levels_label为每隔1条等值线,标出该等值线数值
levels = np.arange(-50, 50,2)
levels_label = list(levels[::2])   #必须为列表list

#该color也可以为 和levels 维度一样的数组,表示每条等值线对应一个颜色
#这样就可以设置等值线
color = 'k'  

x_ticks = np.arange(0,11)
y_ticks = np.arange(0,11)

x_tickslabel = np.arange(-5,6)
y_tickslabel = np.arange(-5,6)

fontsize = 20

xfontdict = {'fontsize' : fontsize}
yfontdict = {'fontsize' : fontsize}

for ax,z in zip(list(axes),[z1,z2]): 
    
    h = ax.contour(z, 
               levels = levels,  
               colors = color,
               )
    
    #如果不设置levels_label,则默认每条等值线都有标签
    if levels_label == None:
        
        ax.clabel(h,
                  inline = True,  #标签位置,在线内
                  fontsize = 16,  #标签字体大小
                  colors = color, #标签颜色 
                  fmt = '%1.0f')
        
    else:
        
        ax.clabel(h,
                  levels_label, 
                  inline = True,  #
                  fontsize = 16, 
                  colors = color,  
                  fmt = '%1.0f')
    
    
    ##设置x,y轴的ticks 和 tickslabel 
    ax.set_xticks(x_ticks)
    ax.set_xticklabels(x_tickslabel,fontdict = xfontdict) 
    ax.set_yticks(y_ticks)
    ax.set_yticklabels(y_tickslabel,fontdict = yfontdict)
        
    ax.set_xlabel(r'经距/(°)',fontsize = fontsize)

axes[0].set_ylabel(r'纬距/(°)',fontsize = fontsize)


fig1.savefig('D:/contour.jpg',
             dpi = 100,              #分辨率
             bbox_inches = 'tight', #图型紧凑,不留空白
             )

在这里插入图片描述

#此时我们换一个levels, -50~-20,每隔4画一条等值线 ~~~~
#lables间距2
levels = list(np.arange(-50,-20,4)) + list(np.arange(-20,20,3)) +list(np.arange(20,50,4))
levels_label = list(levels[::2])   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值