python - 在不操作子图的情况下使用 axes_grid1
问题描述
我想在我的一个子图旁边使用axes_grid1
. 问题是,调用make_axes_locatable
操纵我的子图,使其不再具有与其他图相同的大小。
这是我的问题的最小工作示例。
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(15,5))
_ax = ax[0,:].flatten('C')
values_x = np.linspace(0, 2 * np.pi, 100)
values_y = np.sin(values_x)
vmax = np.amax(values_x)
vmin = np.amin(values_x)
s = 1
ticks_rotation = 10
ticks_num = 5
_ax = ax[0,:].flatten('C')
plot_w = _ax[0].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
plot_v = _ax[1].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
_ax = ax[1,:].flatten('C')
plot_w = _ax[0].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
plot_v = _ax[1].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
divider = make_axes_locatable(_ax[1])
cax = divider.append_axes('right', size='5%', pad=0.05)
v_delta = (vmax - vmin)*0.1
ticks = np.linspace(vmin+v_delta,vmax-v_delta,ticks_num)
cbar = fig.colorbar(plot_v, cax=cax, orientation='vertical', ticks=ticks)
cbar.ax.set_yticklabels(np.around(ticks,decimals=1), rotation=ticks_rotation,rotation_mode='default')
plt.show()
我想要的实际上是所有大小相同的子图,旁边有漂亮的颜色。有什么建议么?
编辑:我真的只想在右下角的子图之外有颜色条,而不是这样。
解决方案
如果你不喜欢 using axes_grid1
,我个人更喜欢使用GridSpec来完成这类工作。
gridspec是一个模块,它指定图中子图的位置。
指定将放置子图的网格的几何形状。需要设置网格的行数和列数。可选地,可以调整子图布局参数(例如,左、右等)。
import matplotlib.gridspec as gs
gs0 = gs.GridSpec(2, 3, width_ratios=[20,20,1])
fig = plt.figure(figsize=(10,4))
ax1 = fig.add_subplot(gs0[0,0])
ax2 = fig.add_subplot(gs0[0,1])
ax3 = fig.add_subplot(gs0[1,0])
ax4 = fig.add_subplot(gs0[1,1])
cax = fig.add_subplot(gs0[:,2])
values_x = np.linspace(0, 2 * np.pi, 100)
values_y = np.sin(values_x)
for ax in [ax1,ax2,ax3,ax4]:
plot_w = ax.scatter(values_x, values_y, c=values_x, cmap='rainbow', s=1)
cbar = fig.colorbar(plot_w, cax=cax, orientation='vertical')
推荐阅读
- security - 如何在第三方白标平台上引入额外的角色/访问级别?
- android - Android Room获取子字符串不起作用
- python-docx - Python-docx 书签和目录
- java - 生成我自己的密钥来验证指纹android
- zsh - 搜索后总是返回到 ZSH 历史的开头?
- android - 使用 dl/ul Speed 监控或侦听网络流量并在 Android 应用程序内接收/发送 Pockets
- python - Python Keras 定义了使用 pandas DataFrame 作为附加参数的自定义损失
- audio - 缺少标题 - AudioToolbox.h
- python - img = np.reshape(img,[1,224,224,3]) - ValueError:无法将大小为 200704 的数组重塑为形状 (1,224,224,3)
- swift - Firebase getIDToken 以及如何在 API 调用中使用它