本章节学习Bokeh的基本操作,Bokeh是一款基于Web的绘图工具库,其会出的图像保存方式以html文件为主,其是一款交互式的可视化Python库,其特点如下:
- 专门针对Web浏览器的交互式、可视化Python绘图库;
- 可以做出D3.js简洁漂亮的交互可视化效果,但其难度低于D3.js;
- 独立的HTML文档或服务端程序;
- 可以处理大量、动态或数据流;
- 支持Python、R、Scala等语言;
- 无需使用JavaScript
概念性的东西无需多讲,直接看代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#不发出警告
import warnings
warnings.filterwarnings('ignore')
from bokeh.plotting import figure, show
#导入图表绘制、图表展示模块
from bokeh.io import output_notebook
#导入notebook绘图模块
output_notebook() #选择以notebook的形式输出
p = figure(plot_width = 400, plot_height = 400)
#创建图表,设置宽度和高度
p.circle([1, 2, 3, 4, 5], [3, 5, 4, 2, 6], color = 'gray', size = 20)
#创建一个圆形散点图
show(p)
#绘图
运行结果图
图标的输出形式
事实上Bokeh主流输出方式并不是notebook中,其更多的是生成一个HTML网页,代码如下:
from bokeh.plotting import figure, show, output_file
#导入图表绘制、图表展示模块
import os
os.chdir('C:/Users/RaingEye/Desktop/Python数据分析师微专业/数据表达逻辑:结果输出及内容美化/Python交互图标可视化:Bokeh/')
#创建工作目录
output_file('line.html')
#notebook绘图命令,创建html文件
#运行后会弹出html窗口
p = figure(plot_width = 400, plot_height = 400) #创建图表,设置宽度、高度
p.circle([1, 2, 3, 4, 5], [4, 5, 3, 2, 1], size = 20, color = 'b')
show(p)
结果:line.html
标题的详细设置
df = pd.DataFrame(np.random.randn(100, 2), columns=['A', 'B'])
df
p = figure(plot_width = 600,plot_height = 400, #plot_widht和plot_height分别设置图标的宽度和高度
tools = 'pan, wheel_zoom,save, reset, help', #设置工具栏,默认全部显示
toolbar_location = 'above', #工具栏位置:“above”,“below”,“left”, 'right'
x_axis_label = 'A', y_axis_label = 'B', #设置x,y轴的标签,可支持中文
x_range = [-3, 3], y_range = [-3, 3], #x轴、y轴的范围
title = '测试图表' #设置图表title
)
p.title.text_color = 'white'
p.title.text_font = 'times'
p.title.text_font_style = 'italic'
p.title.background_fill_color = 'black'
#设置标题的颜色,字体,风格,背景颜色
p.circle(df['A'], df['B'], size = 5, color = 'blue')
show(p)
#创建散点图
#这里.circle是figure的一个绘图方法
Bokeh也有很多自己的参数,例如:
plot_widht、plot_height:分别设置图表的宽度和高度
tools:设置工具栏,如上图右上角的五个工具栏,其默认全部显示
toolbar_location:设置工具栏的位置,“above”,“below”,“left”, ‘right’分别代表上下左右
x_axis_label,y_axis_label:设置x,y轴的标签,可支持中文
x_range,y_range:设置x,y轴的数据范围
title.text_color、title.text_font、title.text_font_style、title.background_fill_color:分别设置标题的颜色、字体、风格和背景颜色等
tool参考文档:https://bokeh.pydata.org/en/latest/docs/user_guide/tools.html
图表颜色设置
#颜色设置
p = figure(plot_width = 600, plot_height = 400)
p.circle(df.index, df['A'], color = 'red', size = 10)
p.circle(df.index, df['B'], color = 'blue', size = 10)
show(p)
# 颜色设置
# ① 147个CSS颜色,参考网址:http://www.colors.commutercreative.com/grid/
# ② RGB颜色值,参考网址:https://coolors.co/87f1ff-c0f5fa-bd8b9c-af125a-582b11
在Bokeh中,颜色设置可以有两种,分别是147个CSS颜色和RGB颜色,如上代码所示,具体颜色可以参考下面两个网站:
147个CSS颜色,参考网址:http://www.colors.commutercreative.com/grid/
RGB颜色值,参考网址:https://coolors.co/87f1ff-c0f5fa-bd8b9c-af125a-582b11
图表边框设置
#图表边框线颜色设置
p = figure(plot_width = 600, plot_height = 400)
p.circle(df.index, df['A'], color = 'red', size = 10)
p.circle(df.index, df['B'], color = 'blue', size = 10)
#绘制散点图
p.outline_line_width = 7 #边框线宽
p.outline_line_alpha = 0.5 #边框线透明度
p.outline_line_color = 'navy' #边线框的颜色
#设置图表眼边框
show(p)
Bokeh对于图表边框的样式也可以进行细化的设置,参数如下:
outline_line_width :边框线宽
outline_line_alpha:边框线透明度
outline_line_color :边线框的颜色,可以设置147个CSS颜色
图表绘图空间背景设置
p = figure(plot_width = 600, plot_height = 400)
p.circle(df.index, df['A'], size = 10, color = 'red')
p.circle(df.index, df['B'], size = 10, color = 'green')
#绘制散点图
p.background_fill_color = 'beige' #图表的背景颜色
p.background_fill_alpha = 0.7 #图表背景颜色的透明度
#背景设置参数
show(p)
外边界背景设置
# 设置外边界背景
p = figure(plot_width=600, plot_height=400)
p.circle(df.index, df['A'], color = 'green', size=10, alpha=0.5)
p.circle(df.index, df['B'], color = '#FF0000', size=10, alpha=0.5)
# 绘制散点图
p.border_fill_color = 'whitesmoke' #外边界背景颜色
p.border_fill_alpha = 0.5 #外边界背景透明度
p.min_border_left = 80 #外边界背景 - 左边宽度
p.min_border_right = 80 #外边界背景 - 右边宽度
p.min_border_bottom = 10 #外边界背景 - 下宽度
p.min_border_top = 10 #外边界背景 - 上宽度
show(p)
轴线设置
#Axes - 轴线设置
#轴线标签、轴线线宽、轴线颜色
#字体颜色、字体角度
p = figure(plot_width = 600, plot_height = 400)
p.circle([1,2,3,4,5], [2,4,8,2,9], size = 20, color= 'red')
#绘制散点图
p.xaxis.axis_label = 'Temp'
p.xaxis.axis_line_width = 3
p.xaxis.axis_line_color = 'red'
p.xaxis.axis_line_dash = [6, 4] #虚线比例
#设置x轴线:标签、线宽、轴线颜色、虚线
p.yaxis.axis_label = 'Pressure'
p.yaxis.axis_line_width = 3
p.yaxis.major_label_text_color = 'green'
p.yaxis.major_label_orientation = 'vertical'
#设置y轴:标签、字体颜色、字体角度
p.axis.minor_tick_in = 5 #刻度往绘图区域内延伸长度
p.axis.minor_tick_out = 3 #刻度往绘图区域外延伸长度
#设置刻度
p.xaxis.bounds = (2, 4)
#设置轴线范围
show(p)
轴线标签设置
# Axes - 轴线设置
# 标签设置
p = figure(plot_width=400, plot_height=400)
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
p.xaxis.axis_label = 'Lot Number'
p.xaxis.axis_label_text_color = '#aa6666'
p.xaxis.axis_label_standoff = 30
#设置标签名称、字体颜色、偏移距离
p.yaxis.axis_label = 'Bin Count'
p.yaxis.axis_label_text_font_style = 'italic'
#设置标签名称、字体
show(p)
格网设置Grid
线型类型
# Grid - 格网设置
# 线型设置
p = figure(plot_width=600, plot_height=400)
p.circle(df.index, df['A'], color = 'green', size=10, alpha=0.5)
p.circle(df.index, df['B'], color = '#FF0000', size=10, alpha=0.5)
# 绘制散点图
#设置x轴线的颜色
p.xgrid.grid_line_color = None #为None时,颜色不显示
#设置y轴线的颜色
p.ygrid.grid_line_alpha = 0.7
p.ygrid.grid_line_dash = [6, 4]
#设置透明度,须先设置
#dash → 通过设置间隔来做虚线
p.xgrid.minor_grid_line_color = 'navy'
p.xgrid.minor_grid_line_alpha = 0.4
#minor_line设置次轴线,即下方紫灰色的竖线
show(p)
颜色填充
# Grid - 格网设置
# 颜色填充
p = figure(plot_width=600, plot_height=400)
p.circle(df.index, df['A'], color = 'green', size=10, alpha=0.5)
p.circle(df.index, df['B'], color = '#FF0000', size=10, alpha=0.5)
# 绘制散点图
p.xgrid.grid_line_color = None
#设置x轴线不显示
p.ygrid.band_fill_color = 'navy'
p.ygrid.band_fill_alpha = 0.1
#设置颜色填充,及透明度
p.grid.bounds = (-1, 1)
#设置填充边界
show(p)
图例设置
# Legend - 图例设置
# 设置方法 → 在绘图时设置图例名称 + 设置图例位置
p = figure(plot_width = 600, plot_height = 400)
#创建图表
x = np.linspace(0, 4*np.pi, 100)
y = np.sin(x)
#设置x, y
p.circle(x, y, legend = "sin(x)")
#绘制散点图
p.line(x, y, legend = 'sin(x)')
#绘制曲线图(连线图,将点连成线)
#绘制line1,设置图例名称
p.line(x, 2*y, legend = '2*sin(x)', line_dash = [4, 4], line_color = "orange", line_width = 2)
#绘制line2,设置图例名称
p.square(x, 3*y, legend = "3*sin(x)", fill_color = None, line_color= "green")
#square为方形散点图
p.line(x, 3*y, legend = "3*sin(x)", line_color = 'green')
#绘制line3,设置图例名称
p.legend.location = 'bottom_left'
# 设置图例位置:"top_left"、"top_center"、"top_right" (the default)、"center_right"、"bottom_right"、"bottom_center"
# "bottom_left"、"center_left"、"center"
p.legend.orientation = 'vertical'
# 设置图例排列方向:"vertical" (默认)or "horizontal"
p.legend.label_text_font = "times"
p.legend.label_text_font_style = 'italic' #斜体
p.legend.label_text_color = 'navy'
p.legend.label_text_font_size = "12pt"
#设置图例字体、风格、颜色、大小
p.legend.border_line_width = 3
p.legend.border_line_color = "navy"
p.legend.border_line_alpha = 0.5
#设置图例边框:跨度、颜色、透明度
p.legend.background_fill_color = 'gray'
p.legend.background_fill_alpha = 0.2
#设置图例背景颜色和透明度
show(p)
本章节总结
Line Properties → 线设置
Fill Properties → 填充设置
Text Properties → 字体设置
1、Line Properties → 线设置
(1)line_color,设置颜色
(2)line_width,设置宽度
(3)line_alpha,设置透明度
(4)line_join,设置连接点样式:’miter’ miter_join,’round’ round_join,’bevel’ bevel_join
(5)line_cap,设置线端口样式,’butt’ butt_cap,’round’ round_cap,’square’ square_cap
(6)line_dash,设置线条样式,’solid’,’dashed’,’dotted’,’dotdash’,’dashdot’,或者整型数组方式(例如[6,4])
2、Fill Properties → 填充设置
(1)fill_color,设置填充颜色
(2)fill_alpha,设置填充透明度
3、Text Properties → 字体设置
(1)text_font,字体
(2)text_font_size,字体大小,单位为pt或者em( ‘12pt’, ‘1.5em’)
(3)text_font_style,字体风格,’normal’ normal text,’italic’ italic text,’bold’ bold text
(4)text_color,字体颜色
(5)text_alpha,字体透明度
(6)text_align,字体水平方向位置,’left’, ‘right’, ‘center’
(7)text_baseline,字体垂直方向位置,’top’,’middle’,’bottom’,’alphabetic’,’hanging’
4、可见性
p.xaxis.visible = False
p.xgrid.visible = False
基本参数中都含有.visible参数,设置是否可见