2016-06-01 3 views
0

Я работаю над Python с библиотекой matplotlib, и у меня есть проблема с измерением цветовых карт.Принудительная цветовая схема

У меня есть цель переменной target, которая зависит от двух переменных x и y - то есть мои данные target матрица с переменной x, являющихся строками и столбцами y. Я хочу представить target в цветовой карте относительно x и y. Проблема в том, что у меня больше значений для x, чем для y, поэтому, если я рисую карту цветов, я получаю прямоугольник - довольно уродливый, потому что у меня есть много других значений для x, чем для y.

Я предпочел бы иметь прямоугольные «пиксели» в цветовой карте и квадратную карту, а не квадратные «пиксели», а прямоугольную цветовую карту - или, по крайней мере, я бы хотел сравнить две визуализации.

Мой вопрос: как я могу заставить цветовую карту быть квадратной?

Это мой текущий код - переменная cmap просто позволяет мне определить мой собственный масштаб цвета:

import matplotlib.pyplot as plt 
import matplotlib.pyplot as clr 

target = ... 

cmap = clr.LinearSegmentedColormap.from_list('custom blue', 
              ['#DCE6F1','#244162'], 
              N=128) 
plt.matshow(target, cmap=cmap) 
plt.colorbar(cmap='custom blue') 

ответ

1

Ответ Андреаса работает на моем компьютере. Вы можете увидеть немного другой результат, который с вашим кодом, потому что imshow() будет по умолчанию интерполировать изображение, поэтому изображение будет отличаться по сравнению с matshow(). Но параметр aspect работает на обоих. Поэтому либо подайте его на matshow(), либо отключите интерполяцию в imshow():

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.matshow(np.random.rand(32, 64), cmap='rainbow', aspect=2) 
plt.show() 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.imshow(np.random.rand(32, 64), cmap='rainbow', aspect=2, interpolation="None") 
plt.show() 
1

Что ваша версия matplotlib? Если это новее, чем 1.1.0, то вы можете попробовать это:

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.imshow(np.random.rand(32, 64), cmap='rainbow', aspect=2) 
plt.show() 

enter image description here

Это дает прямоугольные пиксели с квадратной формой фигуры. Ваши данные можно заменить np.random.rand(32, 64) и определить подходящее соотношение сторон. Также, пожалуйста, обратитесь к этому post. Есть другие решения, которые могут вас заинтересовать.

Смежные вопросы