尝试使用seaborn和matplotlib绘制一些数据,需要在我的绘图中添加一些描述性文本,通常我只需要使用matplotlib命令文本,并将其放置在相对于坐标轴的位置即可,但是并没有。似乎根本无法工作,我没有显示超出轴,刻度等默认值的文本。我想要的是在绘图区域的左上角显示一些自定义文本。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df是我的熊猫数据框,它只包含一些时间列,并使用标签“ 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()
任何人都知道如何才能显示一些相对定位的文本,“值”项只是我要打印的数据的变量。谢谢。
答案 0 :(得分:1)
为了在不知道限制的情况下将文本放置在绘图的左上角,您可以查询轴的x和y限制,并使用该限制将文本相对于绘图的边界定位。考虑这个示例(我还包括了用于生成一些随机数据进行演示的代码)
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(1)
df = pd.DataFrame({'t':np.linspace(1,2,100),
'x':np.random.randn(100)})
value1 = 1
value2 = 2
value3 = 3
ax2 = sns.scatterplot("t","x", data = df)
tl = ((ax2.get_xlim()[1] - ax2.get_xlim()[0])*0.010 + ax2.get_xlim()[0],
(ax2.get_ylim()[1] - ax2.get_ylim()[0])*0.95 + ax2.get_ylim()[0])
ax2.text(tl[0], tl[1], r"$s = {}, F = {}, N = {}$".format(value1, value2, value3))
plt.show()
这将输出
并更改边界不会更改文本的位置,即
您可能需要根据所需文本的精确度来调整乘数0.01
和0.95
。
答案 1 :(得分:0)
您要在“绘图区域的左上角”放置一个文本。 “绘图区域”称为轴。我想到了三种解决方案:
您可以在轴坐标中指定文本。范围从轴左下角的(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()
在上面的文字和左上角之间的距离将取决于轴的大小。因此,将文本恰好定位在左上角(即,在坐标轴上为(0,1)
),然后将其偏移一些点(即,以绝对单位为单位)可能是有益的。
ax.annotate("Text", xy=(0,1), xycoords="axes fraction",
xytext=(5,-5), textcoords="offset points",
ha="left", va="top")
这里的结果看起来与上面相似,但与轴或图形尺寸无关;文字始终离左上角5磅。
最后,您实际上可能根本不想指定任何坐标。毕竟"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()