如何在子图之间绘制分隔线或线条(当子图具有标题,轴标签等时)

时间:2019-04-01 16:14:51

标签: python matplotlib

我想在子图之间画一条线或某种分隔符。

我很了解question,但是我无法从那里得到解决方案,如下所述。

我(某种程度上)理解了这些transformations,但是我要澄清的其他基本问题是:有没有一种方法可以将每个子图的“真实”左下角标识为或者,一旦开始添加标题,标签等,这些项目是否可以使坐标系变得混乱,例如,轴标签可能以y坐标<0结尾? / p>

使用每个轴的plot()方法并使用transform = axis.transAxes绘制一条线,这样(0,0)是左下角,而(1,1)是右上方画一条线,但是:

  • 将其从(0,0)绘制为(1,0)将其绘制在轴的底部;我需要在下方,x_axis标签下方等
  • 确定绘制坐标的确切位置,精确定位在下面的位置很麻烦,因为这取决于图中存在的元素:标题, 标签等。
  • 该线末端位于其他元素的下方 图,输出非常混乱

在该链接处给出的第二个解决方案使用blended_transform_factory,但是,老实说,我无法使语法起作用。

一个玩具的例子是:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns

sns.set(style='darkgrid')

n = int(100)
x = np.arange(0,n)
fig, ax = plt.subplots(3,2)

for i,a in enumerate(ax.flatten() ):
    y = np.random.rand(n)
    sns.lineplot(x, y, ax=a)
    a.set_title('Chart # ' + str(i+1))
    a.set_xlabel('my x')
    a.set_ylabel('my y')

    # this is the first solution; messy output, line behind other elements of the figure
    a.plot([-1, 1.5], [-0.2, -0.2], color='black', lw=0.5, transform=a.transAxes, clip_on=False)

第二种解决方法是将最后一行替换为下面的行(始终在for循环中):

trans = matplotlib.transforms.blended_transform_factory(fig.transFigure, a.transAxes)
line = matplotlib.lines.Line2D([0, 1], [0,0], color='w', transform=trans)
fig.lines.append(line)

我一定做错了,因为尽管第一个解决方案至少可以画点东西,但是一点也没画-但是没有错误。

有什么想法吗?谢谢!

0 个答案:

没有答案