• 【数据科学】Bokeh[使用Bokeh绘图、数据、绘图、渲染器与自定义可视化、输出与导出、显示或保存图形]



    一、使用 Bokeh 绘图

      BokehPython 的交互式可视图库,用于 生成在浏览器里显示的大规模数据集高性能可视图
    在这里插入图片描述
      Bokeh 的中间层通用 bokeh.plotting 界面主要为两个组件:数据图示符
    在这里插入图片描述
      使用 bokeh.plotting 界面绘图的基本步骤为
      1. 准备数据
      Python列表、Numpy数组、Pandas数据框或其它序列值
      2. 准备数据创建图形。
      3. 为数据添加渲染器,自定义可视化图
      4. 指定生成的输出类型
      5. 显示视图或保存结果

    >>> from bokeh.plotting import figure
    >>> from bokeh.io import output_file, show
    >>> x = [1, 2, 3, 4, 5]
    >>> y = [6, 7, 2, 4, 5]
    >>> p = figure(title="simple line example", x_axis_label='x', y_axis_label='y')
    >>> p.line(x, y, legend="Temp.", line_width=2)
    >>> output_file("lines.html")
    >>> show(p)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、数据

      通常,Bokeh 在后台把数据转换为列数据源,不过也可 手动转换

    >>> import numpy as np
    >>> import pandas as pd
    # 首先需要导入必要的库(NumPy和Pandas)
    >>> df = pd.DataFrame(np.array([[33.9,4,65, 'US'],[32.4,4,66, 'Asia'],[21.4,4,109, 'Europe']]), columns=['mpg','cyl', 'hp', 'origin'],index=['Toyota', 'Fiat', 'Volvo'])
    
    • 1
    • 2
    • 3
    • 4
    >>> from bokeh.models import ColumnDataSource
    # 然后创建一个包含数据的数据框(DataFrame)
    >>> cds_df = ColumnDataSource(df)
    # 通过将数据框传递给ColumnDataSource函数,将数据框转换为列数据源对象
    
    • 1
    • 2
    • 3
    • 4

      上述我们使用NumPyPandas创建了一个包含汽车相关数据的数据框。然后,通过将数据框传递给ColumnDataSource函数,将数据框转换为列数据源对象cds_df。现在,可以使用该列数据源对象来创建Bokeh可视化图形,并 将其与其他Bokeh组件(如图表、图形等)一起使用


    三、绘图

      先使用Bokeh创建三个图形对象

    >>> from bokeh.plotting import figure
    >>> p1 = figure(plot_width=300,tools='pan,box_zoom')
    >>> p2 = figure(plot_width=300, plot_height=300, x_range=(0, 8), y_range=(0, 8))
    >>> p3 = figure() 
    
    • 1
    • 2
    • 3
    • 4

      通过这些图形对象,我们就可以 使用Bokeh的其他函数和方法 添加数据、图表类型等内容,并进行数据可视化


    四、渲染器与自定义可视化

    4.1 图示符

    4.1.1 散点标记

      使用Bokeh向图形对象 添加散点图和方形图

    >>> p1.circle(np.array([1,2,3]), np.array([3,2,1]), fill_color='white')
    >>> p2.square(np.array([1.5,3.5,5.5]), [1,4,3], 
    
    • 1
    • 2

    在这里插入图片描述


    4.1.2 线型图示符

      使用Bokeh向图形对象 添加线段图

    >>> p1.line([1,2,3,4], [3,4,5,6], line_width=2)
    # 使用p1.line()函数将一条直线段添加到图形中。这里传入的参数为x坐标和y坐标的数组:[1,2,3,4]和[3,4,5,6]
    # 通过设置line_width=2,将线段的宽度设置为2个像素
    >>> p2.multi_line(pd.DataFrame([[1,2,3],[5,6,7]]),pd.DataFrame([[3,4,5],[3,2,1]]),color="blue")
    # 使用p2.multi_line()函数将多条线段组成的线段图添加到图形中。这里传入的参数为两个DataFrame对象:第一个DataFrame对象包含x坐标的数据,第二个DataFrame对象包含y坐标的数据
    # x坐标的DataFrame为pd.DataFrame([[1,2,3],[5,6,7]]),y坐标的DataFrame为pd.DataFrame([[3,4,5],[3,2,1]])。通过设置color="blue",将线段的颜色设置为蓝色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述


    4.2 自定义图示符

    4.2.1 图示符选择与反选

      使用Bokeh创建一个图形对象,并向图形中添加一个散点图

    >>> p = figure(tools='box_select')
    >>> p.circle('mpg', 'cyl', source=cds_df, selection_color='red', nonselection_alpha=0.1)
    
    • 1
    • 2

      以上我们创建一个拥有框选工具的图形对象,并向图形中添加一个散点图。散点图的x坐标为mpg,y坐标为cyl。散点图的数据源为名为cds_df的ColumnDataSource对象。所选散点的颜色为红色,未选中散点的透明度为0.1。
    在这里插入图片描述


    4.2.2 绘图区内部

      使用 Bokeh 向图形对象添加一个悬停工具

    >>> from bokeh.models import HoverTool
    # 首先,从 bokeh.models 模块导入 HoverTool 类
    >>> hover = HoverTool(tooltips=None, mode='vline') 
    # 使用 HoverTool() 函数创建一个悬停工具对象,并将其赋值给变量 hover
    # 通过设置 tooltips=None 将工具提示设置为空,即不显示任何工具提示信息。通过设置 mode='vline' 将悬停模式设置为垂直线模式
    >>>> p3.add_tools(hover)
    # 使用 add_tools() 方法将悬停工具添加到图形对象 p3 中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

      通过执行上述代码,我们将创建一个悬停工具对象,并将其添加到图形对象 p3 中悬停工具将以垂直线模式显示,并且不显示任何工具提示信息
    在这里插入图片描述


    4.2.3 色彩表

    >>> from bokeh.models import CategoricalColorMapper
    >>> color_mapper = CategoricalColorMapper(factors=['US', 'Asia', 'Europe'],palette=['blue', 'red', 'green'])
    >>> p3.circle('mpg', 'cyl', source=cds_df,color=dict(field='origin', transform=color_mapper),legend='Origin')
    
    • 1
    • 2
    • 3

      通过执行上述代码,将 创建一个散点图,并使用 CategoricalColorMapper 将不同类别的数据点映射为不同的颜色。颜色映射会根据 ‘origin’ 字段的值进行映射,并使用图例显示各个类别。
    在这里插入图片描述


    4.3 图例位置

    4.3.1 绘图区内部

    >>> p.legend.location = 'bottom_left'
    
    • 1

    4.3.2 绘图区外部

    >>> from bokeh.models import Legend
    >>> r1 = p2.asterisk(np.array([1,2,3]), np.array([3,2,1])
    >>> r2 = p2.line([1,2,3,4], [3,4,5,6])
    >>> legend = Legend(items=[("One" ,[p1, r1]),("Two",[r2])], 
     location=(0, -30))
    >>> p.add_layout(legend, 'right')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.4 图例方向

    >>> p.legend.orientation = "horizontal"
    >>> p.legend.orientation = "vertical"
    
    • 1
    • 2

    4.5 图例背景与边框

    >>> p.legend.border_line_color = "navy"
    >>> p.legend.background_fill_color = "white"
    
    • 1
    • 2

    4.6 行列布局

    4.6.1 行

    >>> from bokeh.layouts import row
    >>> layout = row(p1,p2,p3)
    
    • 1
    • 2

    4.6.2 列

    >>> from bokeh.layouts import columns
    >>> layout = column(p1,p2,p3)
    
    • 1
    • 2

    4.6.3 行列嵌套

    >>>layout = row(column(p1,p2), p3)
    
    • 1

    4.7 栅格布局

    >>> from bokeh.layouts import gridplot
    >>> row1 = [p1,p2]
    >>> row2 = [p3]
    >>> layout = gridplot([[p1,p2],[p3]])
    
    • 1
    • 2
    • 3
    • 4

    4.8 标签布局

    >>> from bokeh.models.widgets import Panel, Tabs
    >>> tab1 = Panel(child=p1, title="tab1")
    >>> tab2 = Panel(child=p2, title="tab2")
    >>> layout = Tabs(tabs=[tab1, tab2])
    
    • 1
    • 2
    • 3
    • 4

    4.9 链接图

    4.9.1 链接坐标轴

    >>> p2.x_range = p1.x_range
    >>> p2.y_range = p1.y_range
    
    • 1
    • 2

    4.9.2 链接刷

    >>> p4 = figure(plot_width = 100, tools='box_select,lasso_select')
    >>> p4.circle('mpg', 'cyl', source=cds_df)
    >>> p5 = figure(plot_width = 200, tools='box_select,lasso_select')
    >>> p5.circle('mpg', 'hp', source=cds_df)
    >>> layout = row(p4,p5)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    五、输出与导出

    5.1 Notebook

      使用 Bokeh 在Jupyter Notebook中进行输出。

    >>> from bokeh.io import output_notebook, show
    # 从 bokeh.io 模块导入 output_notebook 和 show 函数
    >>> output_notebook()
    # 用 output_notebook() 函数将 Bokeh 的输出设置为在 Jupyter Notebook 中显示。这样可以确保图形将直接嵌入到笔记本中,并且可以在笔记本中进行交互和查看
    
    • 1
    • 2
    • 3
    • 4

      Bokeh 图形将在 Jupyter Notebook 中嵌入的方式进行显示,并且可以在笔记本中进行交互和查看。


    5.2 HTML

    5.2.1 脱机HTML

      使用 Bokeh 的 file_html 函数 将图形转换为 HTML 文件

    >>> from bokeh.embed import file_html
    >>> from bokeh.resources import CDN 
    >>> html = file_html(p, CDN, "my_plot")
    
    • 1
    • 2
    • 3

      通过执行上述代码,p 图形对象将被转换为一个包含 HTML 代码的字符串。这个 HTML 代码可以保存到一个文件中,或者集成到网页中,以显示和交互 Bokeh 图形

    >>> from bokeh.io import output_file, show
    >>> output_file('my_bar_chart.html', mode='cdn')
    
    • 1
    • 2

    5.2.2 组件

      使用 Bokeh 的 components 函数 将图形转换为 JavaScript 脚本和 HTML 分隔

    >>> from bokeh.embed import components
    >>> script, div = components(p)
    
    • 1
    • 2

    5.3 PNG

      使用 Bokeh 的 export_png 函数 将图形保存为 PNG 格式的图片文件

    >>> from bokeh.io import export_png
    >>> export_png(p, filename="plot.png")
    
    • 1
    • 2

      图形对象 p 将保存为一个名为 “plot.png” 的 PNG 图片文件。该文件将被保存在当前工作目录或指定的路径中,可以通过指定不同的文件名和路径来更改保存的位置和名称


    5.4 SVG

      使用 Bokeh 的 export_svgs 函数 将图形保存为 SVG 格式的矢量图文件

    >>> from bokeh.io import export_svgs
    >>> p.output_backend = "svg"
    >>> export_svgs(p, filename="plot.svg")
    
    • 1
    • 2
    • 3

      图形对象 p 将保存为一个名为 “plot.svg” 的 SVG 格式的矢量图文件。该文件将被保存在当前工作目录或指定的路径中,可以通过指定不同的文件名和路径来更改保存的位置和名称。如果图形非常复杂,可能会生成多个 SVG 文件。


    六、显示或保存图形

      可以使用 Bokeh 的 show 函数save 函数 显示和保存图形对象 p1 和 layout

    >>> show(p1) >>> show(layout) 
    >>> save(p1) >>> save(layout)
    
    • 1
    • 2
  • 相关阅读:
    数据的内存分布笔记总结
    如何在业务数据分析过程中应用“机器学习”技术
    1369. 获取最近第二次的活动
    动态规划求股票买入、卖出最大收益 java 实现( 最多可进行 1 次 “买入 ==> 卖出“ 操作 )
    JMeter VS RunnerGo :两大主流性能测试工具对比
    2016年亚太杯APMCM数学建模大赛B题化学元素对变形钢筋性能的影响求解全过程文档及程序
    【Python深度学习】目标检测和语义分割的区别
    一篇了解如何优雅地处理重复请求
    模拟京东快递单号查询 练习
    Java学习—线程的创建
  • 原文地址:https://blog.csdn.net/m0_65748531/article/details/132844405