如何使用Bokeh创建饼图?

Mr_*_*ock 8 python bokeh

我想做的就是创建一个饼图.Bokeh文档涵盖了许多复杂的图表,包括圆环图,但它似乎没有涵盖饼图.

这有什么例子吗?

最终,图表需要嵌入到网页中,因此我需要利用Bokeh的html嵌入功能.

big*_*dot 10

下面的答案已经过时了.该Donut函数是bokeh.charts很久以前弃用和删除的旧API的一部分.对于任何现代版本的Bokeh(例如0.13或更新版本),您可以使用楔形字形创建饼图,如下所示:

from math import pi

import pandas as pd

from bokeh.io import output_file, show
from bokeh.palettes import Category20c
from bokeh.plotting import figure
from bokeh.transform import cumsum

x = { 'United States': 157, 'United Kingdom': 93, 'Japan': 89, 'China': 63,
    'Germany': 44, 'India': 42, 'Italy': 40, 'Australia': 35,
    'Brazil': 32, 'France': 31, 'Taiwan': 31, 'Spain': 29 }

data = pd.Series(x).reset_index(name='value').rename(columns={'index':'country'})
data['angle'] = data['value']/data['value'].sum() * 2*pi
data['color'] = Category20c[len(x)]

p = figure(plot_height=350, title="Pie Chart", toolbar_location=None,
        tools="hover", tooltips="@country: @value")

p.wedge(x=0, y=1, radius=0.4,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend='country', source=data)

show(p)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述




以下是现在的

使用bokeh.plotting界面的Bokeh 0.8.1示例:

from bokeh.plotting import *
from numpy import pi

# define starts/ends for wedges from percentages of a circle
percents = [0, 0.3, 0.4, 0.6, 0.9, 1]
starts = [p*2*pi for p in percents[:-1]]
ends = [p*2*pi for p in percents[1:]]

# a color for each pie piece
colors = ["red", "green", "blue", "orange", "yellow"]

p = figure(x_range=(-1,1), y_range=(-1,1))

p.wedge(x=0, y=0, radius=1, start_angle=starts, end_angle=ends, color=colors)

# display/save everythin  
output_file("pie.html")
show(p)
Run Code Online (Sandbox Code Playgroud)

Bokeh> 0.9将正确计算所有字形的边界区域,而不仅仅是"点状"标记字形,并且不需要明确设置这样的范围.

  • 标签有几种方法.您可以添加图例(https://github.com/bokeh/bokeh/blob/master/examples/plotting/file/legend.py),也可以使用图表上的`text`方法自行添加文本标签.设置轴标签的最简单方法是将"x_axis_label"传递给调用`figure` (2认同)

Vin*_*ceP 9

一个bokeh.charts图表会返回一个简单的饼图,如果你输入一个熊猫系列,而不是一个数据帧.它也会显示标签!

from bokeh.charts import Donut, show
import pandas as pd
data = pd.Series([0.15,0.4,0.7,1.0], index = list('abcd'))
pie_chart = Donut(data)
show(pie_chart)
Run Code Online (Sandbox Code Playgroud)

甜甜圈图

  • 在Bokeh 0.12.10中,bokeh.charts已经从散景核心迁移出来.它现在由http://holoviews.org/支持 (2认同)