Python 绘图 - Bokeh 柱状图小试(Stacked Bar)
背景
在 Bokeh 初探之后,学习使用它来做个图
目标
做一个柱状图,支持多个 y 数据源,即有堆叠效果的柱状图 stacked bar
实现
单数据源 简单的柱状图
参考 Handling Categorical Data — Bokeh 1.4.0 documentation
from bokeh.io import show, output_file
from bokeh.plotting import figure
output_file("bars.html")
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
counts = [5, 3, 4, 2, 4, 6]
p = figure(x_range=fruits, plot_height=250, title="Fruit Counts", toolbar_location=None, tools="")
p.vbar(x=fruits, top=counts, width=0.9)
p.xgrid.grid_line_color = None
p.y_range.start = 0
show(p)
效果图见上述参考
增加一个 y 数据源,做堆叠效果
这样的话,需要考虑:
- 数据源:不能是单一的列表了,得能容纳多组数据。用字典。
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
data = {'fruits' : fruits,
'2015' : [2, 1, 4, 3, 2, 4],
'2016' : [5, 3, 4, 2, 4, 6],
'2017' : [3, 2, 4, 4, 5, 3]}
- 颜色:区分不同的数据源
colors = ["green", "#718dbf", "#e84d60","#e84d20","#e84361"]
配色是个问题,一不小心就会很丑,后面会提到用调色板 palette
- 画图:上面的
vbar不支持堆叠
p.vbar_stack(years, x='fruits', width=0.9, color=colors, source=data,legend_label=years)
导出为文件
Exporting Plots — Bokeh 1.4.0 documentation
- html
output_file("file.html")
png
npm install selenium phantomjsnpm install -g phantomjs-prebuiltpip install bokeh
然后 from bokeh.io import export_png
数据源: 从 .csv 文件读取数据
我试过两种方式,现在用的是第二种 pandas
- numpy 的
genfromtxt
但是我遇到很多问题,包括不同的 dtype参数,names参数等,返回不同的数据类型的 array,感觉很不方便(如排序等),所以后来弃用了,当然也是因为我不太熟。
from numpy import genfromtxt
my_data = genfromtxt("data.csv", delimiter=',', dtype=None, encoding="utf8")
- pandas
还是这个方便,读取文件 :
df = pd.read_csv("data.csv",header=0)
取前 7 行:df = df.head(n=7)
取某一列:df['col1']
几列求和: df['col1'] + df['col2'] + df['col3']
排序:df = df.sort_values(by='col1', ascending=False)
x axis 旋转
Styling Visual Attributes — Bokeh 1.4.0 documentation
比如左斜 旋转 45 度:
p.xaxis.major_label_orientation = 360-45
调色板
前面我们用 colors = ["green", "#718dbf", "#e84d60","#e84d20","#e84361"] 人工配色,会很丑不专业,bokeh 有自带的调色板,倒是很方便,还好看。
>>> from bokeh.palettes import brewer
>>> colors = brewer["Blues"][6]
>>> colors
['#08519c', '#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#eff3ff']
具体列表参考:
- bokeh.palettes
- 源码:bokeh/palettes.py at master · bokeh/bokeh
- bokeh.colors — Bokeh 1.4.0 documentation
分类数据处理
如果 x 数据只是数字 如[1,2,3],上面demo 中的 p.figure足以处理
但如果 x 或 y 坐标是一些分类数据如["apple","orange"] ,则需要再添加 x_range,或 y_range等
如
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
p = figure(x_range=fruits, ... )
p.vbar(x=x, top=y, legend_label="Temp.", width=0.9)
参考 Handling Categorical Data — Bokeh 1.4.0 documentation
References
Python 绘图 - Bokeh 柱状图小试(Stacked Bar)的更多相关文章
- python绘图:matplotlib和pandas的应用
在进行数据分析时,绘图是必不可少的模式探索方式.用Python进行数据分析时,matplotlib和pandas是最常用到的两个库.1.matplotlib库的应用准备工作如下:打开ipython,输 ...
- 分形、分形几何、数据可视化、Python绘图
本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并 ...
- 机器学习-Matplotlib绘图(柱状图,曲线图,点图)
matplotlib 作为机器学习三大剑客之一 ,比热按时无比强大的 matplotlib是绘图库,所以呢我就分享一下简单的绘图方式 #柱状图 #导报 柱状图 import matplotlib. ...
- python绘图之seaborn 笔记
前段时间学习了梁斌老师的数据分析(升级版)第三讲<探索性数据分析及数据可视化>,由于之前一直比较忙没有来得及总结,趁今天是周末有点闲暇时间,整理一下笔记: 什么是seaborn Seabo ...
- 一个交互式可视化Python库——Bokeh
本篇为<Python数据可视化实战>第十篇文章,我们一起学习一个交互式可视化Python库--Bokeh. Bokeh基础 Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Py ...
- Python绘图工具Plotly的简单使用
1.Plotly被称为史上最好的绘图工具之一,为了更好的展示金融数据的复杂性. Plotly的官方网站为:https://plot.ly/ python量化的关键是金融数据可视化,无论是传统的K线图, ...
- 【python笔记】使用matplotlib,pylab进行python绘图
一提到python绘图,matplotlib是不得不提的python最著名的绘图库,它里面包含了类似matlab的一整套绘图的API.因此,作为想要学习python绘图的童鞋们就得在自己的python ...
- python绘图 matplotlib教程
mark一个很好的python绘图教程 https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/
- python绘图入门
python绘图入门 学习了:https://zhuanlan.zhihu.com/p/34200452 API:https://matplotlib.org/api/pyplot_api.html ...
随机推荐
- 吴裕雄--天生自然 JAVA开发学习:MySQL 连接
CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DEFAULT '' ...
- 正则表达式sed学习(二)
sedsed是一个流编辑器,非交互式的编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)接着用 sed 命令处理缓冲区的内容,处理完成 ...
- Java多线程处理任务(摘抄)
很多时候,我们需要对一个庞大的队列或者二维数组进行处理.这些处理可能是循环的,比如给一个excel多个sheet的联系人列表发邮件.很幼稚的方法就是用一个或者两个FOR循环搞定,对于庞大的数据有得让你 ...
- Xen入门系列三【Xen 管理工具 xm】
xm命令是管理Xen的最基本的工具,可以通过xm --help 来获得帮助. 1. 列出所有正在运行的虚拟操作系统 # xm list PS[1]:可缩写为 xm li 2. 启动虚拟机 # 通过配置 ...
- 关于va_list实例
printf函数: #include <stdio.h> #include <stdarg.h> int myself_printf(char *format, ...) { ...
- python初认函数
今日所得 函数基本使用 函数的参数 函数的返回值 # 函数内要想返回给调用者值 必须用关键字return """ 不写return 只写return 写return No ...
- seckill
京东自动登录 注:本文所做操作皆以京东web为例 包含:xpath,splinter,ocr 遇到的坑: 登录页面通过查看网页元素,能看到账户,密码唯一id,但是执行 12 browser.fill( ...
- js各继承方法的优缺点
在js中有很多种继承的方法,下面总结这些方法的优缺点. ####1.原型链继承 优点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 ...
- flink 基本原理
state状态操作 https://ci.apache.org/projects/flink/flink-docs-release-1.8/concepts/programming-model.htm ...
- OpenCV 腐蚀与膨胀(Eroding and Dilating)
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...