2016-09-22 164 views
5

我一直在使用Plotly(版本1.12.9)在Jupyter筆記本(離線)中製作自定義大小的子圖的網格。在Plotly網站上有很好的例子,但所有這些都是分散的情節。我修改了其中的一個,以使它看起來像一個我想,它與散點圖作品:如何繪製餅圖作爲自定義大小的小圖與Plotly在Python

import plotly 
import plotly.offline as py 
import plotly.graph_objs as go 
py.init_notebook_mode(connected=True) 

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'] 
values = [4500,2500,1053,500] 

trace0 = go.Scatter(x=[1, 2], y=[1, 2]) 
trace1 = go.Scatter(x=[1, 2], y=[1, 2]) 
trace2 = go.Scatter(x=[1, 2], y=[1, 2]) 
trace3 = go.Scatter(x=[1, 2], y=[1, 2]) 
trace4 = go.Scatter(x=[1, 2], y=[1, 2]) 
trace5 = go.Scatter(x=[1, 2], y=[1, 2]) 


fig = plotly.tools.make_subplots(
    rows=3, 
    cols=3, 
    specs=[[{}, {}, {}], [{}, {'colspan': 2, 'rowspan': 2}, None], [{} , None, None]], 
    subplot_titles=('First Subplot','Second Subplot', 'Third Subplot') 
) 

fig.append_trace(trace0, 3, 1) 
fig.append_trace(trace1, 2, 1) 
fig.append_trace(trace2, 1, 1) 
fig.append_trace(trace3, 1, 2) 
fig.append_trace(trace4, 1, 3) 
fig.append_trace(trace5, 2, 2) 

py.iplot(fig) 

和預期的一樣工作: Custom size scattered subplots

但不斷變化的餅圖這樣的痕跡:

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'] 
values = [4500,2500,1053,500] 
trace0 = go.Pie(labels=labels,values=values) 
trace1 = go.Pie(labels=labels,values=values) 
trace2 = go.Pie(labels=labels,values=values) 
trace3 = go.Pie(labels=labels,values=values) 
trace4 = go.Pie(labels=labels,values=values) 
trace5 = go.Pie(labels=labels,values=values) 

剛拋出這個錯誤:

PlotlyDictKeyError: 'xaxis' is not allowed in 'pie' 

Path To Error: ['xaxis'] 

Valid attributes for 'pie' at path [] under parents []: 

    ['pullsrc', 'textfont', 'hoverinfo', 'domain', 'label0', 'legendgroup', 
    'showlegend', 'scalegroup', 'textpositionsrc', 'pull', 'visible', 
    'sort', 'name', 'outsidetextfont', 'dlabel', 'stream', 'hole', 
    'textinfo', 'marker', 'labels', 'labelssrc', 'rotation', 'opacity', 
    'values', 'insidetextfont', 'direction', 'textsrc', 'textposition', 
    'type', 'valuessrc', 'text', 'uid'] 

Run `<pie-object>.help('attribute')` on any of the above. 
'<pie-object>' is the object at [] 

只有分散的情節才能做到這一點?在劇情介紹中我沒有找到任何東西。

回答

4

我最近在同樣的問題上掙扎,沒有發現我們能否使用plotly.tools.make_subplotsplotly.graph_objs.Pie。據我所知這是不可能的,因爲這些地塊沒有x和y軸。在original tutorialPie中,他們通過提供domain字典來進行子圖,例如, {'x': [0.0, 0.5], 'y': [0.0, 0.5]}定義了總繪圖空間左下象限中的一個區域。順便說一句,本教程使用圓環圖的註釋定位解決方案,可以通過提供參數xanchor = 'center'yanchor = 'middle'來完成。我發現one other tutorial這是一個很好的例子。在這裏,我用你的例子表現出來:

import plotly 
import plotly.offline as py 
import plotly.graph_objs as go 
py.init_notebook_mode(connected=True) 

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'] 
values = [4500,2500,1053,500] 
domains = [ 
    {'x': [0.0, 0.33], 'y': [0.0, 0.33]}, 
    {'x': [0.0, 0.33], 'y': [0.33, 0.66]}, 
    {'x': [0.0, 0.33], 'y': [0.66, 1.0]}, 
    {'x': [0.33, 0.66], 'y': [0.0, 0.33]}, 
    {'x': [0.66, 1.0], 'y': [0.0, 0.33]}, 
    {'x': [0.33, 1.0], 'y': [0.33, 1.0]} 
] 
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) 

Plotly pie charts subplots example

附:對不起,我後來意識到y座標是從底部開始的,所以我垂直鏡像了你的佈局。您也可以在相鄰子圖之間增加空間(只需在佈局中給出稍微更小/更大的數字,例如0.31,而右邊是0.33,而左邊是0.35而不是0.33)。

最後,在使用餅圖出於任何目的之前,請考慮它們是否真的是最好的選擇,並考慮批評者如thisthis