【发布时间】:2018-06-23 15:51:50
【问题描述】:
我正在尝试使用 imshow() 在 matplotlib 中绘制一个二维数组,并在第二个 y 轴上用散点图覆盖它。
oneDim = np.array([0.5,1,2.5,3.7])
twoDim = np.random.rand(8,4)
plt.figure()
ax1 = plt.gca()
ax1.imshow(twoDim, cmap='Purples', interpolation='nearest')
ax1.set_xticks(np.arange(0,twoDim.shape[1],1))
ax1.set_yticks(np.arange(0,twoDim.shape[0],1))
ax1.set_yticklabels(np.arange(0,twoDim.shape[0],1))
ax1.grid()
#This is the line that causes problems
ax2 = ax1.twinx()
#That's not really part of the problem (it seems)
oneDimX = oneDim.shape[0]
oneDimY = 4
ax2.plot(np.arange(0,oneDimX,1),oneDim)
ax2.set_yticks(np.arange(0,oneDimY+1,1))
ax2.set_yticklabels(np.arange(0,oneDimY+1,1))
如果我只将所有内容运行到最后一行,我的数组就会完全可视化:
但是,如果我添加第二个 y 轴 (ax2=ax1.twinx()) 作为散点图的准备,它会变为这种不完整的渲染:
有什么问题?我在上面的代码中留下了几行描述散点图的添加,尽管它似乎不是问题的一部分。
【问题讨论】:
-
在 Python 2.7、matplotlib 2.1.1 上转载。这很可能是一个错误
-
这里有一个类似的系统:Python 2.7.12,Matplotlib 2.1.1。 @DavidG 如果这被证明是一个错误,是否有任何解决方法可以用两个 y 轴实现这个覆盖?
-
在这个问题上有一个discussion on github。显然它与
imshow强制ax1的纵横比有关。如果你设置ax1.set_aspect('auto')整个图像,绘图将正确显示,但图像会严重失真。
标签: matplotlib imshow yaxis