在Python中利用Bokeh創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化
在Python中利用Bokeh創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化
Bokeh 是一個(gè)用于創(chuàng)建交互式和動(dòng)態(tài)數(shù)據(jù)可視化的強(qiáng)大工具,它可以幫助你在 Python 中展示數(shù)據(jù)的變化趨勢(shì)、模式和關(guān)聯(lián)性。本文將介紹如何使用 Bokeh 庫(kù)在 Python 中創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化,并提供代碼示例以供參考。
Bokeh 簡(jiǎn)介
Bokeh 是一個(gè)開源的 Python 可視化庫(kù),它允許用戶創(chuàng)建交互式的圖表、地圖和儀表板。Bokeh 的一個(gè)主要優(yōu)勢(shì)是它能夠在瀏覽器中直接渲染圖形,使得生成的圖表可以輕松地與用戶交互,并支持大規(guī)模數(shù)據(jù)集的可視化。
安裝 Bokeh
首先,你需要安裝 Bokeh 庫(kù)。你可以通過(guò) pip 包管理器來(lái)安裝:
pip install bokeh
創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化
下面是一個(gè)簡(jiǎn)單的示例,演示了如何使用 Bokeh 創(chuàng)建一個(gè)動(dòng)態(tài)的折線圖,隨著時(shí)間的推移不斷更新數(shù)據(jù)。
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource
from random import randrange
import time
# 創(chuàng)建數(shù)據(jù)源
source = ColumnDataSource(data={'x': [], 'y': []})
# 創(chuàng)建繪圖對(duì)象
p = figure(plot_height=300, plot_width=800, title="動(dòng)態(tài)數(shù)據(jù)可視化",
x_axis_label='時(shí)間', y_axis_label='值')
# 添加線條
p.line(x='x', y='y', source=source, line_width=2)
# 更新數(shù)據(jù)的回調(diào)函數(shù)
def update():
new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
source.stream(new_data, rollover=200)
# 添加定時(shí)器,每秒更新一次數(shù)據(jù)
curdoc().add_periodic_callback(update, 1000)
curdoc().title = "動(dòng)態(tài)數(shù)據(jù)可視化示例"
# 顯示圖表
curdoc().add_root(p)在這個(gè)示例中,我們首先導(dǎo)入必要的模塊和函數(shù)。然后,我們創(chuàng)建了一個(gè)包含 x 和 y 數(shù)據(jù)的 ColumnDataSource 對(duì)象,該對(duì)象將用于在 Bokeh 圖表中更新數(shù)據(jù)。接著,我們創(chuàng)建了一個(gè)繪圖對(duì)象 p,設(shè)置了圖表的標(biāo)題和軸標(biāo)簽,并添加了一個(gè)折線圖。然后,我們定義了一個(gè) update() 函數(shù),該函數(shù)用于更新數(shù)據(jù)源中的數(shù)據(jù)。最后,我們使用 curdoc() 函數(shù)添加了一個(gè)定時(shí)器,以每秒更新一次數(shù)據(jù),并將圖表顯示在當(dāng)前文檔中。
運(yùn)行代碼
保存上述代碼到一個(gè) Python 文件中(例如 dynamic_visualization.py),然后在終端中運(yùn)行:
bokeh serve dynamic_visualization.py
然后,你可以在瀏覽器中訪問(wèn) http://localhost:5006/dynamic_visualization 查看動(dòng)態(tài)數(shù)據(jù)可視化效果。
通過(guò) Bokeh,你可以創(chuàng)建更復(fù)雜的動(dòng)態(tài)數(shù)據(jù)可視化,包括交互式控件、動(dòng)畫效果和更多可視化元素,以滿足不同需求。希望本文能幫助你入門 Bokeh,更好地利用 Python 進(jìn)行數(shù)據(jù)可視化工作。
自定義動(dòng)態(tài)數(shù)據(jù)可視化
Bokeh 不僅可以創(chuàng)建簡(jiǎn)單的動(dòng)態(tài)數(shù)據(jù)可視化,還可以根據(jù)需求進(jìn)行定制。下面我們將介紹如何添加交互式控件和自定義動(dòng)畫效果。
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button
from random import randrange
import time
# 創(chuàng)建數(shù)據(jù)源
source = ColumnDataSource(data={'x': [], 'y': []})
# 創(chuàng)建繪圖對(duì)象
p = figure(plot_height=300, plot_width=800, title="動(dòng)態(tài)數(shù)據(jù)可視化",
x_axis_label='時(shí)間', y_axis_label='值')
# 添加線條
line = p.line(x='x', y='y', source=source, line_width=2)
# 更新數(shù)據(jù)的回調(diào)函數(shù)
def update():
new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
source.stream(new_data, rollover=200)
# 添加定時(shí)器,每秒更新一次數(shù)據(jù)
curdoc().add_periodic_callback(update, 1000)
# 添加交互式按鈕
button = Button(label="暫停")
def pause():
if button.label == "暫停":
curdoc().remove_periodic_callback(update)
button.label = "繼續(xù)"
else:
curdoc().add_periodic_callback(update, 1000)
button.label = "暫停"
button.on_click(pause)
# 添加按鈕到文檔
curdoc().add_root(button)
curdoc().title = "動(dòng)態(tài)數(shù)據(jù)可視化示例"
# 顯示圖表
curdoc().add_root(p)在這個(gè)示例中,我們?cè)谠械膭?dòng)態(tài)數(shù)據(jù)可視化基礎(chǔ)上添加了一個(gè)交互式按鈕。當(dāng)點(diǎn)擊按鈕時(shí),圖表的更新動(dòng)作將會(huì)暫?;蚶^續(xù)。這是通過(guò)定義一個(gè) pause() 函數(shù),并將其綁定到按鈕的點(diǎn)擊事件上實(shí)現(xiàn)的。當(dāng)按鈕的標(biāo)簽為“暫停”時(shí),點(diǎn)擊按鈕將移除定時(shí)器回調(diào)函數(shù),使得數(shù)據(jù)更新暫停;當(dāng)按鈕的標(biāo)簽為“繼續(xù)”時(shí),點(diǎn)擊按鈕將重新添加定時(shí)器回調(diào)函數(shù),繼續(xù)數(shù)據(jù)更新。
通過(guò) Bokeh,你可以根據(jù)具體需求添加更多的交互式控件和自定義動(dòng)畫效果,以創(chuàng)建更豐富、更有趣的動(dòng)態(tài)數(shù)據(jù)可視化。希望本文能幫助你進(jìn)一步探索 Bokeh 庫(kù)的強(qiáng)大功能,為數(shù)據(jù)可視化工作增添更多樂(lè)趣和靈活性。
添加動(dòng)畫效果和定制控件
Bokeh 提供了豐富的工具和選項(xiàng),使得動(dòng)態(tài)數(shù)據(jù)可視化可以更加生動(dòng)和交互。下面我們將進(jìn)一步定制化動(dòng)態(tài)可視化,添加動(dòng)畫效果和定制控件。
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button, Slider
from random import randrange
import time
# 創(chuàng)建數(shù)據(jù)源
source = ColumnDataSource(data={'x': [], 'y': []})
# 創(chuàng)建繪圖對(duì)象
p = figure(plot_height=300, plot_width=800, title="動(dòng)態(tài)數(shù)據(jù)可視化",
x_axis_label='時(shí)間', y_axis_label='值')
# 添加線條
line = p.line(x='x', y='y', source=source, line_width=2)
# 更新數(shù)據(jù)的回調(diào)函數(shù)
def update():
new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
source.stream(new_data, rollover=200)
# 添加定時(shí)器,每秒更新一次數(shù)據(jù)
callback_id = curdoc().add_periodic_callback(update, 1000)
# 添加交互式按鈕
button = Button(label="暫停/繼續(xù)")
def pause_resume():
if button.label == "暫停":
curdoc().remove_periodic_callback(callback_id)
button.label = "繼續(xù)"
else:
callback_id = curdoc().add_periodic_callback(update, 1000)
button.label = "暫停"
button.on_click(pause_resume)
# 添加滑塊控件,用于調(diào)節(jié)更新頻率
slider = Slider(start=100, end=2000, value=1000, step=100, title="更新頻率 (毫秒)")
def update_interval(attrname, old, new):
curdoc().remove_periodic_callback(callback_id)
callback_id = curdoc().add_periodic_callback(update, slider.value)
slider.on_change('value', update_interval)
# 添加控件到文檔
curdoc().add_root(button)
curdoc().add_root(slider)
curdoc().title = "動(dòng)態(tài)數(shù)據(jù)可視化示例"
# 顯示圖表
curdoc().add_root(p)
在這個(gè)示例中,我們?cè)谠械膭?dòng)態(tài)數(shù)據(jù)可視化基礎(chǔ)上添加了一個(gè)滑塊控件,用于調(diào)節(jié)數(shù)據(jù)更新的頻率。當(dāng)滑塊的值發(fā)生變化時(shí),將會(huì)重新設(shè)置定時(shí)器的間隔時(shí)間,實(shí)現(xiàn)動(dòng)態(tài)更新頻率的調(diào)節(jié)。
通過(guò) Bokeh 的豐富功能和靈活性,你可以根據(jù)具體需求添加更多的動(dòng)畫效果和交互式控件,創(chuàng)建更具吸引力和實(shí)用性的動(dòng)態(tài)數(shù)據(jù)可視化。希望本文能夠激發(fā)你對(duì) Bokeh 庫(kù)的探索和創(chuàng)造力,為數(shù)據(jù)可視化領(lǐng)域帶來(lái)更多新的可能性。
添加更多數(shù)據(jù)可視化元素和交互式控件
Bokeh 不僅支持基本的圖形元素,還支持添加更多高級(jí)的數(shù)據(jù)可視化元素和交互式控件,使得可視化效果更加豐富和生動(dòng)。下面我們將進(jìn)一步定制動(dòng)態(tài)數(shù)據(jù)可視化,添加更多元素和控件。
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button, Slider, Select
from bokeh.layouts import column
from random import randrange
import time
# 創(chuàng)建數(shù)據(jù)源
source = ColumnDataSource(data={'x': [], 'y': [], 'color': []})
# 創(chuàng)建繪圖對(duì)象
p = figure(plot_height=300, plot_width=800, title="動(dòng)態(tài)數(shù)據(jù)可視化",
x_axis_label='時(shí)間', y_axis_label='值')
# 添加散點(diǎn)圖和線條
scatter = p.scatter(x='x', y='y', color='color', source=source, size=8, legend_label="數(shù)據(jù)點(diǎn)")
line = p.line(x='x', y='y', source=source, line_width=2, line_color='blue', legend_label="折線")
# 更新數(shù)據(jù)的回調(diào)函數(shù)
def update():
new_data = {'x': [time.time()], 'y': [randrange(1, 100)], 'color': ['red']}
source.stream(new_data, rollover=200)
# 添加定時(shí)器,每秒更新一次數(shù)據(jù)
callback_id = curdoc().add_periodic_callback(update, 1000)
# 添加交互式按鈕
button = Button(label="暫停/繼續(xù)")
def pause_resume():
if button.label == "暫停":
curdoc().remove_periodic_callback(callback_id)
button.label = "繼續(xù)"
else:
callback_id = curdoc().add_periodic_callback(update, 1000)
button.label = "暫停"
button.on_click(pause_resume)
# 添加滑塊控件,用于調(diào)節(jié)更新頻率
slider = Slider(start=100, end=2000, value=1000, step=100, title="更新頻率 (毫秒)")
def update_interval(attrname, old, new):
curdoc().remove_periodic_callback(callback_id)
callback_id = curdoc().add_periodic_callback(update, slider.value)
slider.on_change('value', update_interval)
# 添加下拉菜單控件,用于選擇數(shù)據(jù)點(diǎn)顏色
color_select = Select(title="數(shù)據(jù)點(diǎn)顏色:", value="red", options=["red", "blue", "green"])
def update_color(attrname, old, new):
source.data['color'] = [new]
color_select.on_change('value', update_color)
# 添加控件到布局
controls = column(button, slider, color_select)
layout = column(controls, p)
curdoc().add_root(layout)
curdoc().title = "動(dòng)態(tài)數(shù)據(jù)可視化示例"在這個(gè)示例中,我們?cè)谠械膭?dòng)態(tài)數(shù)據(jù)可視化基礎(chǔ)上添加了一個(gè)下拉菜單控件,用于選擇數(shù)據(jù)點(diǎn)的顏色。通過(guò)選擇不同的顏色,用戶可以更直觀地區(qū)分不同的數(shù)據(jù)點(diǎn)。
通過(guò) Bokeh 的強(qiáng)大功能和靈活性,你可以根據(jù)具體需求添加更多元素和控件,定制出更豐富、更具交互性的動(dòng)態(tài)數(shù)據(jù)可視化。希望本文能夠啟發(fā)你對(duì) Bokeh 庫(kù)的探索和創(chuàng)造力,為數(shù)據(jù)可視化領(lǐng)域帶來(lái)更多新的想法和實(shí)踐。
總結(jié)
在本文中,我們探討了如何利用 Bokeh 庫(kù)在 Python 中創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化。首先,我們介紹了 Bokeh 的基本概念和優(yōu)勢(shì),以及如何安裝 Bokeh 庫(kù)。然后,我們提供了幾個(gè)代碼示例,演示了如何創(chuàng)建簡(jiǎn)單的動(dòng)態(tài)折線圖,并添加了交互式控件,如按鈕和滑塊,以調(diào)節(jié)數(shù)據(jù)更新頻率。接著,我們進(jìn)一步定制了動(dòng)態(tài)可視化,添加了更多的元素和控件,如散點(diǎn)圖和下拉菜單,以實(shí)現(xiàn)更豐富的交互體驗(yàn)。
通過(guò) Bokeh,你可以輕松創(chuàng)建具有吸引力和實(shí)用性的動(dòng)態(tài)數(shù)據(jù)可視化,展示數(shù)據(jù)的變化趨勢(shì)和關(guān)聯(lián)性,同時(shí)為用戶提供交互式控件,使得用戶可以自定義數(shù)據(jù)的展示方式。希望本文能夠幫助你更好地利用 Bokeh 庫(kù)進(jìn)行數(shù)據(jù)可視化工作,提升數(shù)據(jù)分析和展示的效率和效果。
到此這篇關(guān)于在Python中利用Bokeh創(chuàng)建動(dòng)態(tài)數(shù)據(jù)可視化的文章就介紹到這了,更多相關(guān)Python動(dòng)態(tài)數(shù)據(jù)可視化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python反爬機(jī)制-驗(yàn)證碼功能的具體實(shí)現(xiàn)過(guò)程
Tesseract-OCR是一個(gè)免費(fèi)、開源的OCR引擎,通過(guò)該引擎可以識(shí)別圖片中的驗(yàn)證碼,這篇文章主要介紹了Python反爬機(jī)制-驗(yàn)證碼的示例代碼,需要的朋友可以參考下2022-02-02
利用django創(chuàng)建一個(gè)簡(jiǎn)易的博客網(wǎng)站的示例
這篇文章主要介紹了利用django創(chuàng)建一個(gè)簡(jiǎn)易的博客網(wǎng)站的示例,幫助大家更好的學(xué)習(xí)和使用django框架,感興趣的朋友可以了解下2020-09-09
Python函數(shù)命名空間和作用域(Local與Global)
這篇文章主要介紹了Python函數(shù)命名空間和作用域分別介紹Local與Global模式,內(nèi)容詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03
python輸入整條數(shù)據(jù)分割存入數(shù)組的方法
今天小編就為大家分享一篇python輸入整條數(shù)據(jù)分割存入數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
PyTorch實(shí)現(xiàn)聯(lián)邦學(xué)習(xí)的基本算法FedAvg
這篇文章主要為大家介紹了PyTorch實(shí)現(xiàn)聯(lián)邦學(xué)習(xí)的基本算法FedAvg,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Django框架實(shí)現(xiàn)的普通登錄案例【使用POST方法】
這篇文章主要介紹了Django框架實(shí)現(xiàn)的普通登錄案例,結(jié)合實(shí)例形式分析了Django框架使用POST方法進(jìn)行頁(yè)面登錄、校驗(yàn)等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05

