小编典典

是否可以使用 Plotly 生成时钟图表?

all

我正在开发一个 dataviz 项目,我偶然发现了 Last.FM 生成的报告,其中有一个时钟图表来表示按小时记录的分布情况。

有问题的图表是这样的:

这个

这是一个交互式图表,所以我尝试使用 Plotly 库尝试复制图表,但没有成功。

有没有办法在 Plotly 中复制它?这是我需要表示的数据

listeningHour  = df.hour.value_counts().rename_axis('hour').reset_index(name='counts')
listeningHour
   hour counts
0   17  16874
1   18  16703
2   16  14741
3   19  14525
4   23  14440
5   22  13455
6   20  13119
7   21  12766
8   14  11605
9   13  11575
10  15  11491
11  0   10220
12  12  7793
13  1   6057
14  9   3774
15  11  3476
16  10  1674
17  8   1626
18  2   1519
19  3   588
20  6   500
21  7   163
22  4   157
23  5   26

阅读 101

收藏
2022-06-15

共1个答案

小编典典

Plotly 提供的图表是一个极坐标图。我已经用你的数据编写了一个代码。在我研究的时候,似乎没有办法把蜱虫放在甜甜圈里。代码的要点是在角度轴方向上从 0:00 开始。时钟显示是一个包含 24 个刻度位置的列表,其中包含一个空字符串和每 6 小时一个字符串。角度网格与条形图的中心对齐。

import plotly.graph_objects as go

r = df['counts'].tolist()
theta = np.arange(7.5,368,15)
width = [15]*24

ticktexts = [f'$\large{i}$' if i % 6 == 0 else '' for i in np.arange(24)]

fig = go.Figure(go.Barpolar(
    r=r,
    theta=theta,
    width=width,
    marker_color=df['counts'],
    marker_colorscale='Blues',
    marker_line_color="white",
    marker_line_width=2,
    opacity=0.8
))

fig.update_layout(
    template=None,
    polar=dict(
        hole=0.4,
        bgcolor='rgb(223, 223,223)',
        radialaxis=dict(
            showticklabels=False,
            ticks='',
            linewidth=2,
            linecolor='white',
            showgrid=False,
        ),
        angularaxis=dict(
            tickvals=np.arange(0,360,15),
            ticktext=ticktexts,
            showline=True,
            direction='clockwise',
            period=24,
            linecolor='white',
            gridcolor='white',
            showticklabels=True,
            ticks=''
        )
    )
)

fig.show()

在此处输入图像描述

2022-06-15