python - 在 Plotly Python 中使用时间 slider 绘制连续直方图

标签 python histogram plotly

我每天根据数据生成两个直方图,一个包含所需值,另一个包含不同站点的达到值。我想并排绘制这些直方图,例如底部的粉红色示例 in Plotly here (请参阅源代码链接)。但是,由于两个直方图都是每天生成的,因此我需要向图表添加一个时间 slider ,如底部示例 'Simple Slider' from Plotly (查看源代码链接)。

我的问题是第一个例子使用了

fig = dict(data=data, layout=layout)
plotly.offline.plot(fig, filename='Sine Wave Slider')

绘制直方图,而对于 slider ,使用以下内容:

import plotly.graph_objs as go
fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig, filename='styled histogram')

我的(未运行的)代码现在看起来像这样,我尝试在其中绘制相同的 2 个直方图 3 次。如何更改代码以生成同时使用直方图(均具有不同随机数据)和 slider 的图形?

import plotly
import plotly.graph_objs as go
import numpy as np

x0 = np.random.randn(500)
x1 = np.random.randn(500)+1

trace1 = go.Histogram(
    x=x0,
    histnorm='count',
    name='control',
    autobinx=False,
    xbins=dict(
        start=-3.5,
        end=3.0,
        size=0.5
    ),
    marker=dict(
        color='#FFD7E9',
    ),
    opacity=0.75
)
trace2 = go.Histogram(
    x=x1,
    name='experimental',
    autobinx=False,
    xbins=dict(
        start=-2.0,
        end=5,
        size=0.5
    ),
    marker=dict(
        color='#EB89B5'
    ),
    opacity=0.75
)
data = [trace1, trace2]

layout = go.Layout(
    title='Sampled Results',
    xaxis=dict(
        title='Value'
    ),
    yaxis=dict(
        title='Count'
    ),
    bargap=0.2,
    bargroupgap=0.1
)

steps = []
for i in range(len(trace1)):
    step = dict(
        method = 'restyle',
        args = ['visible', [False] * len(trace1)],
    )
    step['args'][1][i] = True # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(
    active = 20,
    currentvalue = {"prefix": "Frequency: "},
    pad = {"t": 3},
    steps = steps
)]

layout = dict(sliders=sliders)
fig = dict(data=data, layout=layout)
plotly.offline.plot(fig, filename='Histogram Slider')

最佳答案

  • 您可以创建一个直方图列表,假设 3 天(total_days = 3,奇数是实验性的,偶数是对照的)。
  • 仅显示第一条轨迹 ( visible = day < 1 )。
  • slider 中的每一步都会显示/隐藏另一对轨迹。

enter image description here

import plotly
import numpy as np
plotly.offline.init_notebook_mode()

total_days = 3

data = list()

for day in range(total_days):
    data.append(plotly.graph_objs.Histogram(
        x=np.random.randn(500) + day * 0.5,
        histnorm='count',
        name='Day {}, control'.format(day),
        visible=day < 1
      )
    )
    data.append(plotly.graph_objs.Histogram(
        x=np.random.randn(500) + day,
        histnorm='count',
        name='Day {}, experimental'.format(day),
        visible=day < 1
      )
    )

steps = list()
for i in range(total_days):
    step = dict(
        method='restyle',
        args=['visible', [False] * total_days * 2],
        label='Day {}'.format(i)
    )
    step['args'][1][i * 2] = True
    step['args'][1][i * 2 + 1] = True
    steps.append(step)

sliders = [dict(
    active=0,
    steps=steps
)]

layout = dict(sliders=sliders)
fig = dict(data=data, layout=layout)
plotly.offline.iplot(fig)

关于python - 在 Plotly Python 中使用时间 slider 绘制连续直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42899023/

相关文章:

python - 如何绘制 3d 直方图

R Plotly 设置默认调色板

c# - 检测用户是否输入假名的服务或策略?

python - 如何检查 python 可迭代数组中的任何元素是否为 None、空数组或 False(不包括零)?

python - matplotlib hist() 中条形之间的间距有数千个 bin

python - 如何将 html 列表添加到 dash 布局

python - 如何最好地使用 python 创建一个简单的、交互式的、可共享的图?

python - 是否可以将数字设置为 NaN 或无穷大?

python - 在 Pandas 列表中提取列表

pandas - 如何在同一个 jupyter notebook cell 中显示多个 pandas 系列直方图?