首页 文章

将文本放在matplotlib图的左上角

提问于
浏览
76

如何将文本放在matplotlib图的左上角(或右上角),例如左上角的传说是什么,或者在情节的顶部,但在左上角?例如 . 如果它是一个plt.scatter(),则会出现在散布的正方形内,放在最左上角 .

我想在没有理想地知道绘制的散点图的比例的情况下这样做,因为它将从数据集更改为数据集 . 我只是希望文本大致位于左上角,或大致位于右上角 . 对于图例类型定位,它不应与任何散点图点重叠 .

谢谢!

2 回答

  • 116

    你可以使用text .

    text(x, y, s, fontsize=12)
    

    text 坐标可以相对于轴给出,因此文本的位置将独立于图的大小:

    默认转换指定文本在数据坐标中,或者,您可以在轴坐标中指定文本(0,0是左下角,1,1是右上角) . 下面的例子将文本放在轴的中心::

    text(0.5, 0.5,'matplotlib',
         horizontalalignment='center',
         verticalalignment='center',
         transform = ax.transAxes)
    

    防止文本干扰散射的任何一点是更困难的事情 . 更简单的方法是将y_axis( ylim((ymin,ymax)) 中的ymax)设置为略高于点的最大y坐标的值 . 通过这种方式,您将始终拥有文本的可用空间 .

    编辑:这里有一个例子:

    In [17]: from pylab import figure, text, scatter, show
    In [18]: f = figure()
    In [19]: ax = f.add_subplot(111)
    In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
    Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
    In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
    Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
    In [22]:
    

    enter image description here

    ha和va参数设置文本相对于插入点的对齐方式 . 即 . ha ='left'是一个很好的设置,可以在手动缩小(缩小)帧时防止长文本离开左轴 .

  • 6

    一种解决方案是使用 plt.legend 函数,即使您不想要实际的图例 . 您可以使用 loc keyterm指定图例框的位置 . 更多信息可以在at this website找到,但我还提供了一个展示如何放置图例的示例:

    ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
    ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
    ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
    ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
    line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
    line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
    line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
    line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
    plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2)
    

    请注意,因为 loc=2 ,图例位于图的左上角 . 如果文本与绘图重叠,则可以使用 legend.fontsize 将其缩小,然后使图例变小 .

相关问题