Adding labels in pie chart wedge in bokeh

前端 未结 1 827
滥情空心
滥情空心 2020-12-12 01:33

How do you add the information from a dataframe when creating a pie chart using bokeh?

I am using code from http://docs.bokeh.org/en/latest/docs/gallery/pie_chart.h

相关标签:
1条回答
  • 2020-12-12 02:02

    You're able to add text to a plot with a LableSet.

    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
    from bokeh.models import LabelSet, ColumnDataSource
    
    output_file("pie.html")
    
    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", x_range=(-0.5, 1.0))
    
    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)
    
    data["value"] = data['value'].astype(str)
    data["value"] = data["value"].str.pad(35, side = "left")
    source = ColumnDataSource(data)
    
    labels = LabelSet(x=0, y=1, text='value',
            angle=cumsum('angle', include_zero=True), source=source, render_mode='canvas')
    
    p.add_layout(labels)
    
    p.axis.axis_label=None
    p.axis.visible=False
    p.grid.grid_line_color = None
    
    show(p)
    

    0 讨论(0)
提交回复
热议问题