Plotly:如何创建一个奇数子图?

7

我希望第五个子图位于第三行两列的中心位置。(我已经尝试通过添加domain参数来实现这一点)。以下是复制代码的代码-

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

continent_df = pd.read_csv('https://raw.githubusercontent.com/vyaduvanshi/helper-files/master/continent.csv')
temp_cont_df = pd.pivot_table(continent_df, index='continent', aggfunc='last').reset_index()

fig = make_subplots(rows=3, cols=2, specs=[[{'type':'pie'},{'type':'pie'}],[{'type':'pie'},{'type':'pie'}],
                                           [{'type':'pie'},{'type':'pie'}]])

fig.add_pie(labels=continent_df.continent, values=continent_df.new_cases, row=1,col=1)
fig.add_pie(labels=continent_df.continent, values=continent_df.new_deaths, row=1,col=2)
fig.add_pie(labels=continent_df.continent, values=continent_df.new_recovered, row=2,col=1)
fig.add_pie(labels=continent_df.continent, values=continent_df.new_tests, row=2,col=2)
fig.add_pie(labels=temp_cont_df.continent, values=temp_cont_df.active_cases, row=3,col=1,domain={'x':[0.25,0.75],'y':[0,0.33]})

enter image description here

如果我在specs参数中不包含第六个图,就会抛出错误。

1
这个文档对你有帮助吗? - rpanai
1
没错!只需在倒数第二个specs参数后添加'colspan':2,并将最后一个参数设为None即可解决问题。 - callmeanythingyouwant
1个回答

6
你可以通过正确设置 domain 来实现这一点。下面是一个例子,将在四个角落和中间各有一个图形。

绘图

enter image description here

完整代码:

import plotly
import plotly.offline as py
import plotly.graph_objs as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500,2500,1053,500]
domains = [
    {'x': [0.0, 0.33], 'y': [0.0, 0.33]},
    {'x': [0.33, 0.66], 'y': [0.33, 0.66]},
    {'x': [0.0, 0.33], 'y': [0.66, 1.0]},
    {'x': [0.66, 1.00], 'y': [0.0, 0.33]},
    {'x': [0.66, 1.0], 'y': [0.66, 1.00]},
]
traces = []

for domain in domains:
    trace = go.Pie(labels = labels,
                   values = values,
                   domain = domain,
                   hoverinfo = 'label+percent+name')
    traces.append(trace)

layout = go.Layout(height = 600,
                   width = 600,
                   autosize = False,
                   title = 'Main title')
fig = go.Figure(data = traces, layout = layout)
#py.iplot(fig, show_link = False)
fig.show()

1
谢谢!我能够按照“domain”的方式(你的方式)以及通过编辑我的“specs”参数的最后一部分来完成它。两种方法都可以正常工作。 - callmeanythingyouwant
specs=[[{'type':'pie'},{'type':'pie'}],[{'type':'pie'},{'type':'pie'}], [{'type':'pie','colspan':2},None]] - callmeanythingyouwant
1
域名那个看起来更好一些,因为相比规格方式的严格列和行限制,它可以进行更精细的控制(虽然我肯定也有解决方法)。 - callmeanythingyouwant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接