2

我想在 matplotlib 中plot()制作的颜色图中添加一条线imshow(),其中假设了几个不同大小的子图。添加线条时,颜色图会以某种方式改变大小。我该如何解决这个问题?

这是一个说明问题的简单示例:

import scipy.stats       as stat
import matplotlib.pyplot as plt
import matplotlib.cm     as cm
import numpy             as np

fig = plt.figure(figsize=(12, 4))
plt.axes([.05,.1,.4,.8])
data = stat.uniform.rvs(size=2400).reshape((40,60))
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.plot(range(60),20*np.ones(60),'w-',lw=3)  #  <-- causing problems
plt.title('the damn white line')
4

2 回答 2

1

plt.autoscale(False)您可以在第一次绘图之后使用命令来避免这种情况。

此外,在我看来,使用plt.axhline而不是plt.plot制作水平线将是一个更好的解决方案,因为它axhline跨越了轴的整个水平范围,即使您在绘图中平移/缩放。

换句话说,您的示例可以这样重写:

import scipy.stats       as stat
import matplotlib.pyplot as plt
import matplotlib.cm     as cm
import numpy             as np

data = stat.uniform.rvs(size=2400).reshape((40,60))

plt.figure(figsize=(12, 4))
plt.axes([.05,.1,.4,.8])
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.autoscale(False)
plt.axhline(y=20, c='w', lw=3)
plt.title('the damn white line')

在此处输入图像描述

于 2013-05-10T14:27:50.083 回答
0

这是一个非常简单的替代解决方案:更改 imshow() 和 plot() 的顺序

import scipy.stats       as stat
import matplotlib.pyplot as plt
import matplotlib.cm     as cm
import numpy             as np

fig = plt.figure(figsize=(12, 4))
plt.axes([.05,.1,.4,.8])
data = stat.uniform.rvs(size=2400).reshape((40,60))
plt.plot(range(60),20*np.ones(60),'w-',lw=3)  #  <--- mow before imshow()
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.title('the damn white line')

输出与 nordev 的答案相同。

于 2013-05-13T02:56:53.933 回答