簡體   English   中英

將matplotlib顏色條更改為自定義高度

[英]Change matplotlib colorbar to custom height

我想將繪圖的顏色欄設置為自定義高度,而不必與繪圖的大小匹配。 實際上,我希望顏色條的高度加上其頂部的標題與圖形的高度匹配。

ax3 = divider.append_axes('right', size='10%', pad=0.3)
cb = plt.colorbar(Q, cax=ax3, ticks=[0.0, 3.0, 6.0, 9.0, 12.0, 15.0], format='%.1f')

我設法獲得了一個與繪圖高度相同的顏色條,該顏色條已經被問過很多次了,現在我想縮小它。

繼我決定明確給出了彩條自身的軸與其它問題提供建議add_axes ,獲得最后的情節的位置后,用軸get_position 這就是我想要做的。 在此示例中,沒有數據,沒有顏色條,只是為了表明我沒有得到預期的結果:

   from __future__ import unicode_literals
   import numpy as np
   from scipy.interpolate import griddata
   import matplotlib
   import matplotlib.pyplot as plt
   from matplotlib.patches import Circle
   from matplotlib.pylab import cm
   import matplotlib.colors as colors
   from mpl_toolkits.axes_grid1 import make_axes_locatable, axes_size

   matplotlib.rcParams.update({'font.size': 8})

   fig = plt.figure()
   fig.set_size_inches(6.3,6.3)

   ax1 = plt.subplot(111)
   divider = make_axes_locatable(ax1)
   ax2 = divider.append_axes('right', size='100%', pad=0.3)

   axes = [ax1, ax2]
   ltypes = ['dashed', 'solid']

   xi = np.linspace(-18.125, 18.125, 11)
   yi = np.linspace(0, 28, 9)
   xv, yv = np.meshgrid(xi, yi)

   xcOdd = 0.2
   zcOdd = 0.725
   xcEven = 0.6
   zcEven = 0.725

   maskRadius = 0.15

   for i in range(2):
       ax = axes[i]
       ax.set_xlabel('distance [m]')
       if i == 0:
           ax.set_ylabel('depth [m]')
       if i == 1:
           ax.set_yticklabels([])
       ax.invert_yaxis()
       ax.tick_params(direction='in')
       ax.set_aspect('equal')
       odd = Circle((xcOdd, zcOdd), .15, linewidth=1.2, color='k', fill=False)
       even = Circle((xcEven, zcEven), .15, linewidth=1.2, linestyle=ltypes[i], color='k', fill=False)

       vmax = 15.
       vmin =  0.
       norm = matplotlib.colors.Normalize(vmin,vmax, clip=False)

       color_map = matplotlib.colors.ListedColormap(plt.cm.Greys(np.linspace(0.25, 1, 5)), "name")

       ax.add_patch(odd)
       pad = 0.03
       width = 0.03

       pos = ax2.get_position()

       ax3 = fig.add_axes([pos.xmax + pad, pos.ymin, width, 0.7*(pos.ymax-pos.ymin) ])

       plt.savefig('prova-vect-paper-test-2.eps', format='eps')

為什么get_position返回錯誤的包圍盒?

您需要先繪制畫布,然后才能從.get_position()獲取實際位置。 這是因為由於長寬比相等,所以軸在繪制時會更改大小和位置。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from mpl_toolkits.axes_grid1 import make_axes_locatable

matplotlib.rcParams.update({'font.size': 8})

fig = plt.figure()
fig.set_size_inches(6.3,6.3)

ax1 = plt.subplot(111)
divider = make_axes_locatable(ax1)
ax2 = divider.append_axes('right', size='100%', pad=0.3)

axes = [ax1, ax2]


xi = np.linspace(-18.125, 18.125, 11)
yi = np.linspace(0, 28, 9)
xv, yv = np.meshgrid(xi, yi)


for i in range(2):
    ax = axes[i]
    ax.set_xlabel('distance [m]')
    if i == 0:
        ax.set_ylabel('depth [m]')
    if i == 1:
        ax.set_yticklabels([])
    ax.invert_yaxis()
    ax.tick_params(direction='in')
    ax.set_aspect('equal')
    vmax = 15.
    vmin =  0.
    norm = colors.Normalize(vmin,vmax, clip=False)

    color_map = colors.ListedColormap(plt.cm.Greys(np.linspace(0.25, 1, 5)), "name")

    im = ax.imshow(yv, cmap=color_map, norm=norm)

pad = 0.03
width = 0.03

fig.canvas.draw()
pos = ax2.get_position()

ax3 = fig.add_axes([pos.xmax + pad, pos.ymin, width, 0.7*(pos.ymax-pos.ymin) ])
fig.colorbar(im, cax=ax3)

plt.show()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM