<返回更多

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

2020-06-26    
加入收藏

1 说明:

=====

1.1 Bokeh是专门针对Web浏览器的交互式、可视化Python绘图库。

1.2 Bokeh,可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js。

1.3 不需要使用JAVAscript。

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

2 官网:

======

https://docs.bokeh.org/en/latest/
https://github.com/bokeh/bokeh

3 安装:

=====

pip install bokeh
#本机安装
sudo pip3.8 install bokeh

4 环境:

=====

华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。

5 静态基本作图:

============

5.1 柱状图:

5.1.1 代码:

from bokeh.io import output_file, show
from bokeh.plotting import figure
#数据,支持中文
fruits = ['苹果', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]
#绘图
p = figure(x_range=fruits, plot_height=350, title="Fruit Counts",
           toolbar_location=None, tools="")
#柱状图,vbar是指垂直柱状图
p.vbar(x=fruits, top=counts, width=0.9)
#导出文件:文件名和指定路径,
#注意没有这一行,也会自动在代码所在的生成同名的html文件
#output_file("/home/xgj/Desktop/bokeh/bar_basic.html")
#展示图
show(p)

5.1.2 图:

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 


Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

5.2 折线图

5.2.1 代码:

from bokeh.io import output_file, show
from bokeh.plotting import figure
#数据,支持中文
fruits = ['苹果', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]
#绘图
p = figure(x_range=fruits, plot_height=350, title="Fruit Counts",
           toolbar_location=None, tools="")
#柱状图
p.line(x=fruits, y=counts)
#展示图
show(p)

5.2.2 图:

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

5.3 散点图:

5.3.1 代码:

#from bokeh.io import output_file, show
from bokeh.plotting import figure,output_file, show  #同上
#数据,支持中文
fruits = ['苹果', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]
#绘图
p = figure(x_range=fruits, plot_height=350, title="Fruit Counts",
           toolbar_location=None, tools="")
#柱状图
p.scatter(x=fruits, y=counts,size=20, fill_color="#74add1")
#展示图
show(p)

5.3.2 图:

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

===基本作图方便,优美;比matplotlib简单,暂时介绍到这里===

6 高级作图:

=========

6.1 js_events:调用js事件

6.2 代码:

import numpy as np
from bokeh import events
from bokeh.io import output_file, show
from bokeh.layouts import column, row
from bokeh.models import Button, CustomJS, Div
from bokeh.plotting import figure
#定义js和事件
def display_event(div, attributes=[]):
    style = 'float: left; clear: left; font-size: 13px'
    return CustomJS(args=dict(div=div), code="""
        var attrs = %s;
        var args = [];
        for (var i = 0; i < attrs.length; i++) {
            var val = JSON.stringify(cb_obj[attrs[i]], function(key, val) {
                return val.toFixed ? Number(val.toFixed(2)) : val;
            })
            args.push(attrs[i] + '=' + val)
        }
        var line = "<span style=%r><b>" + cb_obj.event_name + "</b>(" + args.join(", ") + ")</span>\n";
        var text = div.text.concat(line);
        var lines = text.split("\n")
        if (lines.length > 35)
            lines.shift();
        div.text = lines.join("\n");
    """ % (attributes, style))
#数据
N = 4000
x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = [
    "#%02x%02x%02x" % (int(r), int(g), 150) for r, g in zip(50+2*x, 30+2*y)
]

p = figure(tools="pan,wheel_zoom,zoom_in,zoom_out,reset,tap,lasso_select,box_select")
#调用散点图
p.scatter(x, y, radius=radii,
          fill_color=colors, fill_alpha=0.6,
          line_color=None)
#容器实例化,宽
div = Div(width=1000)
button = Button(label="Button", button_type="success", width=300)
layout = column(button, row(p, div))
#注册事件回调
#按钮事件
button.js_on_event(events.ButtonClick, display_event(div))
# LOD事件
p.js_on_event(events.LODStart, display_event(div))
p.js_on_event(events.LODEnd, display_event(div))
# Point events点事件
point_attributes = ['x','y','sx','sy']
p.js_on_event(events.Tap,       display_event(div, attributes=point_attributes))
p.js_on_event(events.DoubleTap, display_event(div, attributes=point_attributes))
p.js_on_event(events.Press,     display_event(div, attributes=point_attributes))
p.js_on_event(events.PressUp,   display_event(div, attributes=point_attributes))
# Mouse wheel event
p.js_on_event(events.MouseWheel, display_event(div,attributes=point_attributes+['delta']))
# Mouse move, enter and leave
p.js_on_event(events.MouseMove,  display_event(div, attributes=point_attributes))
p.js_on_event(events.MouseEnter, display_event(div, attributes=point_attributes))
p.js_on_event(events.MouseLeave, display_event(div, attributes=point_attributes))
# Pan events
pan_attributes = point_attributes + ['delta_x', 'delta_y']
p.js_on_event(events.Pan,      display_event(div, attributes=pan_attributes))
p.js_on_event(events.PanStart, display_event(div, attributes=point_attributes))
p.js_on_event(events.PanEnd,   display_event(div, attributes=point_attributes))
# Pinch events
pinch_attributes = point_attributes + ['scale']
p.js_on_event(events.Pinch,      display_event(div, attributes=pinch_attributes))
p.js_on_event(events.PinchStart, display_event(div, attributes=point_attributes))
p.js_on_event(events.PinchEnd,   display_event(div, attributes=point_attributes))
# Selection events
p.js_on_event(events.SelectionGeometry, display_event(div, attributes=['geometry', 'final']))
show(layout)

