佳木斯美食:Python 绘图 - Bokeh 柱状图小试(Stacked Bar)

admin/2020-03-08/ 分类:科技/阅读:

背景

在 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 phantomjs
  • npm install -g phantomjs-prebuilt
  • pip 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

  • bokeh/bokeh: Interactive Data Visualization in the browser, from Python
  • 数据可视化 到 可视化信息 浅述
,

Sunbet

Sunbet秉承以客为先的理念,多年运营、专业团队、专注服务、值得信赖。

TAG:
阅读:
广告 330*360
广告 330*360
Sunbet_进入申博sunbet官网
微信二维码扫一扫
关注微信公众号
新闻自媒体 Copyright © 2002-2019 Sunbet 版权所有
二维码
意见反馈 二维码