我正在使用matplotlib
库处理Python,我遇到了彩色地图维度的问题。
我有一些目标变量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')
答案 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()
这为您提供了方形图形的矩形像素。
您应该用数据替换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()