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])   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章