Matplotlib在绘制各种科学图形方面功能强大,但占用的内存空间及计算资源也很大。如果绘制的图形不太复杂,小巧的Bokeh包就够用了。Bokeh的大小只有Matplotlib的五分之一,并且其所绘制的图形还是在网页中显示。
用Bokeh绘制基本图形
使用Bokeh绘图时,其大部分绘图功能是由bokeh.plotting子包中的figure和show模块完成的,所以我们一般至少要导入figure及show这两个模块:
from bokeh.plotting import figure, show
Bokeh绘制的图形是在浏览器中显示的,因此还需要先用figure()方法在浏览器中创建一个网页作为图形区域,语法为:
变量 = figure(width=绘图区宽度, height=绘图区高度)
例如:创建一个宽800像素、高400像素的绘图区,并把绘图区定义为变量p:
p = figure(width=800, height=400)
Bokeh也是主要用于绘制x、y坐标图,所以必须把x、y坐标存入列表中传给Bokeh,例如我们要绘制6个点:
listx = [1,5,7,9,13,16]
listy = [15,30,50,60,80,90]
bokeh.plotting绘制线形图的方法为line(),语法为:
绘图区变量.line(x坐标列表, y坐标列表)
例:用listx及listy绘制线形图:
p.line(listx, listy)
所绘的图形不会自动显示,需要调用show()方法打开浏览器显示绘图区,例:
show(p)
Bokeh会生成一个名为start_kernel.html的文件,然后打开该文件以显示图形。
如果需要自定义该文件的名称,可通过output_file()方法来指定输出文件的名称。例如,自定义网页名称为lineout.html:
output_file("lineout.html")
使用上述方法前,需导入output_file包。
line()方法的参数及图形
bokeh.ploting的line()方法中,除了x坐标列表及y坐标列表为必需参数外,其它主要可选参数如下:
- line_color:设置线条颜色。例如设置线条为红色:line_color=“red”。
- line_width:设置线条宽度。例如设置线条宽度为5:linewidth=5。
- line_alpha:设置线条透明度,0为完全透明,1.0位完全不透明。例如设置透明度为0.5:line_alpha=0.5。
- line_dash:设置虚线样式,其值是一个列表:第一个元素为显示点数,第二个元素为空白点数。例如:line_dash=[12,6]。
- legend:设置图例名称。例如设置图例名称为“年度”:legend=“年度”。
同时绘制多个图形
在一个坐标系中绘制多个图形时,我们一般会绘制完成所有图形后一并显示,例如绘制以下两个图形:
from bokeh.plotting import figure, show
p = figure(width=800, height=400)
listx1 = [1,5,7,9,13,16]
listy1 = [15,50,80,40,70,50]
p.line(listx1, listy1)
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,69]
p.line(listx2, listy2)
show(p)
图形设置
图形标题是通过figure()方法的title参数进行设置的,其语法为:
figure(title=图形标题)
例如设置图形标题为“统计图”:
p = figure(width=800,height=400,title="统计图")
系统还提供了设置字体大小及颜色功能,语法为:
p.title_text_color = 文字颜色
p.title_text_font_size = 字体大小
字体大小值需指定单位,例如设置文字颜色为蓝色,大小为20pt:
p.title_text_color = "blue"
p.title_text_font_size = "20pt"
图形x、y轴的标题是通过xaxis.axis_label属性及yaxis_axis_label属性来设置的,例如设置x轴标题为“年度”,y轴标题为“金额”:
p.xaxis.axis_label = "年度"
p.yaxis.axis_label = "金额"
我们还可以通过p.xaxis_axis_label_text_color及p.yaxis_axis_label_text_color这两个属性来设置x、y轴标题的颜色,例如设置x轴标题为“红色”,y轴标题为“绿色”:
p.xaxis_axis_label_text_color = "red"
p.yaxis_axis_label_text_color = "green"
案例:Bokeh线形图绘制
绘制两个线形图并设置相关图形属性。
from bokeh.plotting import figure, show
p = figure(width=800, height=400, title="零花钱统计")
# p.title_text_color = "green"
# p.title_text_font_size = "18pt"
p.xaxis.axis_label = "年龄"
p.xaxis.axis_label_text_color = "violet"
p.yaxis.axis_label = "零花钱"
p.yaxis.axis_label_text_color = "violet"
dashs = [12, 4]
listx1 = [1,5,7,9,13,16]
listy1 = [15,50,80,40,70,50]
p.line(listx1, listy1, line_width=4, line_color="red", line_alpha=0.3, line_dash=dashs, legend="男性")
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,60]
p.line(listx2, listy2, line_width=4, legend="女性")
show(p)