我尝试了以下方法:
d = [1,2,3,4,5,6,7,8,9]
f = [0,1,0,0,1,0,1,1,0]
fig = plt.figure()
fig.set_size_inches(30,10)
ax1 = fig.add_subplot(211)
line1 = ax1.plot(d,marker='.',color='b',label="1 row")
ax2 = fig.add_subplot(212)
line1 = ax2.plot(f,marker='.',color='b',label="1 row")
ax1.grid()
ax2.grid()
plt.show()
我得到以下输出:
但我期待以下输出:
我怎样才能得到两个地块的网格?
4条答案
按热度按时间siotufzp1#
没有用于创建子地块间网格的内置选项。在这种情况下,我会说一个简单的选择是在背景中创建第三个轴,在x方向上使用相同的网格,这样可以在两个子图之间看到网格线。
vi4fp9gy2#
以下是我的解决方案:
无帧
subplot_kw=dict(frameon=False)
:k3fezbri3#
一个选项是创建单个图,然后仅偏移数据。所以一个比另一个更重要。
6yt4nkrj4#
解决方案
通过使用
ax1.grid(ydata=[-space_between_axes, 1], clip_on=False)
将适当的坐标传递到Line2D,可以延伸轴网线。如何操作?
matplotlib.axis.Axis.grid == ax1.xaxis.grid
方法的文档,关键字参数可以传递给Line2D
。Line2D
将x和y坐标(xdata
和ydata
)作为参数。ax1.get_xgridlines()[-1].get_xydata()
来检查。输出为array([[9., 0.], [9., 1.]])
。显然,x值在Data坐标中,y值在Axes坐标中。-1
,因为与相同的线的重叠是不可见的。然而,正确的方法是获得实际距离,在本例中为space_between_plots = plt.rcParams["figure.subplot.hspace"]
。也就是0.2
,这意味着一个图的高度的五分之一。1
。clip_on=True
是必需的,因为Matplotlib在默认情况下不会在绘图区域之外绘制任何东西。注意事项
看起来Matplotlib有一个bug,使得这个解决方案在某些情况下无法工作。例如,如果我遗漏了
plt.setp(...)
,Maptlotlib会抱怨它多次收到ydata
参数并引发TypeError。