Python交互图表可视化Bokeh:5 柱状图| 堆叠图| 直方图

柱状图/堆叠图/直方图

① 单系列柱状图
② 多系列柱状图
③ 堆叠图
④ 直方图

1.单系列柱状图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

import warnings
warnings.filterwarnings(‘ignore‘)
# 不发出警告

from bokeh.io import output_notebook
output_notebook()
# 导入notebook绘图模块

from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource
# 导入图表绘制、图标展示模块
# 导入ColumnDataSource模块

# 1、单系列柱状图
# vbar
df = pd.Series(np.random.randint(0,100,30))
#print(df.head())

p = figure(plot_width=400, plot_height=400)
p.vbar(x=[1, 2, 3], width=0.5, bottom=0,top=[1.2, 2.5, 3.7],  # x:横轴坐标,width:宽度,bottom:底高度,top:顶高度 ; bottom=[1,2,3]
       #color = [‘red‘,‘blue‘,‘green‘], alpha = 0.8   # 整体颜色设置,也可单独设置 → color="firebrick"
       line_width = 1,line_alpha = 0.8,line_color = ‘black‘, line_dash = [5,2],    # 单独设置线参数
       fill_color = ‘red‘,fill_alpha = 0.6    # 单独设置填充颜色参数
      )
# 绘制竖向柱状图
# p.vbar(x=df.index, width=0.5, bottom=0,top=df.values,  # x:横轴坐标,width:宽度,bottom:底高度,top:顶高度 ; bottom=[1,2,3]
#        #color = [‘red‘,‘blue‘,‘green‘], alpha = 0.8   # 整体颜色设置,也可单独设置 → color="firebrick"
#        line_width = 1,line_alpha = 0.8,line_color = ‘black‘, line_dash = [5,2],    # 单独设置线参数
#        fill_color = ‘red‘,fill_alpha = 0.6    # 单独设置填充颜色参数
#       )

show(p)

# 1、单系列柱状图
# hbar
# df = pd.DataFrame({‘value‘:np.random.randn(100)*10,
#                   ‘color‘:np.random.choice([‘red‘, ‘blue‘, ‘green‘], 100)})
# print(df.head())
p = figure(plot_width=400, plot_height=400)
p.hbar(y=[1, 2, 3], height=0.5, left=0,right=[1.2, 2.5, 3.7],  # y:纵轴坐标,height:厚度,left:左边最小值,right:右边最大值
       color = [‘red‘,‘blue‘,‘green‘])
# 绘制竖向柱状图

# p.hbar(y=df.index, height=0.5, left=0,right=df[‘value‘],  # y:纵轴坐标,height:厚度,left:左边最小值,right:右边最大值
#        color = df[‘color‘])

show(p)

# 1、单系列柱状图 - 分类设置标签
# ColumnDataSource

from bokeh.palettes import Spectral6
from bokeh.transform import factor_cmap
# 导入相关模块

fruits = [‘Apples‘, ‘Pears‘, ‘Nectarines‘, ‘Plums‘, ‘Grapes‘, ‘Strawberries‘]
counts = [5, 3, 4, 2, 4, 6]
source = ColumnDataSource(data=dict(fruits=fruits, counts=counts))
colors = [ "salmon", "olive", "darkred", "goldenrod", "skyblue", "orange"]
# 创建一个包含标签的data,对象类型为ColumnDataSource

p = figure(x_range=fruits, y_range=(0,9), plot_height=350, title="Fruit Counts",tools="") #x_range一开始就要设置成一个字符串的列表;要一一对应

p.vbar(x=‘fruits‘, top=‘counts‘, source=source,    # 加载数据另一个方式
       width=0.9, alpha = 0.8,
       color = factor_cmap(‘fruits‘, palette=Spectral6, factors=fruits),    # 设置颜色
       legend="fruits")
# 绘制柱状图,横轴直接显示标签
# factor_cmap(field_name, palette, factors, start=0, end=None, nan_color=‘gray‘):颜色转换模块,生成一个颜色转换对象
# field_name:分类名称
# palette:调色盘
# factors:用于在调色盘中分颜色的参数
# 参考文档:http://bokeh.pydata.org/en/latest/docs/reference/transform.html

p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
# 其他参数设置
#cmd -->> conda install bokeh  ;  conda install json
show(p)

2. 多系列柱状图

# 2、多系列柱状图
# vbar

