【问题标题】:How can I position the colorbar better?如何更好地定位颜色条?
【发布时间】:2020-05-10 21:38:42
【问题描述】:

我正在尝试对齐两个图的右边缘并将颜色条挂在右侧。这就是我所拥有的:

import numpy as np
import matplotlib.pyplot as plt


def F(x, y):
    u = x
    v = y
    return u, v

fig = plt.figure(figsize=(8, 8), tight_layout=True)
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)

x, y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
u, v = F(x, y)
vres = np.sqrt(u ** 2 + v ** 2)
vector_field = ax1.quiver(x, y, u, v, vres)

fig.colorbar(vector_field, ax=ax1)

plt.show()

这就是我得到的:

我已经阅读了 colorbar 文档,但找不到我想要的,有人可以帮忙吗?

提前致谢!

【问题讨论】:

  • This docs page 似乎很有趣。
  • 我也看到过,但没有找到我想要的。不过非常接近!

标签: python matplotlib colorbar


【解决方案1】:

更新的解决方案:

您实际上可以在第二个子图中添加另一个颜色条并使其不可见,就像这样。 fig.colorbar(vector_field, ax=ax2).ax.set_visible(False)

完整代码:

import numpy as np
import matplotlib.pyplot as plt
def F(x, y):
    u = x
    v = y
    return u, v
fig = plt.figure(figsize=(8, 8), tight_layout=True)
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
x, y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
u, v = F(x, y)
vres = np.sqrt(u ** 2 + v ** 2)
vector_field = ax1.quiver(x, y, u, v, vres)
fig.colorbar(vector_field, ax=ax1)
fig.colorbar(vector_field, ax=ax2).ax.set_visible(False)
plt.show()

结果不同的旧解决方案:

我并没有预期它会起作用,但这是您需要的吗?

colorbar 中的 ax 实际上可以获取一个轴列表,而不仅仅是一个:fig.colorbar(vector_field, ax=[ax1, ax2])。不过,您还必须删除tight_layout...tight_layout=False

import numpy as np
import matplotlib.pyplot as plt
def F(x, y):
    u = x
    v = y
    return u, v
fig = plt.figure(figsize=(8, 8), tight_layout=False)
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
x, y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
u, v = F(x, y)
vres = np.sqrt(u ** 2 + v ** 2)
vector_field = ax1.quiver(x, y, u, v, vres)
fig.colorbar(vector_field, ax=[ax1, ax2])
plt.show()

【讨论】:

  • 我刚刚更新了解决方案,是你想要的吗?
  • 嗯,我有点希望颜色条与第一个图对齐。 stackoverflow.com/questions/13310594/positioning-the-colorbar 这个类似问题的答案之一表明:cbaxes = fig.add_axes([0.8, 0.1, 0.03, 0.8]) cb = plt.colorbar(ax1, cax = cbaxes) 但我无法让它工作
  • 我一分钟前就有了这个想法,正要搜索是否可以设置一些不可见的东西,哈哈,结果太棒了!非常感谢!!
  • 如果你好奇的话,这就是我正在做的事情:link
猜你喜欢
  • 2012-10-29
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2020-04-12
  • 2013-08-15
  • 2016-12-12
相关资源
最近更新 更多