Seaborn & Matplotlib Добавление текста относительно осей - PullRequest
0 голосов
/ 01 марта 2019

Пытаясь использовать seaborn и matplotlib для построения некоторых данных, нужно добавить некоторый описательный текст к моему графику, обычно я просто использую текст команды matplotlib и размещаю его там, где мне нужно, относительно осей, но это не так.Похоже, что это вообще не работает, я не получаю текст, отображаемый за осями, галочками и т. д., кроме того, что по умолчанию. Мне нужен какой-то пользовательский текст, отображаемый в верхнем левом углу области графика.

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

df - это мой pandas dataframe, он просто содержит несколько столбцов времени и координатные данные с тегом «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()

Кто-нибудь знает, как я могу получить некоторый текст для отображения, относительно позиционированныйэлементы "value" - это просто переменные с данными, которые я хочу напечатать.Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы хотите разместить текст «в верхнем левом углу области графика».«Площадь участка» называется осями.На ум приходят три решения:

Текст в координатах осей

Вы можете указать текст в координатах осей.Они варьируются от (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()
0 голосов
/ 01 марта 2019

Чтобы расположить текст в верхнем левом углу графика, не зная заранее пределов, вы можете запросить пределы осей 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()

Это выдаст

Text positioned in upper left

и изменение границ не изменит положение текста, т.е.

Text positioned in upper left (with larger bounds)

Возможно, вам придется настроить множители 0.01 и 0.95как вы хотите, исходя из того, насколько близко к углу вы хотите текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...