Python交互图表可视化 bokeh(六) -- 绘图表达进阶操作

绘图表达进阶操作

  1. 轴线设置
  2. 浮动设置
  3. 多图表设置
import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

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

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

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

轴线标签设置 - 设置字符串

df = pd.DataFrame({'score': [98, 86, 74, 67, 87]}, index=['小明','小王', '小张', '小李', '小红'])
df.index.name='name'

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

name=df.index.tolist()   # 提取name
# 通过x_rang设置横轴标签,这里提取成list
p=figure(x_range=name, y_range=(60,100), plot_height=350, title="考试成绩",tools="")

p.circle(x='name', y='score', source=source,
         size=20, line_color='blue', line_dash=[6,4],
         fill_color='red', fill_alpha=0.8
        )

show(p)

在这里插入图片描述

轴线标签设置 - 时间序列设置

# Dataframe DatetimeIndex + x_axis_type

# 导入数据
from bokeh.sampledata.commits import data
print(data.head())

DAYS=['Sun', 'Sat', 'Fri', 'Thu', 'Wed', 'Tue', 'Mon']
source=ColumnDataSource(data)

p=figure(plot_width=800, plot_height=600,
         y_range=DAYS, # 设置图表的y轴刻度分类
         x_axis_type='datetime', # 设置x轴类型 -> 时间序列
         title="Commits by Time of Day 2012-2016"
        )

p.circle(x='time', y='day', source=source, alpha=0.2)

p.ygrid.grid_line_color=None

show(p)

在这里插入图片描述

轴线标签设置 - 设置对数坐标轴

x=[0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y=[10**i for i in x]

p=figure(plot_width=400, plot_height=400, y_axis_type='log')  # y_axis_type='log' : 对数坐标轴
#p=figure(plot_width=400, plot_height=400) 

p.line(x, y, line_width=2)
p.circle(x,y,fill_color='white',size=8)

show(p)

在这里插入图片描述

浮动设置 : Jitter

from bokeh.transform import jitter

DAYS=['Sun', 'Sat', 'Fri', 'Thu', 'Wed', 'Tue', 'Mon']
source=ColumnDataSource(data)

p=figure(plot_width=800, plot_height=600,
         y_range=DAYS, # 设置图表的y轴刻度分类
         x_axis_type='datetime', # 设置x轴类型 -> 时间序列
         title="Commits by Time of Day 2012-2016",
         tools='hover'  # 鼠标放到图上会显示点的数据
        )

p.circle(x='time',
         y=jitter('day', width=0.6, range=p.y_range),   
         source=source, alpha=0.3)
#jitter参数 -> 'day': 第一参数,这里指y的值,width:间隔宽度比例,range:分类范围对象,这里和y轴的分类一类
p.ygrid.grid_line_color=None

show(p)

多图表设置:gridplot

from bokeh.layouts import gridplot

x=list(range(11))
y0=x
y1=[10-i for i in x]
y2=[abs(i-5) for i in x]

# 散点图1
s1=figure(plot_width=250, plot_height=250, title=None)
s1.circle(x, y0, size=10, color='navy', alpha=0.5)

# 散点图2, 设置和散点图1一样的x_range/y_range -> 图表联动
s2=figure(plot_width=250, plot_height=250, x_range=s1.x_range, y_range=s1.y_range, title=None)
s2.triangle(x, y1, size=10, color='firebrick', alpha=0.5)

# 散点图3, 设置和散点图1一样的x_range/y_range -> 图表联动
s3=figure(plot_width=250, plot_height=250,x_range=s1.x_range, y_range=s1.y_range, title=None)
s3.square(x, y2, size=10, color='firebrick', alpha=0.5)

# 组合图表
p=gridplot([[s1 ,s2, s3]])

show(p)

在这里插入图片描述

多图表设置 - 示例2

x=list(range(-20,21))
y0=[abs(i) for i in x]
y1=[i**2 for i in x]
source=ColumnDataSource(data=dict(x=x, y0=y0, y1=y1))

TOOLS="box_select,lasso_select,help,hover"

left=figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
left.circle('x', 'y0', source=source)  # 散点图1

right=figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
right.circle('x', 'y1', source=source)  # 散点图2
# 共用一个ColumnDataSource

p=gridplot([[left, right]])

show(p)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值