如何使用Plotly在Python中将饼图绘制为具有自定义大小的子图
我一直试图在Jupyter笔记本(离线)中用Plotly(版本1.12.9)制作自定义尺寸的子图。 在Plotly网站上有很好的例子,但所有这些都是分散的情节。 我修改了其中一个,使其看起来像我想要的那个,它可以与散点图一起工作:
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)
并按预期工作:
但改变这样的饼图的痕迹:
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 []
只有分散的情节才能做到这一点? 在剧情介绍中我没有找到任何东西。
我最近也plotly.tools.make_subplots
了同样的问题,并没有发现我们是否可以通过plotly.tools.make_subplots
使用plotly.graph_objs.Pie
。 据我所知这是不可能的,因为这些地块没有x和y轴。 在Pie
的原始教程中,他们通过提供domain
字典来做子图,例如{'x': [0.0, 0.5], 'y': [0.0, 0.5]}
定义总绘图左下象限中的一个区域空间。 顺便说一句,本教程提供了圆环图的注释定位解决方案,可以通过提供xanchor = 'center'
和yanchor = 'middle'
参数来完成。 我找到了另外一个教程,它给出了一个非常好的例子。 在这里,我用你的例子展示它:
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)
ps对不起,我后来意识到y坐标是从底部开始的,所以我垂直镜像了你的布局。 你也可以在相邻的小插图之间增加空格(只给布局稍微更小/更大的数字,例如0.31代替右边的0.33,左边的0.35代替0.33)。
最后,在出于任何目的使用饼图之前,请考虑它们是否真的是最好的选择,并考虑像这样和这样的评论家。
链接地址: http://www.djcxy.com/p/93407.html上一篇: How to plot pie charts as subplots with custom size with Plotly in Python