Как добавить ссылку/гиперссылку на график SNS seaborn?

#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-адрес, как вам нужно.