Bokeh 系列文章传送门:

  • Bokeh小册子:入门

  • Bokeh小册子:figure详细解读

  • 29种Bokeh基础可视化图形,学会了可以大展身手…… | Bokeh 小册子


前面,我们分享了关于 bokeh 入门 、 figure 使用、以及bokeh基础图形介绍的内容。今天,我们在前文的基础上,主要来分享Bokeh中数据的使用方式,尤其是 Bokeh 特有的数据类型 ColumnDataSource 的使用。

本文主要内容如下:

  • 1  直接提供数据

  • 2  通过 ColumnDataSource 来提供数据

    • 2.1  data 为字典

    • 2.2  data 为 pandas 的 DataFrame

    • 2.3  data 为 pandas 的 DataFrame 的 groupby 对象

本文的环境为

  • window 7 系统

  • python 3.6

  • Jupyter Notebook

  • bokeh 0.13.0

数据是进行数据可视化的必要基础, 在 bokeh 中,数据有几种呈现方式。

(1)直接提供数据

(2)通过 ColumnDataSource 来提供数据

1 直接提供数据

首先加载相关Python库。

from bokeh.plotting import figure, output_notebook, showfrom bokeh.layouts import gridplotfrom bokeh.models import ColumnDataSourceimport numpy as npimport pandas as pdoutput_notebook()

可以通过数据列的形式(list)直接提供数据

np.random.seed(15)x=np.random.randint(1,20,size=6)y=np.random.randint(20,50,size=6)print(x)print(y)p = figure(plot_width=300, plot_height=300)p.circle(x, y,size=y)show(p)
[ 9 13  6  1  8 12][41 42 35 49 37 33]

图示如下:

2 通过 ColumnDataSource 来提供数据

ColumnDataSource 是 Bokeh 中一种重要的数据形式,ColumnDataSource() 方法有一个参数为 “data”, “data”主要有以下三种类型:

(1)data 为字典

(2)data 为 Pandas 的 DataFrame

(3)data 为 Pandas 的 DataFrame 的 groupby 对象

2.1 data 为字典

data 的表现形式是一个字典的形式, 一般情况下, 字典的 key 值是一个字符串,代表列名称, 而 value则是 list形式 或者 numpy的 array 形式。 演示如下:

data = {'x_values': [1, 2, 9, 4, 5],        'y_values': [6, 7, 2, 3, 6]}source = ColumnDataSource(data=data)source

ColumnDataSource(

id = '0d38f463-7107-49e7-9263-7b5395afc00a', …)

type(source)
bokeh.models.sources.ColumnDataSource

从上面结果来看, source 是一个 ColumnDataSource 对象,不能直接打印出来,后续可以在绘图是传入参数进行使用。

data = {'x_values': [1, 2, 9, 4, 5],        'y_values': [6, 7, 2, 3, 6]}source = ColumnDataSource(data=data)p = figure(plot_width=300, plot_height=300)p.circle(x='x_values', y='y_values', source=source, size=20)show(p)

图示如下:

2.2 data 为 pandas 的 DataFrame

ColumnDataSource (简称为 CDS) 的 data 参数,也可以是 pandas 的 DataFrame。 当CDS的参数是 DataFrame 时,参数中可以直接用 DataFrame 的列名称,索引名称,也可以直接用DataFrame 已有的名称, 如果没有索引名称,默认情况下, 索引名称 用 "index" 就可以。

data = {'x_column': [1, 2, 9, 4, 5, 8],        'y_column': [6, 7, 2, 3, 6, 2]}df = pd.DataFrame(data=data)df

x_columny_column
016
127
292
343
456
582
source_df = ColumnDataSource(df)p = figure(plot_width=300, plot_height=300)p.circle(x='x_column', y='y_column', source=source_df, size=15)show(p)

图示如下:

source_df = ColumnDataSource(df)p = figure(plot_width=300, plot_height=300)# 使用 “index” 作为 DataFrame 的默认索引名称p.circle(x= 'index', y='y_column', source=source_df, size=15)show(p)

图示如下:

2.3 data 为 pandas 的 DataFrame 的 groupby 对象

ColumnDataSource (简称为 CDS) 的 data 参数,还也可以是 pandas 的 DataFrame 的 groupby 对象。

当CDS的参数是 DataFrame 的 groupby 对象时,在绘图时使用的 列名为 groupby 对象的 groupby.describe() 方法中的 列名称。

由于 groupby 会有多个统计参数,在引用时, 列表会合并到一起,形式如: column_mean 等。

dates = pd.date_range('20180101', periods=360)df = pd.DataFrame(np.random.randn(360,2), index=dates, columns=list('AB'))df['C'] = ['Good', 'Bad', 'Common', 'Good','Good']*72df['month'] = df.index.monthdf

图示如下:

g = df.groupby('month')g.describe()

图示如下:

source_g = ColumnDataSource(g)p = figure(plot_width=400, plot_height=300)p.vbar(x='month', width=0.3, bottom=0, top='A_mean',source=source_g)show(p)

图示如下:

3 小结

相对于 matplotlib, pandas,seaborn 等 Python 绘图库, Bokeh 提供了特有的数据源,掌握好 ColumnDataSource 的应用,对于 Bokeh 绘图是至关重要的。 后续,我们还会陆续接触到 ColumnDataSource 的相关用法。


---------------- End ----------------


点击前往【项目实战】

世界杯系列 | 福布斯系列 | 求职系列


知识星球

我的知识星球【Python数据之道成长圈】已开通,目前成长圈还有部分免费加入的机会,想加入的同学,请回复数字 “2” 了解详情。

如果您对我的文章感兴趣或者觉得文章内容不错的话,请在阅读后顺便转发到您的圈子里,或者点个赞鼓励我继续前行! 感谢您的陪伴与支持!


如需加入微信群交流,请添加微信小助手(微信号:147121977,请备注“python”),后续将邀请入群。


©著作权归作者所有:来自51CTO博客作者mb5fe18e7c44408的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Bokeh中数据的添加、修改和筛选 | Bokeh 小册子
  2. 毫秒时间戳标识消息导致数据丢失的问题排查
  3. Pandas小册子:日期数据处理 - 如何按日期筛选、显示及统计数据
  4. 2017年文章汇总 - Python数据之道
  5. Python数据类型-List介绍(下)-列表推导式
  6. Python数据类型-List介绍(上)
  7. 内卷?猝死?企业如何利用数据分析提升人效比,让员工远离“996”?
  8. 【工具】历史文章分类汇总-V6 | Python数据之道
  9. js中基础数据结构数组去重问题

随机推荐

  1. c语言整除符号是什么?
  2. c语言\n什么意思?
  3. C语言中数据int的取值范围为多少?
  4. sqrt在c语言中怎么用?
  5. C语言中如何生成1~100的随机数(附代码)
  6. vc++6.0怎么调试?
  7. c语言中pow函数的用法是什么?
  8. c语言用户标识符命名规则是什么?
  9. c语言中if(x)是什么意思?
  10. C语言中for用法是什么?