【问题标题】:Python Dash/Plotly doesn't display graphs correctly?Python Dash/Plotly 不能正确显示图表?
【发布时间】:2021-02-20 21:37:58
【问题描述】:

我正在尝试以比较时间序列绘制我的数据,但是,我不断得到这样的图:

现在我的数据在 pandas DataFrame 中被格式化,如下所示:

|   | Date                             | Name1          | Name2   | Name3 |
| 0 | Timestamp('2005-08-06 00:00:00') | 1.5            | NaN     | 3 |
| 1 | Timestamp('2003-09-07 00:00:00') | NaN            | 1.3     | 2 |
| 2 | Timestamp('2002-10-02 00:00:00') | 1.6            | NaN     | NaN |
| 3 | Timestamp('1996-11-02 00:00:00') | 1.6            | 1       | NaN |
| 4 | Timestamp('2005-10-02 00:00:00') | NaN            | NaN     | 1 |

我绘制它的过程是这样的:

def order_names(d):
    d_ret = dict()
    for i in d.keys():
        x_coordinates = d[i].keys()
        y_coordinates = d[i].values()
        x,y = zip(*sorted(zip(x_coordinates, y_coordinates)))
        d_star = {xi : yi for xi, yi in zip(x,y)}
        d_ret[i] = d_star
    return d_ret

d = get_data() #d = {name : {datetime.datetime : value...} ...}
d = order_data(d)
df = pd.DataFrame(d)
df.reset_index(inplace = True)
df.rename(columns={"index": "date"},inplace = True)



app = dash.Dash(__name__)

app.layout = html.Div([
    dcc.Dropdown(
        id='name',
        options=[{"label": x, "value": x} 
                 for x in df.columns[1:]],
        multi=True,
        value='Name1',
    ),
    dcc.Graph(id="name-chart"),
])

@app.callback(
    Output("name-chart", "figure"), 
    [Input("name", "value")])
def display_time_series(name):
    fig = px.line(df, x='date', y=name, title = "Value vs. Time")
    return fig

而且我无法弄清楚为什么 dash/plotly 无序显示顶部图表。

tl;dr:我正在尝试绘制多个时间序列,这些时间序列可能没有匹配的日期,也可能没有匹配的日期

【问题讨论】:

  • 如果没有合适的数据集样本来重现所提供的数字,几乎不可能提供有用的答案。请查看this 并提供更有用的数据样本。

标签: python pandas plotly plotly-dash plotly-python


【解决方案1】:

这是因为您的数据混乱。当您缺少 x 轴值时会发生这种情况。

您可以尝试以下几种解决方案: python plotly time series handle missing dates corretly

并且: https://community.plotly.com/t/scatterplot-lines-unwanted-connecting/8729

您需要确保您的数据全部基于相同的 x 轴,并且该 x 轴必须正确排序。根据您的示例代码,我不完全相信您正确订购了数据框。您不能绘制“可能有或可能没有匹配日期”的数据。

此外,根据您出现的缺失数据量,我强烈建议您构建一个具有连接边的散点图。

【讨论】:

  • 这并不是因为缺少数据,而是我正在绘制的事件仅发生 2-3X/年/实体,并且每个实体都有自己的时间表。无论如何,将其绘制为带有线条+标记的散点图效果非常好
  • 对,所以您只需要非常努力地确保有一个共同的 x 轴。如果你有随机的 x 轴值,那么 plotly 将无法知道去哪里。如果每个实体每年只发生 2-3 次,我肯定会做散点图,允许有差距
猜你喜欢
  • 2019-06-25
  • 2022-07-30
  • 1970-01-01
  • 2021-11-04
  • 2021-12-24
  • 1970-01-01
  • 2021-11-14
  • 2022-08-14
  • 1970-01-01
相关资源
最近更新 更多