[英]How To Create Subplots Using Plotly Express
import plotly.express as px
import plotly.subplots as sp
# Create figures in Express
figure1 = px.line(my_df)
figure2 = px.bar(my_df)
# For as many traces that exist per Express figure, get the traces from each plot and store them in an array.
# This is essentially breaking down the Express fig into it's traces
figure1_traces = []
figure2_traces = []
for trace in range(len(figure1["data"])):
figure1_traces.append(figure1["data"][trace])
for trace in range(len(figure2["data"])):
figure2_traces.append(figure2["data"][trace])
#Create a 1x2 subplot
this_figure = sp.make_subplots(rows=1, cols=2)
# Get the Express fig broken down as traces and add the traces to the proper plot within in the subplot
for traces in figure1_traces:
this_figure.append_trace(traces, row=1, col=1)
for traces in figure2_traces:
this_figure.append_trace(traces, row=1, col=2)
#the subplot as shown in the above image
final_graph = dcc.Graph(figure=this_figure)
由于我正在处理的项目数据的敏感性,我无法分享我的程序 output 的实际图像,但它看起来与上图中的完全一样。 据我测试,这应该适用于任何 Express 人物。
我希望这对某些人有用。 祝大家策划愉快!
公认的答案很好,我想提一下针对它的第一条评论的一个小修改,这只是为了显示一些特定子图的传说。 当所有子图共享相同的图例时,我发现此修改非常有用,并且让单个图例重复多次似乎是多余的。
这是诀窍。 图形的每个轨迹都有自己的'showlegend'
属性(Plotly Express 图形的默认设置为 True),因此您可以通过迭代将其设置为 False,就像我对图 2 所做的那样。
# I largely keep the codes and comments the same as the original answer, with the modification highlighted under '#######'
my_df = px.data.medals_long()
# Create figures in Express
figure1 = px.bar(my_df, x = "nation", y = "count", color = "medal")
figure2 = px.line(my_df, x = "nation", y = "count", color = "medal")
# For as many traces that exist per Express figure, get the traces from each plot and store them in an array.
# This is essentially breaking down the Express fig into its traces
figure1_traces = []
figure2_traces = []
for trace in range(len(figure1["data"])):
figure1_traces.append(figure1["data"][trace])
for trace in range(len(figure2["data"])):
############ The major modification. Manually set 'showlegend' attribute to False. ############
figure2["data"][trace]['showlegend'] = False
figure2_traces.append(figure2["data"][trace])
# Create a 1x2 subplot
this_figure = make_subplots(rows = 1, cols = 2, subplot_titles = ['Bar', 'Line'])
this_figure.update_layout(height = 500, width = 1200, title_text = "Medals count by country", title_font_size = 25)
# Get the Express fig broken down as traces and add the traces to the proper plot within the subplot
for traces in figure1_traces:
this_figure.append_trace(traces, row = 1, col = 1)
for traces in figure2_traces:
this_figure.append_trace(traces, row = 1, col = 2)
this_figure.show()
如果不进行此修改,每个组的图例将显示两次,但它们仍然只能同时显示/隐藏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.