Dav*_*idG 18 python matplotlib
我试图matplotlib.imshow在同一图中绘制图像(使用)和散点图.尝试此操作时,图像显示小于散点图.小示例代码如下所示:
import matplotlib.pyplot as plt
import numpy as np
image = np.random.randint(100,200,(200,200))
x = np.arange(0,10,0.1)
y = np.sin(x)
fig, (ax1, ax2) = plt.subplots(1,2)
ax1.imshow(image)
ax2.scatter(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给出了下图:
我怎样才能让这两个sublpots具有相同的高度?(和我想的宽度)
fig=plt.figure()
gs=GridSpec(1,2)
ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1])
ax1.imshow(image)
ax2.scatter(x,y)
Run Code Online (Sandbox Code Playgroud)
但是这给出了相同的结果.我还尝试使用以下方法手动调整子图大小:
fig = plt.figure()
ax1 = plt.axes([0.05,0.05,0.45,0.9])
ax2 = plt.axes([0.55,0.19,0.45,0.62])
ax1.imshow(image)
ax2.scatter(x,y)
Run Code Online (Sandbox Code Playgroud)
通过反复试验,我可以将两个子图得到正确的大小,但是整体图形大小的任何变化都意味着子图将不再是相同的大小.
有没有办法制作imshow并且scatter图形在图中看起来大小相同而无需手动更改轴尺寸?
我使用的是Python 2.7和matplotlib 2.0.0
Imp*_*est 22
目前还不完全清楚你期望的结果是什么.
您可以在图像上使用自动方面
ax.imshow(z, aspect="auto")
Run Code Online (Sandbox Code Playgroud)
或者您可以根据其轴限制设置线图的方面,使其与图像具有相同的大小(如果图像具有相等的x和y尺寸)
asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
ax2.set_aspect(asp)
Run Code Online (Sandbox Code Playgroud)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,20)
y = np.sin(x)
z = np.random.rand(100,100)
fig, (ax, ax2) = plt.subplots(ncols=2)
ax.imshow(z)
ax2.plot(x,y, marker=".")
asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
ax2.set_aspect(asp)
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果图像没有相同的限制(不是正方形),则仍然需要除以图像的方面:
asp = np.diff(ax2.get_xlim())[0] / np.diff(ax2.get_ylim())[0]
asp /= np.abs(np.diff(ax1.get_xlim())[0] / np.diff(ax1.get_ylim())[0])
ax2.set_aspect(asp)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
15804 次 |
| 最近记录: |