from bokeh.transform import dodge
from bokeh.core.properties import value
# 导入dodge、value模块

df = pd.DataFrame({‘2015‘:[2, 1, 4, 3, 2, 4],‘2016‘:[5, 3, 3, 2, 4, 6], ‘2017‘:[3, 2, 4, 4, 5, 3]},
                 index = [‘Apples‘, ‘Pears‘, ‘Nectarines‘, ‘Plums‘, ‘Grapes‘, ‘Strawberries‘])
# 创建数据
print(df)
fruits = df.index.tolist()   # 横坐标
years = df.columns.tolist()    # 系列名
data = {‘index‘:fruits}
for year in years:
    data[year] = df[year].tolist()
print(data)
# 生成数据,数据格式为dict; 专门把dataframe转换为字典,然后再转换为ColumnDataSource;可以把这些步骤给都省了,也可以的。

source = ColumnDataSource(data=data)  #把上面转换字典步骤直接去掉也是可以的,这时把 data = df
# 将数据转化为ColumnDataSource对象

p = figure(x_range=fruits, y_range=(0, 10), plot_height=350, title="Fruit Counts by Year",tools="")

p.vbar(x=dodge(‘index‘, -0.25, range=p.x_range), top=‘2015‘, width=0.2, source=source,color="#c9d9d3", legend=value("2015")) #用dodge的方法把3个柱状图拼到了一起
p.vbar(x=dodge(‘index‘,  0.0,  range=p.x_range), top=‘2016‘, width=0.2, source=source,color="#718dbf", legend=value("2016"))
p.vbar(x=dodge(‘index‘,  0.25, range=p.x_range), top=‘2017‘, width=0.2, source=source,color="#e84d60", legend=value("2017"))
# 绘制多系列柱状图       0.25和width=0.2是柱状图之间的空隙间隔,都是0.2了就没有空隙了
# dodge(field_name, value, range=None) → 转换成一个可分组的对象,value为元素的位置(配合width设置)
# value(val, transform=None) → 按照年份分为dict

p.xgrid.grid_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"
# 其他参数设置

show(p)

官方示例很多情况是用的列表的形式,bokeh本身不是基于pandas构建的可视化工具,所以它基本上是用的python自己的数据结构字典、列表;我们做数据分析肯定是基于pandas,以上就是做了一个模拟,如果数据结构是DataFrame,怎么把它变成一个字典,再把它变成一个ColumnDataSource,同样的也可以直接用dataframe来创建

from bokeh.transform import dodge
from bokeh.core.properties import value
# 导入dodge、value模块

df = pd.DataFrame({‘2015‘:[2, 1, 4, 3, 2, 4],‘2016‘:[5, 3, 3, 2, 4, 6], ‘2017‘:[3, 2, 4, 4, 5, 3]},
                 index = [‘Apples‘, ‘Pears‘, ‘Nectarines‘, ‘Plums‘, ‘Grapes‘, ‘Strawberries‘])
# # 创建数据
# print(df)

source = ColumnDataSource(data=df)
# 将数据转化为ColumnDataSource对象

p = figure(x_range=fruits, y_range=(0, 10), plot_height=350, title="Fruit Counts by Year",tools="")

p.vbar(x=dodge(‘index‘, -0.25, range=p.x_range), top=‘2015‘, width=0.2, source=source,color="#c9d9d3", legend=value("2015")) #用dodge的方法把3个柱状图拼到了一起
p.vbar(x=dodge(‘index‘,  0.0,  range=p.x_range), top=‘2016‘, width=0.2, source=source,color="#718dbf", legend=value("2016"))
p.vbar(x=dodge(‘index‘,  0.25, range=p.x_range), top=‘2017‘, width=0.2, source=source,color="#e84d60", legend=value("2017"))
# 绘制多系列柱状图       0.25和width=0.2是柱状图之间的空隙间隔,都是0.2了就没有空隙了
# dodge(field_name, value, range=None) → 转换成一个可分组的对象,value为元素的位置(配合width设置)
# value(val, transform=None) → 按照年份分为dict

p.xgrid.grid_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"
# 其他参数设置

show(p)

3. 堆叠图

# 3、堆叠图

from bokeh.core.properties import value
# 导入value模块

