强制色图为方形

时间:2016-06-01 17:00:12

标签: python matplotlib colormap

我正在使用matplotlib库处理Python,我遇到了彩色地图维度的问题。

我有一些目标变量target取决于两个变量xy - 即我的数据target是变量x的矩阵行和y列。我想在targetx的颜色地图中代表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')

2 个答案:

答案 0 :(得分:2)

你的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。您可能还有其他感兴趣的解决方案。

答案 1 :(得分:1)

Andreas的答案适用于我的电脑。您可能会看到与您的代码略有不同的结果,因为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()