gpt4 book ai didi

python - Plotly:如何用Python创建子图?

转载 作者:行者123 更新时间:2023-11-30 21:52:20 25 4
gpt4 key购买 nike

我想知道使用 Python Plotly 创建子图的最佳实践是什么。是使用plotly.express还是标准plotly.graph_objects

我正在尝试创建一个带有两个子图的图形,它们是堆叠的条形图。下面的代码不起作用。我在官方文档中没有找到任何有用的东西。经典泰坦尼克号数据集在此处导入为 train_df

import plotly.express as px

train_df['Survived'] = train_df['Survived'].astype('category')
fig1 = px.bar(train_df, x="Pclass", y="Age", color='Survived')
fig2 = px.bar(train_df, x="Sex", y="Age", color='Survived')

trace1 = fig1['data'][0]
trace2 = fig2['data'][0]

fig = make_subplots(rows=1, cols=2, shared_xaxes=False)
fig.add_trace(trace1, row=1, col=1)
fig.add_trace(trace2, row=1, col=2)

fig.show()

我得到了下图:

enter image description here

我的期望如下:

enter image description here

最佳答案

我希望现有的答案能够满足您的需求,但我只想指出该声明

it's not possible to subplot stakedbar (because stacked bar are in facted figures and not traces

不完全正确。只要您使用 add_trace() 将其正确组合在一起,就可以使用堆叠条形图构建一个 plotly 子图。和go.Bar() 。这也回答了您的问题:

I am wondering what is best practice to create subplots using Python Plotly. Is it to use plotly.express or the standard plotly.graph_objects?

使用plotly.express如果你找到一个px适合您需求的方法。就像你的情况一样,你 do not找到它;使用 plotly.graphobjects 构建您自己的子图.

下面是一个示例,将向您展示一种使用 titanic 的可能方法。数据集。请注意,列名称与您的名称不同,因为没有大写字母。这个批准的本质是你使用 go.Bar()对于每个跟踪,并使用 row 指定放置这些跟踪的位置和col go.Bar() 中的参数。如果将多个跟踪分配给同一个 rowcol ,如果指定 barmode='stack',您将获得堆叠条形图子图。在fig.update_layout(). Using px.colors.qualitative.Plotly[i]` 将允许您按顺序分配标准绘图颜色循环中的颜色。

plotly :

enter image description here

代码:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd

url = "https://raw.github.com/mattdelhey/kaggle-titanic/master/Data/train.csv"
titanic = pd.read_csv(url)
#titanic.info()
train_df=titanic
train_df

# data for fig 1
df1=titanic.groupby(['sex', 'pclass'])['survived'].aggregate('mean').unstack()

# plotly setup for fig
fig = make_subplots(2,1)
fig.add_trace(go.Bar(x=df1.columns.astype('category'), y=df1.loc['female'],
name='female',
marker_color = px.colors.qualitative.Plotly[0]),
row=1, col=1)


fig.add_trace(go.Bar(x=df1.columns.astype('category'), y=df1.loc['male'],
name='male',
marker_color = px.colors.qualitative.Plotly[1]),
row=1, col=1)


# data for plot 2
age = pd.cut(titanic['age'], [0, 18, 80])
df2 = titanic.pivot_table('survived', [age], 'pclass')
groups=['(0, 18]', '(18, 80]']

fig.add_trace(go.Bar(x=df2.columns, y=df2.iloc[0],
name=groups[0],
marker_color = px.colors.qualitative.Plotly[3]),
row=2, col=1)

fig.add_trace(go.Bar(x=df2.columns, y=df2.iloc[1],
name=groups[1],
marker_color = px.colors.qualitative.Plotly[4]),
row=2, col=1)

fig.update_layout(title=dict(text='Titanic survivors by sex and age group'), barmode='stack', xaxis = dict(tickvals= df1.columns))
fig.show()

fig.show()

关于python - Plotly:如何用Python创建子图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59920024/

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