#python #matplotlib #graph #seaborn
Вопрос:
Я успешно вывел некоторые данные на своем графике seaborn (SNS). Я хотел бы добавить ссылку/гиперссылку в любом месте графика (желательно в заголовке), где пользователь может щелкнуть, и они будут перенаправлены на определенную веб-страницу. Я посмотрел в Интернете, как это сделать, но не уверен, что Seaborn предлагает эту функцию.
Фрагмент моего кода:
dataframe = pd.read_csv('C:filename.csv', delimiter=",", index_col=False)
dataframe.reset_index(drop=True, inplace=True)
dataframe.drop("Asset Group Title",axis=1,inplace=True)
sns.set(style="ticks")
sns.despine(left=True, bottom=True)
sns.barplot(data=dataframe).set(title="Soccer", ylabel="Quantity")
plt.xticks(rotation=30)
plt.tight_layout()
plt.show()
Как выглядит мой график: — Хотелось бы получить гиперссылку, где написано «Футбольные группы»
Любые предложения/советы приветствуются
Комментарии:
1. Как вы собираетесь экспортировать участок? Если это изображение (png, jpg), это невозможно, если вы экспортируете в формате PDF, то программа чтения PDF может автоматически определить URL-адрес.
2. График пока не будет экспортирован — он будет запущен через файл bat. Вы знаете, как я мог бы включить гиперссылку?
3. В настоящее время это доступно только для SVG с поддержкой, см. Этот пример . Возможно, можно добиться такого поведения, используя обратные вызовы и события выбора в интерактивном сюжете (см.
pick_simple
демонстрацию).
Ответ №1:
Используя webbrowser
и событие выбора matplotlib, вы можете заставить элементы интерактивного графика действовать как гиперссылки:
import webbrowser
import matplotlib.pyplot as plt
from matplotlib.text import Text
import numpy as np
def pick_url():
fig, ax = plt.subplots(1, 1)
ax.set_title("https://stackoverflow.com", picker=True)
(line,) = ax.plot(np.random.rand(100), "o")
def on_pick(event):
if isinstance(event.artist, Text):
text = event.artist
print(f"Attempting to open {text.get_text()!r}")
webbrowser.open(text.get_text())
fig.canvas.mpl_connect("pick_event", on_pick)
if __name__ == "__main__":
pick_url()
plt.show()
Эта демонстрационная версия получает URL-адрес прямо из названия сюжета, но вы можете получить/сгенерировать нужный вам URL-адрес, как вам нужно.