6.3 效果图:

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

6.4 图形总体

6.4.1 代码:

from bokeh.core.enums import MarkerType
from bokeh.layouts import row
from bokeh.models import ColumnDataSource, Panel, Tabs
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.iris import flowers

source = ColumnDataSource(flowers)
def make_plot(title, marker, backend):
    p = figure(title=title, plot_width=350, plot_height=350, output_backend=backend)
    p.scatter("petal_length", "petal_width", source=source,
              color='blue', fill_alpha=0.2, size=12, marker=marker)
    return p
tabs = []
for marker in MarkerType:
    p1 = make_plot(marker, marker, "canvas")
    p2 = make_plot(marker + ' SVG', marker, "svg")
    p3 = make_plot(marker + ' GL', marker, "webgl")
    tabs.Append(Panel(child=row(p1, p2, p3), title=marker))
#output_file("marker_compare.html", title="Compare regular, SVG, and WebGL markers")
show(Tabs(tabs=tabs))

6.4.2 效果图

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

===一般基本作图是小白和普通人需要的掌握的,下次重点讲===

7 机器学习:scikit-learn project

========================

7.1 代码:

import numpy as np
from sklearn import cluster, datasets
from sklearn.preprocessing import StandardScaler
from bokeh.layouts import column, row
from bokeh.plotting import figure, output_file, show
print("nn*** This example may take several seconds to run before displaying. ***nn")
print("nn*** 该示例展示前需要等待几秒. ***nn")
N = 50000
PLOT_SIZE = 400
# generate datasets.
np.random.seed(0)
noisy_circles = datasets.make_circles(n_samples=N, factor=.5, noise=.04)
noisy_moons = datasets.make_moons(n_samples=N, noise=.05)
centers = [(-2, 3), (2, 3), (-2, -3), (2, -3)]
blobs1 = datasets.make_blobs(centers=centers, n_samples=N, cluster_std=0.4, random_state=8)
blobs2 = datasets.make_blobs(centers=centers, n_samples=N, cluster_std=0.7, random_state=8)

colors = np.array([x for x in ('#00f', '#0f0', '#f00', '#0ff', '#f0f', '#ff0')])
colors = np.hstack([colors] * 20)
# create clustering algorithms
dbscan   = cluster.DBSCAN(eps=.2)
birch    = cluster.Birch(n_clusters=2)
means    = cluster.MiniBatchKMeans(n_clusters=2)
spectral = cluster.SpectralClustering(n_clusters=2, eigen_solver='arpack', affinity="nearest_neighbors")
affinity = cluster.AffinityPropagation(damping=.9, preference=-200)
# change here, to select clustering algorithm (note: spectral is slow)
algorithm = dbscan  # <- SELECT ALG
plots =[]
for dataset in (noisy_circles, noisy_moons, blobs1, blobs2):
    X, y = dataset
    X = StandardScaler().fit_transform(X)
    # predict cluster memberships
    algorithm.fit(X)
    if hasattr(algorithm, 'labels_'):
        y_pred = algorithm.labels_.astype(np.int)
    else:
        y_pred = algorithm.predict(X)

    p = figure(output_backend="webgl", title=algorithm.__class__.__name__,
               plot_width=PLOT_SIZE, plot_height=PLOT_SIZE)

    p.scatter(X[:, 0], X[:, 1], color=colors[y_pred].tolist(), alpha=0.1,)
    plots.append(p)
# generate layout for the plots
layout = column(row(plots[:2]), row(plots[2:]))
output_file("clustering.html", title="clustering with sklearn")
show(layout)

7.2 效果图:

Bokeh是一个专门针对Web浏览器的交互式可视化Python库

 

===自己整理并分享出来===

喜欢的就点赞、转发、评论、关注和收藏。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>