- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道使用 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()
我得到了下图:
我的期望如下:
最佳答案
我希望现有的答案能够满足您的需求,但我只想指出该声明
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()
中的参数。如果将多个跟踪分配给同一个 row
和col
,如果指定 barmode='stack'
,您将获得堆叠条形图子图。在fig.update_layout(). Using
px.colors.qualitative.Plotly[i]` 将允许您按顺序分配标准绘图颜色循环中的颜色。
plotly :
代码:
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/
我是一名优秀的程序员,十分优秀!