美文网首页呆鸟的Python数据分析数据可视化
python 数据可视化利器(bokeh、pyecharts)

python 数据可视化利器(bokeh、pyecharts)

作者: 苍简 | 来源:发表于2019-02-11 15:06 被阅读3次

    概述

    • 前言

    • bokeh

    • pyecharts

    bokeh

    这里展示一下常用的图表,详细的文档可查看(https://bokeh.pydata.org/en/latest/docs/user_guide/categorical.html

    条形图

    条形图
    from bokeh.io import show, output_file
    from bokeh.models import ColumnDataSource
    from bokeh.palettes import Spectral6
    from bokeh.plotting import figure
    output_file("colormapped_bars.html")#  配置输出文件名
    fruits = ['Apples', '魅族', 'OPPO', 'VIVO', '小米', '华为'] # 数据
    counts = [5, 3, 4, 2, 4, 6] # 数据
    source = ColumnDataSource(data=dict(fruits=fruits, counts=counts, color=Spectral6))
    p = figure(x_range=fruits, y_range=(0,9), plot_height=250, title="Fruit Counts",toolbar_location=None, tools="")# 条形图配置项
    p.vbar(x='fruits', top='counts', width=0.9, color='color', legend="fruits", source=source)p.xgrid.grid_line_color = None # 配置网格线颜色
    p.legend.orientation = "horizontal" # 图表方向为水平方向
    p.legend.location = "top_center"show(p) # 展示图表
    

    年度条形图

    年度条形图
    from bokeh.io import show, output_file
    from bokeh.models import ColumnDataSource, FactorRange
    from bokeh.plotting import figure
    output_file("bars.html")
    fruits = ['Apples', '魅族', 'OPPO', 'VIVO', '小米', '华为']
    years = ['2015', '2016', '2017']
    data = {'fruits': fruits,
            '2015': [2, 1, 4, 3, 2, 4],
            '2016': [5, 3, 3, 2, 4, 6],
            '2017': [3, 2, 4, 4, 5, 3]}
    x = [(fruit, year) for fruit in fruits for year in years]
    counts = sum(zip(data['2015'], data['2016'], data['2017']), ())  
    source = ColumnDataSource(data=dict(x=x, counts=counts))
    p = figure(x_range=FactorRange(*x), plot_height=250, title="Fruit Counts by Year",
               toolbar_location=None, tools="")
    p.vbar(x='x', top='counts', width=0.9, source=source)
    p.y_range.start = 0
    p.x_range.range_padding = 0.1
    p.xaxis.major_label_orientation = 1
    p.xgrid.grid_line_color = None
    show(p)
    

    饼图

    饼图
    from collections import Counter
    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
    output_file("pie.html")
    x = Counter({ # 数据与权重
        '中国': 157,
        '美国': 93,
        '日本': 89,
        '巴西': 63,
        '德国': 44,
        '印度': 42,
        '意大利': 40,
        '澳大利亚': 35,
        '法国': 31,
        '西班牙': 29
    })
    data = pd.DataFrame.from_dict(dict(x), orient='index').reset_index().rename(index=str, columns={0:'value', 'index':'country'})
    data['angle'] = data['value']/sum(x.values()) * 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)
    p.axis.axis_label=None
    p.axis.visible=False
    p.grid.grid_line_color = None # 网格线颜色
    show(p)                                                                                                             
    

    条形图

    年度水果进出口
    from bokeh.io import output_file, show
    from bokeh.models import ColumnDataSource
    from bokeh.palettes import GnBu3, OrRd3
    from bokeh.plotting import figure
    output_file("stacked_split.html")
    fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
    years = ["2015", "2016", "2017"]
    exports = {'fruits': fruits,
               '2015': [2, 1, 4, 3, 2, 4],
               '2016': [5, 3, 4, 2, 4, 6],
               '2017': [3, 2, 4, 4, 5, 3]}
    imports = {'fruits': fruits,
               '2015': [-1, 0, -1, -3, -2, -1],
               '2016': [-2, -1, -3, -1, -2, -2],
               '2017': [-1, -2, -1, 0, -2, -2]}
    p = figure(y_range=fruits, plot_height=250, x_range=(-16, 16), title="Fruit import/export, by year",
               toolbar_location=None)
    p.hbar_stack(years, y='fruits', height=0.9, color=GnBu3, source=ColumnDataSource(exports),
                 legend=["%s exports" % x for x in years])
    p.hbar_stack(years, y='fruits', height=0.9, color=OrRd3, source=ColumnDataSource(imports),
                 legend=["%s imports" % x for x in years])
    p.y_range.range_padding = 0.1
    p.ygrid.grid_line_color = None
    p.legend.location = "top_left"
    p.axis.minor_tick_line_color = None
    p.outline_line_color = None
    show(p)
    

    散点图

    散点图
    from bokeh.plotting import figure, output_file, show
    output_file("line.html")
    p = figure(plot_width=400, plot_height=400)
    p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
    show(p)
    

    六边形图

    六边形图
    import numpy as np
    from bokeh.io import output_file, show
    from bokeh.plotting import figure
    from bokeh.util.hex import axial_to_cartesian
    output_file("hex_coords.html")
    q = np.array([0, 0, 0, -1, -1, 1, 1])
    r = np.array([0, -1, 1, 0, 1, -1, 0])
    p = figure(plot_width=400, plot_height=400, toolbar_location=None) # 
    p.grid.visible = False # 配置网格是否可见
    p.hex_tile(q, r, size=1, fill_color=["firebrick"] * 3 + ["navy"] * 4,
               line_color="white", alpha=0.5)
    x, y = axial_to_cartesian(q, r, 1, "pointytop")
    p.text(x, y, text=["(%d, %d)" % (q, r) for (q, r) in zip(q, r)],
           text_baseline="middle", text_align="center")
    show(p)
    

    元素周期表

    元素周期表

    pyecharts

    pyecharts 也是一个比较常用的数据可视化库,用得也是比较多的了,是百度 echarts 库的 python 支持。这里也展示一下常用的图表。文档地址为(http://pyecharts.org/#/zh-cn/prepare?id=%E5%AE%89%E8%A3%85-pyecharts

    条形图

    条形图
    from pyecharts import Bar
    bar = Bar("我的第一个图表", "这里是副标题")
    bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
    # bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
    bar.render()    # 生成本地 HTML 文件
    

    散点图

    散点图
    from pyecharts import Polar
    import random
    data_1 = [(10, random.randint(1, 100)) for i in range(300)]
    data_2 = [(11, random.randint(1, 100)) for i in range(300)]
    polar = Polar("极坐标系-散点图示例", width=1200, height=600)
    polar.add("", data_1, type='scatter')
    polar.add("", data_2, type='scatter')
    polar.render()
    

    饼图

    饼图
    import random
    from pyecharts import Pie
    attr = ['A', 'B', 'C', 'D', 'E', 'F']
    pie = Pie("饼图示例", width=1000, height=600)
    pie.add(
        "",
        attr,
        [random.randint(0, 100) for _ in range(6)],
        radius=[50, 55],
        center=[25, 50],
        is_random=True,
    )
    pie.add(
        "",
        attr,
        [random.randint(20, 100) for _ in range(6)],
        radius=[0, 45],
        center=[25, 50],
        rosetype="area",
    )
    pie.add(
        "",
        attr,
        [random.randint(0, 100) for _ in range(6)],
        radius=[50, 55],
        center=[65, 50],
        is_random=True,
    )
    pie.add(
        "",
        attr,
        [random.randint(20, 100) for _ in range(6)],
        radius=[0, 45],
        center=[65, 50],
        rosetype="radius",
    )
    pie.render()
    

    词云

    词云
    from pyecharts import WordCloud
    name = ['Sam S Club'] # 词条
    value = [10000] # 权重
    wordcloud = WordCloud(width=1300, height=620)
    wordcloud.add("", name, value, word_size_range=[20, 100])
    wordcloud.render()
    

    树图

    树图

    转载自公众号「zone7」

    相关文章

      网友评论

        本文标题:python 数据可视化利器(bokeh、pyecharts)

        本文链接:https://www.haomeiwen.com/subject/yhsqeqtx.html