fruits = [‘Apples‘, ‘Pears‘, ‘Nectarines‘, ‘Plums‘, ‘Grapes‘, ‘Strawberries‘]
years = ["2015", "2016", "2017"]
colors = ["#c9d9d3", "#718dbf", "#e84d60"]
data = {‘fruits‘ : fruits,
        ‘2015‘   : [2, 1, 4, 3, 2, 4],
        ‘2016‘   : [5, 3, 4, 2, 4, 6],
        ‘2017‘   : [3, 2, 4, 4, 5, 3]}
# df = pd.DataFrame(data)
# print(df)
# source = ColumnDataSource(data = df) #也可以使用DataFrame
source = ColumnDataSource(data=data)

# 创建数据

p = figure(x_range=fruits, plot_height=350, title="Fruit Counts by Year",tools="")
renderers = p.vbar_stack(["2015", "2016", "2017"], #可以用years代替,就是上边设置的变量 # 设置堆叠值,这里source中包含了不同年份的值,years变量用于识别不同堆叠层
                         x=‘fruits‘,     # 设置x坐标
                         source=source, #包含了2015/2016/2017的数据的;  主要设置的就是这3个参数
                         width=0.9, color=colors,
                         legend=[value(x) for x in years], name=years) #对整个数据做一个分组集合变成一个列表
# 绘制堆叠图
# 注意第一个参数需要放years

p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"
# 设置其他参数

show(p)
[value(x) for x in years]

[{‘value‘: ‘2015‘}, {‘value‘: ‘2016‘}, {‘value‘: ‘2017‘}]
# 3、堆叠图

from bokeh.palettes import GnBu3, OrRd3
# 导入颜色模块

fruits = [‘Apples‘, ‘Pears‘, ‘Nectarines‘, ‘Plums‘, ‘Grapes‘, ‘Strawberries‘]
years = ["2015", "2016", "2017"]
exports = {‘fruits‘ : fruits,
           ‘2015‘   : [2, 1, 4, 3, 2, 4],
           ‘2016‘   : [5, 3, 4, 2, 4, 6],
           ‘2017‘   : [3, 2, 4, 4, 5, 3]}
imports = {‘fruits‘ : fruits,
           ‘2015‘   : [-1, 0, -1, -3, -2, -1],
           ‘2016‘   : [-2, -1, -3, -1, -2, -2],
           ‘2017‘   : [-1, -2, -1, 0, -2, -2]}

p = figure(y_range=fruits, plot_height=350, x_range=(-16, 16), title="Fruit import/export, by year")

p.hbar_stack(years, y=‘fruits‘, height=0.9, color=GnBu3, source=ColumnDataSource(exports),
             legend=["%s exports" % x for x in years])      # 绘制出口数据堆叠图

p.hbar_stack(years, y=‘fruits‘, height=0.9, color=OrRd3, source=ColumnDataSource(imports),
             legend=["%s imports" % x for x in years])      # 绘制进口数据堆叠图,这里值为负值

p.y_range.range_padding = 0.2     # 调整边界间隔
p.ygrid.grid_line_color = None
p.legend.location = "top_left"
p.axis.minor_tick_line_color = None
p.outline_line_color = None
# 设置其他参数

show(p)

4. 直方图

# 4、直方图
# np.histogram + figure.quad()
# 不需要构建ColumnDataSource对象

df = pd.DataFrame({‘value‘: np.random.randn(1000)*100})
df.index.name = ‘index‘
print(df.head())
# 创建数据

hist, edges = np.histogram(df[‘value‘],bins=20) #把这1000个值拆分成20个箱子,整个箱子肯定会有一个value值的也就是它的个数
print(hist) #代表不同箱子的个数
print(edges) #把它分成不同箱子之后,每个箱子的位置坐标
# 将数据解析成直方图统计格式
# 高阶函数np.histogram(a, bins=10, range=None, weights=None, density=None)
# a:数据
# bins:箱数
# range:最大最小值的范围,如果不设定则为(a.min(), a.max())
# weights:权重
# density:为True则返回“频率”,为False则返回“计数”
# 返回值1 - hist:每个箱子的统计值(top)
# 返回值2 - edges:每个箱子的位置坐标,这里n个bins将会有n+1个edges;假如有10个箱子,就会有10+1个位置

p = figure(title="HIST", tools="save",background_fill_color="#E8DDCB")
p.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],   # 分别代表每个柱子的四边值,上下左右,top=hist计数的值,第一个箱子的左跟右就是第一个值+第二个值
        fill_color="#036564", line_color="#033649")
