Создать динамический c текст сноски в matplotlib - PullRequest
1 голос
/ 05 мая 2020

Я хотел бы иметь возможность добавлять в matplotlib текст сноски, подобный следующему:

enter image description here

Следующий код создаст график с похожими текст

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


fig, ax = plt.subplots(figsize = (5, 8))
n = 10
np.random.seed(1)
_ = ax.scatter(np.random.randint(0, 10, n), np.random.randint(0, 10, n), s=500)
x = 0
y = 1
_ = ax.text(
    x, y, "hello this is some text at the bottom of the plot", fontsize=15, color="#555"
)

Что выглядит как:

enter image description here

Однако, если данные изменятся, то приведенное выше не изменится, например как:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


fig, ax = plt.subplots(figsize=(5, 8))

n = 10
np.random.seed(2)
_ = ax.scatter(np.random.randint(0, 10, n), np.random.randint(0, 10, n), s=500)
x = 0
y = 1
_ = ax.text(
    x, y, "hello this is some text at the bottom of the plot", fontsize=15, color="#555"
)

enter image description here

Я видел этот вопрос / ответ , и это просто говорит, как построить текст в конкретная x,y координата. Я специально хочу иметь возможность установить сноску, а не строить график для определенных x, y, поэтому решение должно быть динамическим c.

Кроме того, предпочтительнее использовать интерфейс OOP, поскольку упоминается в документации .

Примечание - похоже, есть проблемы с текущее предложение при использовании fig.tight_layout()

1 Ответ

2 голосов
/ 05 мая 2020

Вы должны попытаться построить текст относительно подзаговора, а не относительно точек подзаговора, используя transform=ax.transAxes. Вы также должны настроить выравнивание так, чтобы текст начинался в нужном вам месте. Можно поиграть с расположением точки.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


fig, ax = plt.subplots(figsize=(5, 8))

n = 10
np.random.seed(2)
_ = ax.scatter(np.random.randint(0, 10, n), np.random.randint(0, 10, n), s=500)
x = 0
y = -.07
ax.text(x, y, "hello this is some text at the bottom of the plot", fontsize=15, 
        horizontalalignment='left',verticalalignment='top', transform=ax.transAxes)

plt.show()

enter image description here

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