Seaborn 和 Matplotlib 添加相对于轴的文本

Wil*_*ill 6 python text matplotlib seaborn

尝试使用 seaborn 和 matplotlib 绘制一些数据,需要在我的绘图中添加一些描述性文本,通常我只使用 matplotlib 命令文本,并将其放置在相对于轴的位置,但它似乎没有根本没有工作,除了轴、刻度等上的默认内容之外,我没有显示任何文本。我想要的是在绘图区域的左上角显示一些自定义文本。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
Run Code Online (Sandbox Code Playgroud)

df 是我的 Pandas 数据框,它只包含一些时间列和带有作为标识符的标记“p”的坐标数据。

ax2 = sns.scatterplot("t","x", data = df, hue = "p")
ax2.text(0.1, 0.9, r"$s = {}, F = {}, N = {}$".format(value1, valu2, value3))

plt.show()
Run Code Online (Sandbox Code Playgroud)

任何人都知道我如何让一些文本显示,相对定位,“值”项只是我想要打印的数据的变量。谢谢。

Imp*_*est 7

您想在“绘图区域的左上角”放置一个文本。“绘图区域”称为轴。想到了三个解决方案:

坐标区中的文本

您可以在轴坐标中指定文本。这些范围从(0,0)坐标区的(1,1)左下角到坐标区的右上角。通过 获得相应的变换ax.transAxes

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

ax.text(0.02, 0.98, "Text", ha="left", va="top", transform=ax.transAxes)

plt.show()
Run Code Online (Sandbox Code Playgroud)

带有偏移量的注释

在上面的文本和左上角之间的距离将取决于轴的大小。因此,将文本准确定位在左上角(即(0,1)在轴坐标中)然后将其偏移一些点(即以绝对单位)可能是有益的。

ax.annotate("Text", xy=(0,1), xycoords="axes fraction",
                    xytext=(5,-5), textcoords="offset points",
                    ha="left", va="top")
Run Code Online (Sandbox Code Playgroud)

这里的结果与上面的类似,但与轴或图形大小无关;文本将始终与左上角相距 5 pts。

锚定位置的文本

最后,您可能根本不想指定任何坐标。毕竟"upper left"作为定位信息应该足够了。这将通过AnchoredText以下方式实现。

import matplotlib.pyplot as plt
from matplotlib.offsetbox import AnchoredText

fig, ax = plt.subplots()

anc = AnchoredText("Text", loc="upper left", frameon=False)
ax.add_artist(anc)

plt.show()
Run Code Online (Sandbox Code Playgroud)