В Python, как правильно использовать `colorbar` и` pcolormesh`? - PullRequest
0 голосов
/ 03 июля 2019

Вот мой код,

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
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()

, и он производит изображение

enter image description here

Однако, что яожидается, что он выдает картинку ниже

enter image description here

Может кто-нибудь помочь мне с этой проблемой?Заранее благодарим за любые полезные предложения!

Ответы [ 2 ]

1 голос
/ 03 июля 2019

tight_layout не помогает с этой проблемой, к сожалению.Нет tight_layout и нет axes_grid отлично работает:

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()

sharedcbar

Если вы хотите увеличить интервал, вы можете попробовать constrained_layout:

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

Constrained_layout

Ограниченная компоновка также будет работать только для одной оси:

fig.colorbar(mesh_2, ax=ax_2)

Oneaxes

0 голосов
/ 04 июля 2019

С помощью @JodyKlymak я наконец-то решил проблему. Ключевой момент заключается в использовании shrink, т.е. fig.colorbar(mesh_2, ax=[ax_1, ax_2, ax_error], shrink=0.3). Вот решение

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], shrink=0.3)
plt.show()

и он производит

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...