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

趋势(六)利用python绘制螺旋图

作者头像
HsuHeinrich
发布2024-12-05 12:29:58
发布2024-12-05 12:29:58
10000
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

趋势(六)利用python绘制螺旋图

螺旋图(Spiral Diagram)简介

1、螺旋图适合用来显示大型时间内的数据趋势,也能有效地显示其周期性。较长的时间序列显得过于拥挤,通过螺旋图能更好的抓住眼球,但是不易读。

绘制螺旋图

基本的螺旋框架

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

# 设置随机种子
np.random.seed(0)

# 创建日期范围(5年数据)
dates = pd.date_range(start='1/1/2015', end='31/12/2019')

# 自定义销售数据,并归一化
sales = np.sin(np.linspace(0, 4*np.pi, len(dates))) + 10 + np.random.normal(0, 1, len(dates))
sales = (sales - np.min(sales)) / np.ptp(sales)

# 计算每个数据点所对应的半径和角度
# 半径等于天数除以一年的天数(这里用365做简化计算)
radius = np.linspace(0, len(sales) / 365, len(sales))

# 角度等于通过取余数将天数限制在365以内,然后转换为弧度
theta = (dates.dayofyear.values % 365) / 365 * 2 * np.pi

# 初始化布局
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='polar')

ax.plot(theta, radius)

plt.show()

2、在螺旋方向上添加条形图

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

# 设置随机种子
np.random.seed(0)

# 创建日期范围(5年数据)
dates = pd.date_range(start='1/1/2015', end='31/12/2019')

# 自定义销售数据,并归一化
sales = np.sin(np.linspace(0, 4*np.pi, len(dates))) + 10 + np.random.normal(0, 1, len(dates))
sales = (sales - np.min(sales)) / np.ptp(sales)

# 计算每个数据点所对应的半径和角度
# 半径等于天数除以一年的天数(这里用365做简化计算)
radius = np.linspace(0, len(sales) / 365, len(sales))

# 角度等于通过取余数将天数限制在365以内,然后转换为弧度
theta = (dates.dayofyear.values % 365) / 365 * 2 * np.pi

# 初始化布局
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, polar=True)

# 添加条形图数据
ax.bar(theta, sales, width=0.01, bottom=radius, color='r', alpha=0.5)

plt.show()

3、自定义螺旋图:半径、方向、颜色、边框网格等

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

# 设置随机种子
np.random.seed(0)

# 创建日期范围(5年数据)
dates = pd.date_range(start='1/1/2015', end='31/12/2019')

# 自定义销售数据,并归一化
sales = np.sin(np.linspace(0, 4*np.pi, len(dates))) + 10 + np.random.normal(0, 1, len(dates))
sales = (sales - np.min(sales)) / np.ptp(sales)

# 计算每个数据点所对应的半径和角度
# 半径等于天数除以一年的天数(这里用365做简化计算),并将半径扩大两倍 
radius = 2 * np.linspace(0, len(sales) / 365, len(sales))

# 角度等于通过取余数将天数限制在365以内,然后转换为弧度
theta = (dates.dayofyear.values % 365) / 365 * 2 * np.pi

# 初始化布局
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, polar=True)

# 设置极坐标的起始位置(从90度位置开始)和旋转方向为顺时针
ax.set_theta_offset(np.pi / 2)
ax.set_theta_direction(-1)

# 选择颜色
colors = ['b', 'g', 'r', 'c', 'm']

for year in range(2015, 2020):
    # 寻找该年份的数据
    indices = (pd.Series(dates).dt.year == year)
    
    # 添加条形图数据,为每年选择不同的颜色
    ax.bar(theta[indices], sales[indices], width=0.01, bottom=radius[indices],
                   color=colors[year-2015], alpha=0.5)

# 隐藏坐标轴和刻度
ax.set_yticklabels([])
ax.set_xticklabels([])
# 关闭极坐标网格线
ax.grid(False)
# 删除极坐标的外环(边框)
ax.spines['polar'].set_visible(False)
  

plt.show()

4、总结

以上基于matplotlib极坐标叠加条形图绘制出了螺旋图。

共勉~

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 趋势(六)利用python绘制螺旋图
    • 螺旋图(Spiral Diagram)简介
    • 绘制螺旋图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档