Bokeh可视化库基础教程:线条与曲线绘制全解析
概述
Bokeh是一个强大的Python交互式可视化库,它提供了丰富的图形绘制功能。本文将深入讲解Bokeh中各种线条和曲线的绘制方法,帮助开发者掌握数据可视化的基础技能。
基础线条绘制
单线绘制
在Bokeh中绘制单条线是最基础的操作,使用line()
方法即可实现:
from bokeh.plotting import figure, show
# 创建绘图对象
p = figure(width=400, height=400)
# 添加单条线
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)
show(p)
这种方法接受两个一维数组作为x和y坐标点,Bokeh会自动将这些点用直线段连接起来。
阶梯线绘制
当需要展示离散数据变化时,阶梯线比普通连线更合适:
p.step([1, 2, 3, 4, 5], [6, 7, 2, 4, 5],
mode="before", line_width=2)
mode
参数有三种选项:
- "before":阶梯变化发生在x坐标之前
- "after":阶梯变化发生在x坐标之后
- "center":阶梯变化发生在x坐标中间
高级线条绘制
多线绘制
Bokeh支持一次性绘制多条线,使用multi_line()
方法:
p.multi_line([[1, 2, 3], [4, 5, 6]],
[[6, 7, 2], [3, 6, 5]],
color=["firebrick", "navy"],
alpha=[0.8, 0.3],
line_width=4)
注意:multi_line()
接受的是列表的列表,每个子列表代表一条线的坐标点。
处理缺失数据
在实际数据可视化中,经常会遇到数据缺失的情况。Bokeh可以正确处理NaN值:
from math import nan
p.line([1, 2, 3, nan, 5],
[6, 7, 2, 4, nan],
line_width=2)
重要提示:必须使用math.nan
或numpy.nan
,不能使用Python的None
,因为None
会被解释为0。
特殊线条类型
线段绘制
使用segment()
方法可以绘制独立的线段:
p.segment(x0=[1, 2, 3], y0=[1, 2, 3],
x1=[1.5, 2.5, 3.5], y1=[1.2, 2.5, 3.9],
color="olive", line_width=3)
射线绘制
ray()
方法可以绘制从某点出发的射线:
p.ray(x=[1, 2, 3], y=[1, 2, 3],
length=45, angle=[45, -30, 60],
angle_units="deg",
color="red", line_width=2)
设置length=0
可以创建无限延伸的射线。
跨度线
水平或垂直的无限延伸线可以使用hspan()
和vspan()
:
p.hspan(y=[1, 2, 3],
line_width=[1, 2, 3],
color=["red", "green", "blue"])
曲线绘制
圆弧绘制
Bokeh支持绘制圆弧:
p.arc(x=3, y=3, radius=2,
start_angle=0.6, end_angle=4.8,
color="navy", line_width=3)
通过direction
参数可以控制绘制方向:"clock"为顺时针,"anticlock"为逆时针。
参数化曲线
Bokeh还支持绘制更复杂的参数化曲线:
# 二次贝塞尔曲线
p.quadratic(x0=[1], y0=[1],
x1=[4], y1=[4],
cx=[2], cy=[3],
line_width=2)
# 三次贝塞尔曲线
p.bezier(x0=[1], y0=[1],
x1=[4], y1=[4],
cx0=[2], cy0=[3],
cx1=[3], cy1=[2],
line_width=2)
实用技巧
-
组合图形:可以在同一图表中组合多种图形元素
p.line(x, y1, line_color="blue") p.circle(x, y2, size=8, fill_color="red")
-
堆叠线图:使用
vline_stack()
或hline_stack()
可以方便地创建堆叠线图 -
性能优化:当数据量大时,考虑使用
ColumnDataSource
来提高性能
通过掌握这些线条和曲线的绘制方法,您已经能够使用Bokeh创建丰富多样的数据可视化图表。在实际应用中,可以根据数据特点选择合适的图形类型,并通过调整各种参数来优化视觉效果。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考