gpt4 book ai didi

python - Plotly:如何在 plotly express 动画中指定分类 x 轴元素?

转载 作者:行者123 更新时间:2023-12-05 04:59:23 25 4
gpt4 key购买 nike

我有以下数据。

enter image description here

我正在使用一个 slider ,这样我就可以在不同的日期之间滑动(请看下图以了解 slider 是什么)。 enter image description here现在,由于我的类别可能会在日期之间发生变化,所以我想用 A、B、C、E、F 初始化我的 x 轴范围,而不管我的日期是什么。所以有时我会在一个类别中没有数据点,但这对我来说并不重要。

那么如何初始化我的 x 轴范围并使我的数据点适应初始化的 x 轴?

我正在使用 python3 和 plotly express。

这是我现在的代码:

data.columns = ['price', 'category', 'date']
data = data.sort_values(by=['date', 'price'])
fig = px.scatter(data, x = "category", y = "price", animation_frame="date")
fig.update_layout(
yaxis_title="Price (€)",
)
fig['layout']['updatemenus'][0]['pad']['t'] = 180
fig['layout']['sliders'][0]['pad']['t'] = 200
fig.write_html("/home/**/Desktop/1.html", auto_play=True)

希望我说得足够清楚。如果您需要任何额外信息,请告诉我。欢迎任何想法或提示:)

最佳答案

答案:

确保所有类别都显示在所有动画帧的 x 轴上的唯一方法是确保它们出现在第一个 Date = X 中。所以你实际上无法修复图中的 x 轴范围。您必须通过您对数据源的表示来完成此操作。

详情:

So sometimes I will have no data points in a category but this does not matter to me.

也许不是,但它对 plotly.express 很重要。特别是如果您所说的“没有数据”意味着您的数据集中没有所有日期的所有类别的记录。你看,plotly 似乎将 x 轴值设置为它在 Date = X 的第一个唯一值中找到的类别,即 A、B、C。不过别担心,我们也会处理的。让我们使用稍微修改过的数据屏幕截图(下一次,这样做)。我添加了实际日期而不是 X, Y 并稍微缩小了数字的范围,因为您的特定数据会使动画有点困惑。

如果我们使用这样的动画方法:

fig = px.scatter(df1, x="Category", y="Price", animation_frame="Date",
color="Category", range_y=[0,20])

...你会得到两个动画帧:

plotly 1,第 1 帧

enter image description here

plotly 1,第 2 帧

enter image description here

现在,让我们使用一种方法来确保代表所有日期的所有类别,正如您可以在帖子 Pandas: How to include all columns for all rows although value is missing in a dataframe with a long format? 中找到的那样

现在你会得到:

plotly 2,第 1 帧

enter image description here

plotly 2,第 2 帧

enter image description here

希望这就是您要找的。如果没有,请不要犹豫,让我知道!如果删除 df1.fillna(0) 部分,您会得到稍微不同的结果。但我会把它留给你来处理

中的所有可用选项

完整代码:

import pandas as pd
import plotly.express as px

df = pd.DataFrame({'Date': {0: '24.08.2020',
1: '24.08.2020',
2: '24.08.2020',
3: '25.08.2020',
4: '25.08.2020',
5: '25.08.2020'},
'Category': {0: 'A', 1: 'B', 2: 'C', 3: 'C', 4: 'E', 5: 'F'},
'Price': {0: 1, 1: 2, 2: 3, 3: 3, 4: 10, 5: 13}})

# make sure that all category variables are represented for
# all dates even though not all variables have values.
df['key']=df.groupby(['Date','Category']).cumcount()
df1 = pd.pivot_table(df,index='Date',columns=['key','Category'],values='Price')
df1 = df1.stack(level=[0,1],dropna=False).to_frame('Price').reset_index()
df1 = df1[df1.key.eq(0) | df1['Price'].notna()]
df1=df1.fillna(0)

# ploty express animation
fig = px.scatter(df1, x="Category", y="Price", animation_frame="Date",
color="Category", range_y=[0,20])

# some extra settings.
fig.update_layout(transition = {'duration': 20000})


fig.show()

关于python - Plotly:如何在 plotly express 动画中指定分类 x 轴元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63533802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com