首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中,如何正确使用`colorbar`和`pcolormesh`?

在python中,如何正确使用`colorbar`和`pcolormesh`?
EN

Stack Overflow用户
提问于 2019-07-03 17:10:15
回答 2查看 103关注 0票数 0

这是我的代码,

代码语言:javascript
运行
复制
from mpl_toolkits.axes_grid1 import make_axes_locatable # colorbar
from matplotlib import pyplot as plt
from matplotlib import cm # 3D surface color
import numpy as np
代码语言:javascript
运行
复制
data1 = np.random.rand(10, 12)
data2 = np.random.rand(10, 12)
data3 = data1 - data2

vmin = min([data1.min(), data2.min(), data3.min()])
vmax = max([data1.max(), data2.max(), data2.max()])
fig, (ax_1, ax_2, ax_error) = plt.subplots(nrows=3, ncols=1, figsize=(6, 6))

ax_1.set_ylabel('x')
mesh_1 = ax_1.pcolormesh(data1.T, cmap = cm.coolwarm)

ax_2.set_ylabel('x')
mesh_2 = ax_2.pcolormesh(data2.T, cmap = cm.coolwarm)

mesh_error = ax_error.pcolormesh(data3.T, cmap = cm.coolwarm)
ax_error.set_ylabel('x')
ax_error.set_xlabel('t')

divider = make_axes_locatable(ax_2)
cax_val = divider.append_axes("right", size="2%", pad=.1)

fig.colorbar(mesh_2, ax=[ax_1, ax_2, ax_error], cax=cax_val)
fig.tight_layout()

plt.show()

它会产生一个图像

然而,我期望的是它会生成下面的图片

有人能帮我解决这个问题吗?提前感谢任何有用的建议!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-04 09:05:36

在@JodyKlymak的帮助下,我终于解决了这个问题。关键在于使用shrink,即fig.colorbar(mesh_2, ax=[ax_1, ax_2, ax_error], shrink=0.3)。以下是解决方案

代码语言:javascript
运行
复制
from matplotlib import pyplot as plt
from matplotlib import cm # 3D surface color
import numpy as np
代码语言:javascript
运行
复制
data1 = np.random.rand(10, 12)
data2 = np.random.rand(10, 12)
data3 = data1 - data2

fig, (ax_1, ax_2, ax_error) = plt.subplots(nrows=3, ncols=1, figsize=(6, 6))

mesh_1 = ax_1.pcolormesh(data1.T, cmap = cm.coolwarm)
mesh_2 = ax_2.pcolormesh(data2.T, cmap = cm.coolwarm)
mesh_error = ax_error.pcolormesh(data3.T, cmap = cm.coolwarm)

fig.colorbar(mesh_2, ax=[ax_1, ax_2, ax_error], shrink=0.3)
plt.show()

它会产生

票数 0
EN

Stack Overflow用户

发布于 2019-07-03 23:11:01

不幸的是,tight_layout对这个问题无能为力。不使用tight_layout和不使用axes_grid都可以:

代码语言:javascript
运行
复制
from matplotlib import pyplot as plt
from matplotlib import cm # 3D surface color
import numpy as np

data1 = np.random.rand(10, 12)
data2 = np.random.rand(10, 12)
data3 = data1 - data2

fig, (ax_1, ax_2, ax_error) = plt.subplots(nrows=3, ncols=1, figsize=(6, 6))

mesh_1 = ax_1.pcolormesh(data1.T, cmap = cm.coolwarm)
mesh_2 = ax_2.pcolormesh(data2.T, cmap = cm.coolwarm)
mesh_error = ax_error.pcolormesh(data3.T, cmap = cm.coolwarm)

fig.colorbar(mesh_2, ax=[ax_1, ax_2, ax_error])
plt.show()

如果你想要更好的间距,你可以试试constrained_layout

代码语言:javascript
运行
复制
fig, (ax_1, ax_2, ax_error) = plt.subplots(nrows=3, ncols=1, figsize=(6, 6), 
                                           constrained_layout=True)

受约束的布局也只适用于一个轴:

代码语言:javascript
运行
复制
fig.colorbar(mesh_2, ax=ax_2)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56866654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档