Plotly动画:折线图不可见(Python)
Plotly animation: line chart is invisible (Python)
我正在使用 Jupyter Notebook 尝试显示动画折线图。 (看到它是从左到右绘制的。)
但是,图表没有显示,而图表容器和所有控件都显示了。好像线是看不见的。
这是我的代码:
import pandas as pd
import plotly.express as px
import plotly.io as pio
data = [['Year', 'Country', 'Output', 'Investment', 'Depreciation'], ['2020', 'Netherlands', 1, 2, 1], ['2021', 'Netherlands', 2, 2, 1], ['2022', 'Netherlands', 3, 2, 1], ['2023', 'Netherlands', 4, 2, 1]]
df = pd.DataFrame(data[1:], columns=data[0])
pio.renderers.default = 'notebook'
px.line(df,
x='Year',
y='Output',
color='Country',
title='Macroeconomic variables over time',
range_x=[df['Year'].iloc[0], df['Year'].iloc[-1]],
range_y=[0, max(df['Output']) * 1.25],
animation_frame='Year')
提供以下图表(在 VSCode 和 Jupyter Notebooks 中):
关于为什么会发生这种情况有什么想法吗?
- 从根本上说,您需要考虑数据的维度。假设每 年 有一行,并且您使用的是 animation_frame,每条轨迹中只有一个点。这不构成一条线
- 模拟了一个略有不同的数据帧,它有 Decade 并用作 animation_frame。这意味着有 10 行,因此每条线有 10 个点。
import pandas as pd
import plotly.express as px
import numpy as np
data = [
["Year", "Country", "Output", "Investment", "Depreciation"],
["2020", "Netherlands", 1, 2, 1],
["2021", "Netherlands", 2, 2, 1],
["2022", "Netherlands", 3, 2, 1],
["2023", "Netherlands", 4, 2, 1],
]
df = pd.DataFrame(data[1:], columns=data[0])
df = pd.DataFrame(
{
c: list(range(2000 if i == 0 else 1, 2050 if i == 0 else 51, 1))
if c in ["Year", "Output"]
else np.full(50, i if c != "Country" else "Netherlands")
for i, c in enumerate(data[0])
}
).assign(Decade=lambda d: d["Year"] // 10 - 200)
px.line(
df,
x="Year",
y="Output",
color="Country",
title="Macroeconomic variables over time",
range_x=[df["Year"].iloc[0], df["Year"].iloc[-1]],
range_y=[0, max(df["Output"]) * 1.25],
animation_frame="Decade",
)
我正在使用 Jupyter Notebook 尝试显示动画折线图。 (看到它是从左到右绘制的。)
但是,图表没有显示,而图表容器和所有控件都显示了。好像线是看不见的。
这是我的代码:
import pandas as pd
import plotly.express as px
import plotly.io as pio
data = [['Year', 'Country', 'Output', 'Investment', 'Depreciation'], ['2020', 'Netherlands', 1, 2, 1], ['2021', 'Netherlands', 2, 2, 1], ['2022', 'Netherlands', 3, 2, 1], ['2023', 'Netherlands', 4, 2, 1]]
df = pd.DataFrame(data[1:], columns=data[0])
pio.renderers.default = 'notebook'
px.line(df,
x='Year',
y='Output',
color='Country',
title='Macroeconomic variables over time',
range_x=[df['Year'].iloc[0], df['Year'].iloc[-1]],
range_y=[0, max(df['Output']) * 1.25],
animation_frame='Year')
提供以下图表(在 VSCode 和 Jupyter Notebooks 中):
关于为什么会发生这种情况有什么想法吗?
- 从根本上说,您需要考虑数据的维度。假设每 年 有一行,并且您使用的是 animation_frame,每条轨迹中只有一个点。这不构成一条线
- 模拟了一个略有不同的数据帧,它有 Decade 并用作 animation_frame。这意味着有 10 行,因此每条线有 10 个点。
import pandas as pd
import plotly.express as px
import numpy as np
data = [
["Year", "Country", "Output", "Investment", "Depreciation"],
["2020", "Netherlands", 1, 2, 1],
["2021", "Netherlands", 2, 2, 1],
["2022", "Netherlands", 3, 2, 1],
["2023", "Netherlands", 4, 2, 1],
]
df = pd.DataFrame(data[1:], columns=data[0])
df = pd.DataFrame(
{
c: list(range(2000 if i == 0 else 1, 2050 if i == 0 else 51, 1))
if c in ["Year", "Output"]
else np.full(50, i if c != "Country" else "Netherlands")
for i, c in enumerate(data[0])
}
).assign(Decade=lambda d: d["Year"] // 10 - 200)
px.line(
df,
x="Year",
y="Output",
color="Country",
title="Macroeconomic variables over time",
range_x=[df["Year"].iloc[0], df["Year"].iloc[-1]],
range_y=[0, max(df["Output"]) * 1.25],
animation_frame="Decade",
)