gpt4 book ai didi

python - 在子图之间绘制分隔符或线条

转载 作者:太空狗 更新时间:2023-10-30 01:01:26 26 4
gpt4 key购买 nike

我在一个图中绘制了四个子图,它们彼此共享 xaxis。

但是,这些子图之间没有分隔符。我想在他们每个人之间画一条线。或者在这些子图中是否可以采用任何分隔符?

至少子图的轴之间应该有分隔符。我认为应该如下图所示。

\------------------------------------

  subplot1

\------------------------------------

  subplot2

\------------------------------------

  ...

\------------------------------------

最佳答案

如果轴/子图有像 x 标签或刻度标签这样的装饰器,就不能直接找到应该分隔子图的线条的正确位置,这样它们就不会与文本重叠。

对此的一种解决方案是获取包括装饰器在内的轴的范围,并取上部范围底部和下部范围顶部之间的平均值。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtrans

fig, axes = plt.subplots(3,2, squeeze=False)

for i, ax in enumerate(axes.flat):
ax.plot([1,2])
ax.set_title('Title ' + str(i+1))
ax.set_xlabel('xaxis')
ax.set_ylabel('yaxis')

# rearange the axes for no overlap
fig.tight_layout()

# Get the bounding boxes of the axes including text decorations
r = fig.canvas.get_renderer()
get_bbox = lambda ax: ax.get_tightbbox(r).transformed(fig.transFigure.inverted())
bboxes = np.array(list(map(get_bbox, axes.flat)), mtrans.Bbox).reshape(axes.shape)

#Get the minimum and maximum extent, get the coordinate half-way between those
ymax = np.array(list(map(lambda b: b.y1, bboxes.flat))).reshape(axes.shape).max(axis=1)
ymin = np.array(list(map(lambda b: b.y0, bboxes.flat))).reshape(axes.shape).min(axis=1)
ys = np.c_[ymax[1:], ymin[:-1]].mean(axis=1)

# Draw a horizontal lines at those coordinates
for y in ys:
line = plt.Line2D([0,1],[y,y], transform=fig.transFigure, color="black")
fig.add_artist(line)


plt.show()

enter image description here

关于python - 在子图之间绘制分隔符或线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com