python绘制饼图标题字体大小_如何在Python中使用Plotly将饼图绘制为具有自定义大小的子图...

I've been trying to make a grid of subplots with custom size with Plotly(version 1.12.9) in Jupyter notebook(offline). There is nice examples in the Plotly website but all of them are with scattered plots. I modified one of them to make it look like the one I want to and it works with scatter plots:

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)

And works as expected:

But changing the traces for pie charts like this:

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)

Just throws this error:

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 `.help('attribute')` on any of the above.

'' is the object at []

Is only possible to do this with scattered plots? I didn't find anything in the plotly documentation.

解决方案

I recently struggled with the same problem, and found nothing about whether we can use plotly.tools.make_subplots with plotly.graph_objs.Pie. As I understand this is not possible because these plots have no x and y axes. In the original tutorial for Pie, they do subplots with providing a domain dict, e.g. {'x': [0.0, 0.5], 'y': [0.0, 0.5]} defines an area in the bottom left quadrant of the total plotting space. Btw, this tutorial witholds the solution for annotation positioning at donut charts, what can be done with providing xanchor = 'center' and yanchor = 'middle' parameters. I found one other tutorial which gives a very nice example. Here I show it with your example:

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)

p.s. Sorry, I realized afterwards that y coordinates start from the bottom, so I mirrored your layout vertically. Also you may want to add space between adjacent subplots (just give slightly smaller/greater numbers in layout, e.g. 0.31 instead 0.33 at right, and 0.35 instead of 0.33 at left corners).

And finally, before using pie charts for any purpose, please think about if they are really the best option, and consider critics like this and this.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值