繁体   English   中英

Plotly:如何在 plotly 快递图上添加水平滚动条?

[英]Plotly: How to add a horizontal scrollbar to a plotly express figure?

我开始了解有关 plotly 和 pandas 的更多信息,并有一个多元时间序列,我希望 Z32FA6E1B78A9D4028ACCDB53E60564A2AA4CZ 并使用 Z2066C5922954ADC23 功能进行交互。 我还希望我的 plot 到水平滚动条,以便初始 plot 用于预先指定的初始时间间隔。 这是我的示例,涉及三个时间序列和 10 万个时间点:

import plotly.express as px
import numpy as np
import pandas as pd

np.random.seed(123)
e = np.random.randn(100000,3)  
df=pd.DataFrame(e, columns=['a','b','c'])

df['x'] = df.index
df_melt = pd.melt(df, id_vars="x", value_vars=df.columns[:-1])
fig=px.line(df_melt, x="x", y="value",color="variable")
fig.show()

在此处输入图像描述

(对于我的最终目的,时间序列会更大——在 900K+ 时间点中可能有 40 到 70 个时间序列。)

这将创建一个图形,我可以使用 plotly.express 功能与之交互,例如缩放、平移、矩形选择等。

有没有办法可以增加它,以便最初的 plot 仅显示前 500 个时间点,并且滚动条允许我调查随着时间的增加会发生什么?

使用带有 IDLE 的 Mac OS 10.15.4 和 Python 3.7。 我希望在 IDLE 中而不是在 Jupyter 笔记本环境中创建它。

最简单的方法是将以下内容添加到您的设置中:

fig.update_layout(xaxis=dict(rangeslider=dict(visible=True),
                             type="linear"))

你会得到:

在此处输入图像描述

这将使您能够对原始图形进行子集化和平移:

在此处输入图像描述

完整代码:

import plotly.express as px
import numpy as np
import pandas as pd

np.random.seed(123)
e = np.random.randn(100000,3)  
df=pd.DataFrame(e, columns=['a','b','c'])

df['x'] = df.index
df_melt = pd.melt(df, id_vars="x", value_vars=df.columns[:-1])
fig=px.line(df_melt, x="x", y="value",color="variable")

# Add range slider
fig.update_layout(xaxis=dict(rangeslider=dict(visible=True),
                             type="linear")
)

fig.show()

使用plotly.graphing_objects离线使用plotly

您也可以使用plotly.graphing_objects ,如下所示。

引用官方文档中的以下示例。

import plotly.graph_objects as go

import pandas as pd

# Load data
df = pd.read_csv(
    "https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df.columns = [col.replace("AAPL.", "") for col in df.columns]

# Create figure
fig = go.Figure()

fig.add_trace(
    go.Scatter(x=list(df.Date), y=list(df.High)))

# Set title
fig.update_layout(
    title_text="Time series with range slider and selectors"
)

# Add range slider
fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=list([
                dict(count=1,
                     label="1m",
                     step="month",
                     stepmode="backward"),
                dict(count=6,
                     label="6m",
                     step="month",
                     stepmode="backward"),
                dict(count=1,
                     label="YTD",
                     step="year",
                     stepmode="todate"),
                dict(count=1,
                     label="1y",
                     step="year",
                     stepmode="backward"),
                dict(step="all")
            ])
        ),
        rangeslider=dict(
            visible=True
        ),
        type="date"
    )
)

fig.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM