Python Dash/Plotly 没有正确显示图表?
Python Dash/Plotly doesn't display graphs correctly?
我试图在比较时间序列中绘制我的数据,但是,我不断得到这样的图:
现在我的数据在 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:我正在尝试绘制多个时间序列,这些时间序列可能没有也可能没有匹配的日期
是你的数据乱了。当您缺少 x 轴值时会发生这种情况。
您可以尝试以下几种解决方案:
python plotly time series handle missing dates corretly
并且:
https://community.plotly.com/t/scatterplot-lines-unwanted-connecting/8729
您需要确保您的数据都基于同一个 x 轴,并且这个 x 轴必须正确排序。根据您的示例代码,我并不完全相信您正确地订购了数据框。您无法绘制 'may or may not have matching dates'.
的数据
另外,根据您似乎有多少缺失数据,我强烈建议您构建一个具有连接边的散点图。
我试图在比较时间序列中绘制我的数据,但是,我不断得到这样的图:
现在我的数据在 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:我正在尝试绘制多个时间序列,这些时间序列可能没有也可能没有匹配的日期
是你的数据乱了。当您缺少 x 轴值时会发生这种情况。
您可以尝试以下几种解决方案: python plotly time series handle missing dates corretly
并且: https://community.plotly.com/t/scatterplot-lines-unwanted-connecting/8729
您需要确保您的数据都基于同一个 x 轴,并且这个 x 轴必须正确排序。根据您的示例代码,我并不完全相信您正确地订购了数据框。您无法绘制 'may or may not have matching dates'.
的数据另外,根据您似乎有多少缺失数据,我强烈建议您构建一个具有连接边的散点图。