2
我需要在兩個座標軸和右邊的一個顏色條上生成一個具有相同縱橫比的圖。我試過設置aspect='auto'
,aspect=1
和aspect='equal'
,但沒有好的結果。請參閱下面的示例和MWE。用顏色條設置等值線圖
使用aspect='auto'
的colorbars是正確的高度,但該地塊被扭曲:
使用aspect=1
或aspect='equal'
的曲線是正方形(在這兩個軸相等方面),但colorbars被扭曲:
在這兩個地塊colorbars太遠位於右側出於某種原因。如何獲得具有匹配高度的顏色條的方形圖?
MWE
import numpy as np
import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
def col_plot(params):
gs, i, data = params
xarr, yarr, zarr = zip(*data)[0], zip(*data)[1], zip(*data)[2]
xmin, xmax = min(xarr), max(xarr)
ymin, ymax = min(yarr), max(yarr)
#plt.subplot(gs[i], aspect='auto')
plt.subplot(gs[i], aspect=1)
#plt.subplot(gs[i], aspect='equal')
plt.xlim(xmin, xmax)
plt.ylim(xmin, xmax)
plt.xlabel('$x axis$', fontsize=20)
plt.ylabel('$y axis$', fontsize=20)
# Scatter plot.
cm = plt.cm.get_cmap('RdYlBu_r')
SC = plt.scatter(xarr, yarr, marker='o', c=zarr, s=60, lw=0.25, cmap=cm,
zorder=3)
# Colorbar.
ax0 = plt.subplot(gs[i + 1])
cbar = plt.colorbar(SC, cax=ax0)
cbar.set_label('$col bar$', fontsize=21, labelpad=-2)
# Generate data.
data0 = np.random.uniform(0., 1., size=(50, 3))
data1 = np.random.uniform(0., 1., size=(50, 3))
# Create the top-level container
fig = plt.figure(figsize=(14, 25))
gs = gridspec.GridSpec(4, 4, width_ratios=[1, 0.05, 1, 0.05])
# Generate plots.
par_lst = [[gs, 0, data0], [gs, 2, data1]]
for pl_params in par_lst:
col_plot(pl_params)
# Output png file.
fig.tight_layout()
plt.savefig('colorbar_aspect.png', dpi=300)
感謝朱利安!我不得不修改你的答案,但使用'make_axes_locatable'是一個很好的解決方案。 – Gabriel
不客氣:-) –