График 2D данных с xarray (pcolorme sh), сохраняя соотношение сторон - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь построить 2D-набор данных, используя xarray (который использует matplotlib.pcolorme sh), сохраняя естественное соотношение сторон данных.

Пример:

import xarray as xr
import matplotlib.pyplot as plt

plt.close('all')
data = xr.DataArray(np.random.randn(2, 3), dims=('x', 'y'),coords={'x': [10, 20],'y' : [0,50,100]})
data.plot() # Will produce a square plot

Результат:

image

Добавление plt.gca().set_aspect('equal') действительно масштабирует график так, как я хочу, однако высота цветовой шкалы остается неизменной, давая

image

Использование параметров size, aspect или figsize также не помогает. Для приведенного выше примера:

data.plot(size=6, aspect=150 / 30. * 6)

(или с тем же результатом data.plot(figsize=(150 / 30. * 6,6)))

image

, что лучше, но все еще не работает (возможно, из-за Colorbar?).

1 Ответ

1 голос
/ 31 марта 2020

Аргументы size / aspect, а также figsize влияют на размер фигуры, а не на оси. Соотношение сторон осей несколько зависит от этих аргументов, но их трудно точно контролировать. Например, как вы заметили, цветная полоса также займет некоторое пространство, поэтому ширина для осей будет меньше.

Я бы порекомендовал следующее:

ax = data.plot(figsize=(18, 2))
# Alternatively
# ax = data.plot(size=2, aspect=9)
ax.axes.set_aspect('equal')

Вторая строка гарантирует, что оси имеют правильное соотношение сторон (как в вашей первой попытке). Если вы не укажете размер фигуры дополнительно, он будет определяться из параметров по умолчанию. Проблема в том, что размер фигуры по умолчанию не очень хорошо согласуется с фактическим соотношением сторон данных. Поэтому оси должны быть очень маленькими, чтобы соответствовать ширине по умолчанию.

Вы можете решить эту проблему, указав размер фигуры, который приблизительно соответствует вашему формату изображения (в вашем случае 7.5). Для меня это выглядит лучше, если вы выберете соотношение сторон рисунка немного больше, чем соотношение сторон данных, чтобы дать цветовой шкале некоторое пространство.

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