web-dev-qa-db-ja.com

円グラフをカスタムサイズのサブプロットとしてプロットする方法Python

Jupyterノートブック(オフライン)でPlotly(バージョン1.12.9)を使用して、カスタムサイズのサブプロットのグリッドを作成しようとしています。 PlotlyのWebサイトには素晴らしい例がありますが、それらはすべて散在するプロットです。それらの1つを変更して、必要なもののように見せ、散布図で機能します。

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 []

散在するプロットでのみこれを行うことは可能ですか?プロットのドキュメントには何も見つかりませんでした。

14
Danowsky

私は最近同じ問題に苦しんでいて、plotly.tools.make_subplotsplotly.graph_objs.Pieと一緒に使用できるかどうかについて何も見つかりませんでした。私が理解しているように、これらのプロットにはx軸とy軸がないため、これは不可能です。 元のチュートリアル for Pieでは、domaindictを提供してサブプロットを実行します。 {'x': [0.0, 0.5], 'y': [0.0, 0.5]}は、プロットスペース全体の左下の象限の領域を定義します。ところで、このチュートリアルでは、ドーナツチャートでの注釈の配置に関するソリューションを差し控えています。これは、xanchor = 'center'およびyanchor = 'middle'パラメーターを指定することで実行できます。私は もう1つのチュートリアル を見つけました。これは非常に良い例です。ここにあなたの例でそれを示します:

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

p.s.申し訳ありませんが、後でy座標が下から始まることに気付いたので、レイアウトを垂直にミラーリングしました。また、隣接するサブプロットの間にスペースを追加することもできます(たとえば、レイアウトにわずかに小さい/大きい数値を指定します。たとえば、右隅に0.33ではなく0.31、左隅に0.33ではなく0.35)。

そして最後に、何らかの目的で円グラフを使用する前に、それらが本当に最良の選択肢であるかどうかを考え、 thisthis のような批評家を検討してください。

13
deeenes