gpt4 book ai didi

python - 如何在中心绘制子图并使颜色条与其中一个子图的长度相同?

转载 作者:行者123 更新时间:2023-12-05 04:22:04 25 4
gpt4 key购买 nike

我试图在 2 行中绘制示例问题的子图,如图 01 所示。子图的第一行是单列,应该居中。此外,在图 01 中,如何使颜色条与第二行的绘图大小相同? Figure of subplot .

我有两个问题:A) 如何将子图居中放置在第 1 行& B) 为什么最右边的地 block 比第二行的其他地 block 小?任何人都可以帮助解决这些问题吗?提前致谢。

为了制作这个情节,我使用了以下脚本:

fig, ax = plt.subplots(figsize=(8,4), dpi=100)
##*******==SUBPLOTTING= # creating grid for subplots*************************************************
degree = [0,30,45,60,90]
for deg_num in range(0,len(degree)):
............
............

ax1 = plt.subplot2grid(shape=(2, len(degree)), loc=(0, 0), colspan=3)
for i, label in enumerate(labels):
ax1.scatter(arr_x[i], arr_y[i],s=60, c='r', marker='o', cmap=None, norm=None)
text_object = ax1.annotate(label, xy=(arr_x[i], arr_y[i]), xytext=(1,-17), textcoords='offset points',ha='center')
for x,y in zip(arr_x, arr_y):
label = f"({x},{y})"
ax1.annotate(label, xy=(x,y), xytext=(8,5), textcoords='offset points',ha='center')
ax1.set_xlim(np.min(arr_x)-2,np.max(arr_x)+2)
ax1.set_ylim(np.min(arr_y)-2,np.max(arr_y)+2)
ax1.set_xlabel(" $X$-axis", fontsize=18)
ax1.set_ylabel("$Y$-axis", fontsize=18)
ax1.set_title(f'Sensor position in $X-Y$ coordinates', loc='left')
ax1.set_position([.32,0.54,0.4,0.4])
ax2 = plt.subplot2grid(shape=(2, len(degree)), loc=(1, deg_num), colspan=1)
##===============================================
c = ax2.imshow(spec, cmap='seismic', vmin=spec.min(), vmax=spec.max(),
extent=extent, interpolation='nearest', origin='lower') #

ax2.set_xlabel("Wavenumber, $K_x$ [rad/m]", fontsize=12)
ax2.set_ylabel("Wavenumber,$K_y$ [rad/m]", fontsize=12)
ax2.set_title(f'$\phi$={theta} deg. @{jj}Hz') # 'Channel %d' %i
plt.show()
cbar = fig.colorbar(c,fraction=0.046, pad=0.04)
cbar.set_label(f'Spatial Spectrum at {jj}Hz', rotation=90, fontsize=12, labelpad=1)# weight="bold")

编辑:通过设置位置 ax1.set_position([.32,0.54,0.4,0.4]) 第一行的图形居中,如 Fig. 02. 所示。图 02。仍然是第二行最右边的图片比其他子图小。有人能建议如何解决这个问题吗?

最佳答案

在这里,我找到了解决这个问题的方法。它不是泛化的,但它服务于目的。对于A题)设置ax1的位置为ax1.set_position([.32,0.54,0.4,0.4]),使网格子图第一行居中。

对于 Q. B)我使用了 add_axes,如 cax = fig.add_axes([ax2.get_position().x1+0.01,ax2.get_position().y0, 0.008,ax2.get_position().height]) 为颜色条创建新的轴。这里所有子图在第二行中的大小相等。然后该图看起来如图 ** fig 02 .完整代码如下:

fig, ax = plt.subplots(figsize=(12,8), dpi=100)
##**********************************************************************************
degree = [0,30,45,60,90]
for deg_num in range(0,len(degree)):
............
............
ax1 = plt.subplot2grid(shape=(2, len(degree)), loc=(0, 0), colspan=3)
for i, label in enumerate(labels):
ax1.scatter(arr_x[i], arr_y[i],s=60, c='r', marker='o', cmap=None, norm=None)
text_object = ax1.annotate(label, xy=(arr_x[i], arr_y[i]), xytext=(1,-17), textcoords='offset points',ha='center')
for x,y in zip(arr_x, arr_y):
label = f"({x},{y})"
ax1.annotate(label, xy=(x,y), xytext=(8,5), textcoords='offset points',ha='center')
ax1.set_xlim(np.min(arr_x)-2,np.max(arr_x)+2)
ax1.set_ylim(np.min(arr_y)-2,np.max(arr_y)+2)
ax1.set_xlabel(" $X$-axis", fontsize=18)
ax1.set_ylabel("$Y$-axis", fontsize=18)
ax1.set_title(f'Sensor position in $X-Y$ coordinates', loc='left')
ax1.set_position([.32,0.54,0.4,0.4])
##===============================================
ax2 = plt.subplot2grid(shape=(2, len(degree)), loc=(1, deg_num), colspan=1)
c = ax2.imshow(spec, cmap='seismic', vmin=spec.min(), vmax=spec.max(),
extent=extent, interpolation='nearest', origin='lower') #
ax2.set_xlabel("Wavenumber, $K_x$ [rad/m]", fontsize=12)
if deg_num < 1:
ax2.set_ylabel("Wavenumber,$K_y$ [rad/m]", fontsize=12)
ax2.set_xlabel("Wavenumber, $K_x$ [rad/m]", fontsize=12)
else:
ax2.set_xlabel("$K_x$ [rad/m]", fontsize=12)
ax2.set_title(f'$\phi$={theta} deg. @{jj}Hz')
x = kxx
y = kyy
ax2.plot(x, y, marker="o", markersize=5, markeredgecolor="yellow", markerfacecolor="yellow")
plt.show()

cax = fig.add_axes([ax2.get_position().x1+0.01,ax2.get_position().y0,0.008,ax2.get_position().height])
cbar=fig.colorbar(c, cax=cax)
cbar.set_label(f'Spatial Spectrum at {jj}Hz', rotation=90, fontsize=12, labelpad=1)

关于python - 如何在中心绘制子图并使颜色条与其中一个子图的长度相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74088096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com