# figure.quad绘制直方图

show(p)
            value
index
0      109.879109
1      -49.315234
2     -149.590185
3       83.290324
4      -16.367743
[  1   2   2   3  21  25  59  85 104 151 140 110 101  82  47  31  22   8   #这里1就是在-356.79345893到-323.021329之间有1个;在-323.021329到-289.2491919906之间有2个
   2   4]
[-356.79345893 -323.021329   -289.24919906 -255.47706913 -221.7049392
 -187.93280926 -154.16067933 -120.3885494   -86.61641947  -52.84428953
  -19.0721596    14.69997033   48.47210027   82.2442302   116.01636013
  149.78849006  183.56062     217.33274993  251.10487986  284.8770098
  318.64913973]
In [ ]:

原文地址:https://www.cnblogs.com/shengyang17/p/9739373.html

时间: 2024-10-07 01:08:01

Python交互图表可视化Bokeh:5 柱状图| 堆叠图| 直方图的相关文章

Python交互图表可视化Bokeh:2. 辅助参数

图表辅助参数设置 辅助标注.注释.矢量箭头 参考官方文档:https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#color-bars 1. 辅助标注 - 线 import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline import warnings warnings.filterwarnings

Python 绘图与可视化 matplotlib 制作Gif动图

参考链接:https://blog.csdn.net/theonegis/article/details/51037850 我们可以使用Matplotlib的animation类的FuncAnimation()方法来制作动画,只需要提供一个动态更新数据的函数 需要注意的是,这个函数需要以元组的形式返回一个需要在下一次绘图中更新的数据 一个拥有详细解释的实例的链接:http://codingpy.com/article/drawing-gifs-with-matplotlib 有两点需要注意 图里

Python 数据图表工具的比较

Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析.数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些. 幸运的是,过去几年出现了很多新的Python数据可视化库,弥补了一些这方面的差距.matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,bokeh, seaborn,  pyga, folium 和networkx,这些库有些是构建在 matplotlib 之上,还有

利用R语言进行交互数据可视化(转)

上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包.该包直接在R中生成基于D3的Web界面. rCharts包的安装 require(devtools) install_github('rCharts', 'ramnathv') rCharts函数就像lattice函数一样,通过formula.data指定数据源和绘图

利用R语言进行交互数据可视化

本文是本人受统计之都邀请写的一篇关于数据可视化的文章,感兴趣的同学可以上统计之都去查看. http://cos.name/2016/06/using-r-for-interactive-data-visualization/ 上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包.该包直接在R中生成基于D3的Web界面.

Python - matplotlib 数据可视化

在许多实际问题中,经常要对给出的数据进行可视化,便于观察. 今天专门针对Python中的数据可视化模块--matplotlib这块内容系统的整理,方便查找使用. 本文来自于对<利用python进行数据分析>以及网上一些博客的总结. 1  matplotlib简介 matplotlib是Pythom可视化程序库的泰斗,经过几十年它仍然是Python使用者最常用的画图库.有许多别的程序库都是建立在它的基础上或直接调用它,比如pandas和seaborn就是matplotlib的外包, 它们让你使用

Python绘图与可视化

Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用程序中使用.该项目是由John Hunter于2002年启动的,其目的是为Python构建一个MATLAB式的绘图接口.如果结合使用一种GUI工具包(如IPython),Matplotlib还具有诸如缩放和平移等交互功能.它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的食

Caffe 执行python实例并可视化

. 配置python 安装的python需要是 Anaconda2,启动命令行执行如下安装. 1.1.安装 jupyter pip install jupyter 1.2.安装ipython ipython-notebook conda install ipython ipython-notebook conda install python-matplotlib python-scipy python-pandas python-sympy python-nose 安装完成后执行 jupyte

谈谈Python实战数据可视化之pygal模块(实战篇)

前沿 通过上一节谈谈Python实战数据可视化之pygal模块(基础篇)的学习,我们对pygal模块的使用有了初步的了解,本节将以实战项目来加深pygal模块的使用.从网上可以下载JSON格式的人口数据,并使用json模块来处理它们,pygal模块提供了一个适合初学者使用的地图创建工具,我们将使用它来对人口数据进行可视化,以探索全球人口的分布情况.针对JSON格式的人口数据文件,可以通过谈谈Python实战数据可视化之matplotlib模块(实战篇)章节的配套资源来下载.对于本人在学习和编码过