Интерактивные тепловые карты календаря с Python — самый простой способ, который вы найдете
Создавайте собственные тепловые карты календаря, используя минимум кода.
На моем пути к разработке приложения мне было очень трудно сделать интерактивную тепловую карту календаря (вроде той, что есть на Github и Gitlab), и благодаря этому сообщению на форуме сообщества Plotly я смог это сделать.
Используя предоставленный код и добавив свой собственный, мне удалось исправить некоторые ошибки с еженедельными данными панд и превратить их в пакет, который может использовать каждый.
(Этот проект с открытым исходным кодом и доступен на моем Github)
Монтаж
Этот пакет размещен на PyPI, поэтому для его установки просто используйте:
$ pip install plotly-calplot
Легко начать
Давайте сначала создадим пример фрейма данных.
import pandas as pd import numpy as np dummy_start_date = "2019-01-01" dummy_end_date = "2021-10-03" # date range from start date to end date and random # column named value using amount of days as shape dummy_df = pd.DataFrame({ "ds": pd.date_range(dummy_start_date, dummy_end_date), "value": np.random.randint(low=0, high=30, size=(pd.to_datetime(dummy_end_date) - pd.to_datetime(dummy_start_date)).days + 1,), })
Единственное требование для использования этого графика — наличие фрейма данных Pandas со столбцом даты (см. документы pandas to_datetime) и столбцом значений, который будет использоваться в качестве значения, которое мы будем отображать.
Теперь к хорошему:
from plotly_calplot import calplot # creating the plot fig = calplot( dummy_df, x="ds", y="value" ) fig.show()
И, конечно же, если у вас все еще есть все интерактивные функции Plotly (масштабирование, фильтрация, выбор лассо и наведение курсора)
Темная тема
Это хорошо и все такое, но, будучи программистами, мы очень любим темные темы, и, конечно же, вы можете использовать функцию update_layout, как и любую другую Plotly Figure. Но чтобы упростить задачу, у нас есть возможность использовать параметр dark_theme.
fig = calplot( dummy_df, x="ds", y="value", dark_theme=True ) fig.show()
Имейте в виду разрыв
Все еще не убеждены? и я нет. Один из визуальных аспектов, с которым мне очень нравится экспериментировать, — это зазор между квадратами, и, к счастью, это легко достижимо:
# you can make it very large, but it's kinda silly fig = calplot( dummy_df, x="ds", y="value", gap=9 ) fig.show()
# or you can make it zero, which is actually nice fig = calplot( dummy_df, x="ds", y="value", gap=0 ) fig.show()
Выбор собственной цветовой гаммы
Другим очень важным аспектом графиков, очевидно, являются цвета, которые вы выбираете, calplot поддерживает все стандартные цветовые шкалы Plotly, и вы также можете создать свою собственную.
# choosing a standard colorscale fig = calplot( dummy_df, x="ds", y="value", gap=0, colorscale="blues" # standard is greens ) fig.show()
Но, конечно, вы можете захотеть создать свою собственную цветовую шкалу, есть несколько способов ее создания, мой любимый — использовать процент от максимальных значений.
# let's create a custom black and white colorscale fig = calplot( dummy_df, x="ds", y="value", gap=0, colorscale=[(0.00, "white"), (0.33, "#999"), (0.33, "#999"), (0.66, "#444"), (0.66, "#444"), (1.00, "#000")] )
Другие варианты
Я рекомендую вам изучить все другие варианты, предлагаемые пакетом, такие как добавление года в заголовок каждого подзаголовка с помощью years_title=True или настройка параметра month_lines_width, чтобы сделать его именно таким, как вам нравится. бесконечный:
# exploring some options fig = calplot( dummy_df, x="ds", y="value", dark_theme=True, years_title=True, colorscale="purples", gap=0, name="Data", month_lines_width=3, month_lines_color="#fff" ) fig.show()
это обертка
Спасибо за чтение этой статьи, я разработал этот пакет как очень простой проект выходного дня, и он мне очень понравился, но код все еще немного грубоват по краям. Так что, если вам понравилось, не стесняйтесь связаться со мной или внести свой вклад в это.
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.