前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >趋势(七)利用python绘制日历热图

趋势(七)利用python绘制日历热图

作者头像
HsuHeinrich
发布2024-12-20 16:54:41
发布2024-12-20 16:54:41
9400
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

趋势(七)利用python绘制日历热图

日历热图(Calendar Heatmap)简介

日历热图通过将事件聚合到日历网格中进行可视化分析,针对时序类数据特征较为直观,其中以github代码热图而知名。

快速绘制

基于plotly_calplot

代码语言:javascript
代码运行次数:0
复制
import pandas as pd
import numpy as np
from plotly_calplot import calplot


# 自定义数据
dt = pd.date_range('2022-09-01', '2023-10-15')
values = np.random.randint(0, 100, len(dt))
df = pd.DataFrame({"dt": dt, "value": values})

# 绘制图形
fig = calplot(
         df,
         x="dt",
         y="value"
)

fig.show()

基于pyecharts

代码语言:javascript
代码运行次数:0
复制
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Calendar
import datetime
import random

# 自定义数据
begin = datetime.date(2022, 1, 1)
end = datetime.date(2022, 12, 31)
data = [
    [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
    for i in range((end - begin).days + 1)
]

c = (
    Calendar()
    .add("", data, calendar_opts=opts.CalendarOpts(range_="2022"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2022年微信步数情况"),
        visualmap_opts=opts.VisualMapOpts(
            max_=30000,
            min_=500,
            orient="horizontal",
            is_piecewise=True,
            pos_top="230px",
            pos_left="100px",
        ),
    )
)

c.render_notebook()

基于calplot

代码语言:javascript
代码运行次数:0
复制
import numpy as np
import pandas as pd
import calplot
import matplotlib.pyplot as plt

# 自定义数据
np.random.seed(sum(map(ord, 'calplot')))
all_days = pd.date_range('1/1/2019', periods=730, freq='D')
days = np.random.choice(all_days, 500)
events = pd.Series(np.random.randn(len(days)), index=days)

calplot.calplot(events, cmap='YlGn', figsize = (16, 8), colorbar=False)

plt.show()

基于july

代码语言:javascript
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
import july
from july.utils import date_range

# 自定义数据
dates_2022 = date_range("2022-01-01", "2022-12-31")
data_2022 = np.random.randint(0, 14, len(dates_2022))
dates_2023 = date_range("2023-01-01", "2023-12-31")
data_2023 = np.random.randint(0, 14, len(dates_2023))

july.heatmap(dates_2022, data_2022, title='Github Activity', cmap="github")
july.heatmap(dates_2023, data_2023, cmap="github")

plt.show()

定制多样化的日历热图

自定义日历热图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

按月绘制

代码语言:javascript
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
import july
from july.utils import date_range

# 自定义数据
dates = date_range("2022-01-01", "2022-12-31")
data = np.random.randint(0, 14, len(dates))

july.calendar_plot(dates, data)

plt.show()

指定月份绘制

代码语言:javascript
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
import july
from july.utils import date_range

# 自定义数据
dates = date_range("2022-01-01", "2022-12-31")
data = np.random.randint(0, 14, len(dates))

# 初始化布局 
fig, axes = plt.subplots(1, 2)

# 带有日期标签
july.month_plot(dates, data, month=5, date_label=True, ax=axes[0])
axes[0].set_title('with date label') 

# 带有数值标签
july.month_plot(dates, data, month=5, value_label=True, ax=axes[1])
axes[1].set_title('with value label') 


plt.subplots_adjust(wspace=0.5)  # 增加子图之间的水平间隔
plt.show()

总结

以上通过plotly_calplot、pyecharts、calplot和july快速绘制日历热图。并通过修改参数或者辅以其他绘图知识自定义各种各样的日历热图来适应相关使用场景。

共勉~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 趋势(七)利用python绘制日历热图
    • 日历热图(Calendar Heatmap)简介
    • 快速绘制
    • 定制多样化的日历热图
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档