史莱克七怪都要去海神岛练级了, 你的职场技能是否储备的够多了呢?
在这里插入图片描述

前言:
python中有很多可视化的工具包,比如入门级的matplotlib, 进阶级seaborn, 还有可以做出交互图的bokeh、pyechart、plotly、ggplot、pandas-bokeh, 工作中该选择哪个作为自己的主要魂技呢?

在这里插入图片描述

内容太多, 请提前收藏哟!
如果需要作图数据, 请评论区留言!

- pandas-bokeh:
- 优点: 快速做出动态交互式图、语法参数简单, 使用pandas数据结构
- 缺点: 美观稍差

1 工具包安装

和其他python第三方工具包安装方法一样, 使用pip方式

pip install pandas-bokeh

在这里插入图片描述

2 工具包调用

2.1导入工具包

import pandas_bokeh

作图2种方式, 和pandas作图方式很像

#pandas-bokeh作图方式
df.plot_bokeh.line()
df.plot_bokeh(kind="line")

#pandas作图方式
df.plot.line()
df.plot(kind='line')

2.2参数

DataFrame.plot_bokeh(kind, x, y, figsize, title, xlim, ylim, xlabel, ylabel, logx, logy, xticks, yticks, color, colormap, hovertool, zooming, panning, **kwargs)

- 参数:

  • kind: 支持的图种类’line’, ‘step’, ‘point’, ‘scatter’, ‘bar’, ‘barh’,
    ‘hist’, ‘area’, ‘pie’, 'map’等
  • x: 选中数据某列名作为x轴。如果x不传入参数,会默认使用df的索引作为x轴
  • y: 将数据中的某列或某些列指定为y轴
  • figsize: 图的尺寸,如figsize=(600, 350)
  • title: 图的标题
  • xlim/ylim: 设置图的x轴和y轴的范围
  • xlabel/ylabel: 设置x轴和y轴的名字
  • logx/logy: 布尔型值,对x和y的数据是否进行log变换
  • xticks/yticks: 显性定义横纵坐标刻度
  • color: 对图中使用同一的颜色,如果想定义多种颜色,请使用colormap参数
  • colormap: 可以对图中的不同对象设置颜色, 传入的是颜色字符串列表。
  • hovertool: 默认True,鼠标放在图上会悬浮显示具体信息。
  • zooming: 布尔值,默认True支持缩放
  • panning: 布尔值,默认True支持平移
  • kwargs**: 更多参数设定请看官方文档

2.3图表显示方式

一种是在编辑器内部显示, 一种是输出一个网页文档。
pyechart、bokeh等动态图工具包都这样

#方式1: jupyter 内置
pandas_bokeh.output_notebook()

#方式2 输出html文件
pandas_bokeh.output_file("文件名称.html")

3线形图

案例都分为3步: 1 导入工具包、 2读取或者创建数据、3生成图表

# 导入工具包
import pandas_bokeh
import numpy as np
import pandas as pd
# 图表显示方式
pandas_bokeh.output_notebook()  # 方式1: jupyter 内置
# 创建数据
np.random.seed(42) # 构造随机数, 每次生成的随机数不变, 括号内可以是任意整数
df = pd.DataFrame({"谷歌": np.random.randn(1000)+0.2, 
                   "苹果": np.random.randn(1000)+0.17}, 
                   index=pd.date_range('1/1/2018', periods=1000))# 索引
# 数据累加
df = df.cumsum()
# 所有数值都加50
df = df + 50
# 数据前5行
df.head()

在这里插入图片描述

# 作图
df.plot_bokeh() 

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
3.1单系列线形图

df.plot_bokeh.line(
    figsize=(800, 450),  # 图表大小
    y="苹果",    # 用于作图的列 , 当多列时用list格式
    title="苹果股价趋势",  # 图表标题
    xlabel="日期",   # x轴名称
    ylabel="股价 [$]",  # y轴名称
    yticks=[0, 100, 200, 300, 400], # y轴刻度
    ylim=(0, 400),   # y轴刻度的起止数
    toolbar_location='above', # 工具栏显示位置   None(无) above(上), below(下), left(左)  right(右)
    color = '#0f3057', # 颜色:样式1'red' 'blue'  样式2:#03506f  #ec4646  #23689b
    panning=True,   #是否可以平移
    zooming=True)  # 是否可以缩放

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
3.2多个系列

df.plot_bokeh.line(
    figsize=(800, 450),  # 图表大小
    title="苹果 vs 谷歌",  #图表标题
    xlabel="日期",        # x轴名称
    ylabel="股票价格 [$]",   # y轴名称
    yticks=[0, 50, 100, 150, 200],   #y轴刻度
    ylim=(150, 300),                  # y轴最大值 最小值
    xlim=("2020-01-01", "2020-02-01"),  # x轴区间
    colormap=["blue","green" ],           # 颜色 #11698e  #16c79a   "red", "blue","green" 列表格式   
    #颜色设置 网站https://colorhunt.co/palettes/blue
    plot_data_points=True,             # 数据标记是否显示
    plot_data_points_size=10,          # 标记大小
    marker="*")                 # 标记样式  asterisk  # 标记样式  x o p . *  v  ^  +  - 

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
3.3范围工具 (rangetool参数)

# 创建数据
ts = pd.Series(np.random.randn(1000), 
               index=pd.date_range('1/1/2000', 
                                   periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4), 
                  index=ts.index, 
                  columns=list('ABCD'))
df = df.cumsum()
df

在这里插入图片描述

# 作图
df.plot_bokeh(rangetool=True)

在这里插入图片描述

4点图

# 创建数据
import numpy as np
x = np.arange(-3, 3, 0.1) # 起点-3 ,终点3, 不长0.1的数组
y2 = x**2
y3 = x**3
df = pd.DataFrame({"x": x, "平方": y2, "立方": y3})
df.head()

在这里插入图片描述

# 点图
df.plot_bokeh.point(
    x="x",  # x轴
    xticks=range(-3, 4),  
    size=5,
    colormap=["#21209c", "#fdb827"],
    title="点图 (平方 vs. 立方)",
    marker="+")   # 标记样式  x o p . *  v  ^  +  - 

在这里插入图片描述

5散点图

# 作图数据
df = pd.read_csv('C:/Users/yyz/Desktop/pandas-bokeh/data/iris.csv')
df.columns = ['花萼长度','花萼宽度','花瓣长度','花瓣宽度','物种']
df['物种'].replace(['setosa','versicolor','virginica'],['山鸢尾','杂色鸢尾','维吉尼亚鸢尾'],inplace=True)
df.head()

在这里插入图片描述

# 修改其中的一个数值,为了查看散点大小
df.loc[13, "花萼长度"] = 15
#散点图
p_scatter = df.plot_bokeh.scatter(
    x="花瓣长度",
    y="花萼宽度",
    size="花萼长度",# 大小
    category="物种",  # 作为分类的字段列
    title="鸢尾花卉数据集可视化")  

在这里插入图片描述

6柱形图

# 创建数据
data = {
    '水果':['苹果', '梨', '油桃', '李子', '葡萄', '草莓'],
    '2018': [2, 1, 4, 3, 2, 4],
    '2019': [5, 3, 3, 2, 4, 6],
    '2020': [3, 2, 4, 4, 5, 3]}
df = pd.DataFrame(data).set_index("水果")
df

在这里插入图片描述

# 创建柱形图
p_bar = df.plot_bokeh.bar(
    ylabel="单位价格 [$]", # y轴名称
    title="水果每年价格",  # 图表标题 
    alpha=0.6)             # 透明度

在这里插入图片描述

# 创建堆积柱形图
p_stacked_bar = df.plot_bokeh.bar(
    ylabel="单位价格 [$]",  # y轴名称
    title="水果每年价格",   # 图表标题
    stacked=True,  # 是否设置为堆积柱形图
    alpha=0.6)  # 透明度

在这里插入图片描述

7直方图

# 创建数据
import numpy as np
df_hist = pd.DataFrame({
    'a': np.random.randn(1000) + 1,
    'b': np.random.randn(1000),
    'c': np.random.randn(1000) - 1
    },
    columns=['a', 'b', 'c'])
df_hist.head()

在这里插入图片描述

#直方图:
df_hist.plot_bokeh.hist(
    bins=np.linspace(-5, 5, 41), # 从-5 到5 分成41个数, 40个区间
    vertical_xlabel=True,   # x轴文字垂直显示, 文字太多会重叠
    hovertool=False, # 鼠标放在图上是否显示具体信息
    title="正太分布 (重合)",  # 标题
    line_color="black")   # 柱形边框线条颜色

在这里插入图片描述

# 直方图 系列之间不重叠
df_hist.plot_bokeh.hist(
    bins=np.linspace(-5, 5, 41),  # 从-5 到5 分成41个数, 40个区间
    histogram_type="sidebyside", # 系列直接不重叠
    vertical_xlabel=True,  # x轴文字垂直显示, 文字太多会重叠
    hovertool=False,  # 鼠标放在图上是否显示具体信息
    title="正太分布(并列)",
    line_color="black")

在这里插入图片描述

#堆积直方图
df_hist.plot_bokeh.hist(
    bins=np.linspace(-5, 5, 41),  # 从-5 到5 分成41个数, 40个区间
    histogram_type="stacked",  # 堆积
    vertical_xlabel=True,   # x轴文字垂直显示, 文字太多会重叠
    hovertool=False,    # 鼠标放在图上是否显示具体信息
    title="正太分布(堆积)",
    line_color="black")

在这里插入图片描述

8面积图

# 作图数据
df_energy = pd.read_csv('C:/Users/yyz/Desktop/pandas-bokeh/Pandas-Bokeh-master/docs/Testdata/energy/energy.csv', parse_dates=["Year"])
df_energy.columns = ['年','石油','煤气','煤','核能','水力发电','其他可再生能源']
df_energy.head()

在这里插入图片描述

# 面积图
df_energy.plot_bokeh.area(
    x="年",
    stacked=True,
    legend="top_left",
    colormap=["brown", "orange", "black", "grey", "blue", "green"],
    title="按能源来源划分的全球能源消费",
    ylabel="百万吨油当量",
    ylim=(0, 16000))

在这里插入图片描述

# 百分比面积图
df_energy.plot_bokeh.area(
    x="年",
    stacked=True,
    normed=100,
    legend="bottom_left",
    colormap=["brown", "orange", "black", "grey", "blue", "green"],
    title="按能源来源划分的全球能源消费",
    ylabel="百万吨油当量")

在这里插入图片描述

9饼图

# 作图数据
df_pie = pd.read_csv("C:/Users/yyz/Desktop/pandas-bokeh/data/饼图.csv",encoding='gbk')
df_pie

在这里插入图片描述

# 单个系列
df_pie.plot_bokeh.pie(
    x="城市",
    y="2020",
    colormap=['#084594', '#2171b5', '#4292c6', '#6baed6', '#9ecae1', '#c6dbef', '#eff3ff'],  # 
    title="不同城市占比",
    )

在这里插入图片描述

# 读个系列 (更合适做法,做多个图,然后组合)
df_pie.plot_bokeh.pie(
    x="城市",
    colormap= ['#084594', '#2171b5', '#4292c6', '#6baed6', '#9ecae1', '#c6dbef', '#eff3ff'],
    title="不同城市占比 [2016-2020]",
    line_color="grey")

在这里插入图片描述

10图表参数优化

10.1自动缩放长宽比(sizing_mode参数)

# 数据
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df

在这里插入图片描述

df.plot_bokeh(kind="bar", figsize=(900, 450) ) #, sizing_mode="scale_width"  

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
10.2数字标签格式(number_format参数)

# 数据
import numpy as np
np.random.seed(42)
df = pd.DataFrame({
    "谷歌": np.random.randn(1000) + 0.2,
    "苹果": np.random.randn(1000) + 0.17
},
                  index=pd.date_range('1/1/2000', periods=1000))
df = df.cumsum()
df = df + 50
# 线形图
df.plot_bokeh(
    kind="line",
    title="苹果 vs 谷歌",
    xlabel="时间",
    ylabel="股价 [$]",
    figsize=(900, 450),
    yticks=[0, 100, 200, 300, 400],
    ylim=(0, 400),
    colormap=["red", "blue"],
    number_format="1.0 $"
)  # 数字标签格式

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
10.3不显示科学计数法(disable_scientific_axes参数)

# 创建数据
df = pd.DataFrame({"动物": ["老鼠", "兔子", "狗", "老虎", "大象", "鲸鱼"],
                   "体重 [克]": [19, 3000, 40000, 200000, 6000000, 50000000]})
df

在这里插入图片描述

# 作图
p_scientific = df.plot_bokeh(x="动物", y="体重 [克]", show_figure=False)
p_non_scientific = df.plot_bokeh(x="动物", y="体重 [克]", disable_scientific_axes="y", show_figure=False)
# 组合
pandas_bokeh.plot_grid([[p_scientific, p_non_scientific]], plot_width = 450)

在这里插入图片描述

11仪表盘dashboard布局

11.1n行m列布局

import pandas as pd
import numpy as np
import pandas_bokeh
pandas_bokeh.output_notebook()  # 显示方式

#柱形图:--------------------------------------------------------------

# 数据源
data = {
    '水果':['苹果', '梨', '油桃', '李子', '葡萄', '草莓'],
    '2018': [2, 1, 4, 3, 2, 4],
    '2019': [5, 3, 3, 2, 4, 6],
    '2020': [3, 2, 4, 4, 5, 3]}
df = pd.DataFrame(data).set_index("水果")

# 作图
p_bar = df.plot_bokeh(
    kind="bar",
    ylabel="单位价格 [€]",
    title="水果每年价格",
    show_figure=False)

#线形图:--------------------------------------------------------------

# 数据源
np.random.seed(42)
df = pd.DataFrame({
    "谷歌": np.random.randn(1000) + 0.2,
    "苹果": np.random.randn(1000) + 0.17
},
                  index=pd.date_range('1/1/2000', periods=1000))
df = df.cumsum()
df = df + 50

# 作图
p_line = df.plot_bokeh(
    kind="line",
    title="苹果 vs 谷歌",
    xlabel="日期",
    ylabel="股价 [$]",
    yticks=[0, 100, 200, 300, 400],
    ylim=(0, 400),
    colormap=["red", "blue"],
    show_figure=False)

#散点图:--------------------------------------------------------------

# 数据源
df = pd.read_csv('C:/Users/yyz/Desktop/pandas-bokeh/data/iris.csv')
df.columns = ['花萼长度','花萼宽度','花瓣长度','花瓣宽度','物种']
df['物种'].replace(['setosa','versicolor','virginica'],['山鸢尾','杂色鸢尾','维吉尼亚鸢尾'],inplace=True)

# 作图
p_scatter = df.plot_bokeh.scatter(
    x="花瓣长度",
    y="花萼宽度",
    size="花萼长度",# 大小
    category="物种",  # 作为分类的字段列
    title="鸢尾花卉数据集可视化",
    show_figure=False)  

#直方图:--------------------------------------------------------------

# 数据源
df_hist = pd.DataFrame({
    'a': np.random.randn(1000) + 1,
    'b': np.random.randn(1000),
    'c': np.random.randn(1000) - 1
},
                       columns=['a', 'b', 'c'])
# 作图
p_hist = df_hist.plot_bokeh(
    kind="hist",
    bins=np.arange(-6, 6.5, 0.5),
    vertical_xlabel=True,
    normed=100,
    hovertool=False,
    title="正太分布",
    show_figure=False)

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
11.1不等宽布局

p_line.plot_width = 900
p_hist.plot_width = 900

# 组合方式二
layout = pandas_bokeh.column(p_line,
                pandas_bokeh.row(p_scatter, p_bar),
                p_hist)

pandas_bokeh.show(layout)

在这里插入图片描述

12保存图片

from bokeh.io import export_png
# pip install selenium  需要先安装selenium
# conda install -c conda-forge firefox geckodriver
layout = pandas_bokeh.column(p_line,
                pandas_bokeh.row(p_scatter, p_bar),
                p_hist)
pandas_bokeh.show(layout)    
export_png(layout, filename='C:/Users/yyz/Desktop/pandas_bokeh.png')

13数据标签显示

import faker
f = faker.Faker(locale='zh-CN')
faker.Faker.seed(10000)   # 每次随机数不变

import pandas as pd
import numpy as np
np.random.seed(10000)   # 每次随机数不变

data = pd.DataFrame()
for i in range(100):
    datai = pd.DataFrame({'编号': "N2020_%s" % (np.random.choice(['A','B','C'])),
                          '姓名':f.name(),
                          '性别':np.random.choice(['男','女']),
                          '公司':f.company(),
                          '完成率':np.random.random(),
                          '销售':np.random.randint(100,300,1)},
                          index = [i])
    data = data.append(datai)
data.head()

在这里插入图片描述

p_scatter = data.plot_bokeh.scatter(
    x="完成率",
    y="销售",
    category="性别",  # 作为分类的字段列
    title="销售数据分布",
    ) 

在这里插入图片描述

p_scatter = data.plot_bokeh.scatter(
    x="完成率",
    y="销售",
    category="性别",  # 作为分类的字段列
    title="销售数据分布",
    hovertool_string="""<h3>@{姓名} </h3>
    <h4> 公司名称: @{公司} </h4>
    <h4> 完成率: @{完成率} </h4>
    <h4> 销售: @{销售} </h4>""",
    ) 

在这里插入图片描述

14地图可视化

# 导入工具包
import pandas_bokeh
import pandas as pd
import numpy as np
import math

# 读取数据
data = pd.read_excel('C:/Users/yyz/Desktop/python数据分析基础/data/青岛短租数据_位置.xlsx',index_col=0)

# 创建新变量
data["size"] = data["价格"] / 50

# 作图
data.plot_bokeh.map(x="经度",
                    y="纬度",
                    hovertool_string="""<h2> @{名称} </h2> 
                    <h3> 价格: @{价格} </h3>""",
                    tile_provider="STAMEN_TERRAIN_RETINA",
                    size="size", 
                    figsize=(1200, 600),
                    title="青岛短租房源分布")

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
在这里插入图片描述

15结论先行

from bs4 import BeautifulSoup
soup = BeautifulSoup(open('青岛短租分布V1.html'),'lxml')
# 结论内容
bt = '青岛短租价格分析'
jl1 = '青岛短租均价300元, 主要集中在150~300元之间,'
jl2 = '1. 房间数量为1的房源最多'
jl3 = '2. 主要集中在沿海风景较好的地段'
jl4 = '数据源: 短租网; 更新日期: 2021-3-12'

html = """
<h3>{0}</h3>
<p style="color:#8ac4d0;line-height: 0em">{1}</p>
<p style="font-size:8px";>{2}</p>
<p style="font-size:8px";>{3}</p>
<p style="font-size:6px;font-family:楷体">{4}</p>
""".format(bt,jl1,jl2,jl3,jl4) + str(soup)


# 字体样式更多设置 font-family:Calibri 或者 '"微软雅黑"'  字体 color:red 颜色  font-weight: bold
# text-indent:2em 缩进 line-height: 2em 行间距;text-align:center 字体居中

# 保存数据
with open("青岛短租分布V2.html" , "w",encoding="utf-8") as f:
    f.write(html)
  
# 预览文件    
import webbrowser
webbrowser.open("青岛短租分布V2.html")

在这里插入图片描述

16选项卡控件

16.1单个图

# 导入工具包
from bokeh.models.widgets import Panel,Tabs
from bokeh.layouts import row,column
# 创建标签1
tab1 = Panel(child=p1_re,title='均价')
# 穿件标签2
tab2 = Panel(child=p2_re,title='房源数量')
# 标签组合
tabs = Tabs(tabs=[tab1,tab2])
# 生成html文件
pandas_bokeh.output_file('单个组合.html')
# 预览文件
pandas_bokeh.show(tabs)

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
16.2多个组合

# 创建标签
tab3 = Panel(child=row(p1_re, p3_re), title = '价格及房源')
tab4 = Panel(child=row(p2_re, p4_re), title = '分布')
# 组合
tabs = Tabs(tabs=[tab3,tab4])
# 生成文件
pandas_bokeh.output_file('多个组合.html')
pandas_bokeh.show(tabs)

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
16.3更多组合

# 创建标签
tab5 = Panel(child=column(row(p1_re, p3_re),row(p2_re, p4_re)), title = '更多组合1')
tab6 = Panel(child=column(row(p4_re, p1_re),row(p3_re, p2_re)), title = '更多组合2')
# 组合
tabs = Tabs(tabs=[tab5,tab6])
# 生成文件
pandas_bokeh.output_file('更多组合.html')
pandas_bokeh.show(tabs)

在这里插入图片描述

17 添加数据标签

p1 = data.plot_bokeh.bar(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(900,450),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 #show_figure=False,
                                 alpha=1,
                                     )
p1.text(range(len(data)), data['值'], text=data['值'],
           text_color="#8ac4d0", text_align="center", text_font_size="13px")

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
17.1只个别添加数据标签

p2.text(data1['x'], data1['y']+0.5, text=[i[0] if i[1]>20  else "" for i in zip(data1['编号'],data1['x']) ],
           text_color="#8ac4d0", text_align="center", text_font_size="13px")

在这里插入图片描述

18图表美化

18.1隔行填充

# 导入工具包
import pandas as pd
import numpy as np
import pandas_bokeh
np.random.seed(123)

data = pd.DataFrame({'编号':list('ABCDEFG'),
                    '值':np.random.randint(10,20,7)})
data

在这里插入图片描述

y轴

p3 = data.plot_bokeh.bar(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',  # https://colorhunt.co/palettes 
                                 #show_figure=False,
                                 alpha=1,
                                     )
p3.ygrid.band_fill_color = "#00917c"   # 淡褐色 
p3.ygrid.band_fill_alpha = 0.1

在这里插入图片描述

pandas_bokeh.show(p3)

x轴

p3_re = data.plot_bokeh.line(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
p3_re.xgrid.band_fill_color = "#007580"   # 淡褐色 
p3_re.xgrid.band_fill_alpha = 0.3
pandas_bokeh.show(p3_re)

在这里插入图片描述

18.2重点标记区间

from bokeh.models import BoxAnnotation
p4 = data.plot_bokeh.bar(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
p4.add_layout(BoxAnnotation(top=5, fill_alpha=0.1, fill_color='green', line_color='green'))
p4.add_layout(BoxAnnotation(bottom=10, fill_alpha=0.1, fill_color='green', line_color='green'))
pandas_bokeh.show(p4)

在这里插入图片描述

18.3辅助矩形

p5 = data.plot_bokeh.bar(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
p5.add_layout(BoxAnnotation(left=2.5,top=11.5,right=3.5, fill_alpha=0.5, fill_color='red', line_color='red'))
p5.add_layout(BoxAnnotation(left=4.5,top=19.5,right=5.5, fill_alpha=0.5,line_width = 2, line_dash = [6,2], line_color='red',))
pandas_bokeh.show(p5)

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
18.4辅助线

from bokeh.models.annotations import Span
p6 = data.plot_bokeh.bar(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
p6.add_layout(Span(location=8,           # 位置,对应坐标值
             dimension='width',    # 方向,width为横向,height为纵向  
             line_color='red', line_width=1,   # 颜色、线宽
             line_dash = [8,8]
            ))
pandas_bokeh.show(p6)

在这里插入图片描述

18.5文字注释

from bokeh.models.annotations import Label
p7 = data.plot_bokeh.line(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
label = Label(x=4.5, y=18.5,       # 注释位置
              #x_offset=5,    # x偏移
              text="最大值",      # 内容
              text_font_size="12pt",    # 字体大小
              #border_line_color="gray", # 线颜色
              background_fill_color="#c8eed9", # 背景色
              background_fill_alpha = 0.5   # 透明度
             )
p7.add_layout(label)
pandas_bokeh.show(p7)

在这里插入图片描述

18.5箭头注释

# 注释箭头
from bokeh.models.annotations import Arrow
from bokeh.models.arrow_heads import  NormalHead, VeeHead   # 两种箭头类型
p8 = data.plot_bokeh.line(title='价格分布',
                                x='编号',
                                y='值',
                                figsize=(1200,600),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#8ac4d0',
                                 show_figure=False,
                                 alpha=1,
                                     )
p8.add_layout(Arrow(end=VeeHead(fill_color="orange"),
                   x_start=4.5, y_start=18, x_end=4.9, y_end=18.8))
pandas_bokeh.show(p8)

在这里插入图片描述

19其他图表元素设置

# 导入工具包
import pandas as pd
import numpy as np
import pandas_bokeh
pandas_bokeh.output_notebook() # 设置图表显示方式
data = pd.read_excel('./data/青岛短租数据整理.xlsx',index_col=0)
p = data[['价格']].plot_bokeh.hist(title='价格分布',
                                 xlim=(0,1200),  # x轴的刻度
                                 bins=np.linspace(0, 1200, 25),
                                 figsize=(900,450),
                                 zooming=False,
                                 panning=False,
                                 #legend=None,
                                 toolbar_location=None,
                                 color='#282846',
                                 show_figure=False,
                                 alpha=1,
                                     )
pandas_bokeh.show(p)

1

19.1标题

p.title.text_color = "#ff7171" # 字体颜色
p.title.text_font = "黑体"  # 字体
p.title.text_font_size="28pt"
p.title.text_font_style = "italic"  # 斜体italic  粗体bold  normal, italic, bold or bold italic
p.title.background_fill_color = "#f8f4e1"
p.title_location="above"   # 位置 above, below, left or right
pandas_bokeh.show(p)

在这里插入图片描述

19.2标轴

# 轴名称
p.xaxis.axis_label = "价格区间"  # x轴名称
p.xaxis.axis_label_text_font_style='bold' # 设置为黑体, 默认斜体  normal, italic, bold or bold italic
p.xaxis.axis_label_text_color = "#aa6666"
p.xaxis.axis_label_standoff = 30  #名称偏移轴线的距离
# 轴刻度文本
p.xaxis.major_label_text_color = "orange"  # x轴刻度文字颜色
p.xaxis.major_label_orientation = "horizontal"  # x轴刻度文字方向; 'horizontal',水平; 'vertical' 垂直
# 轴线
p.xaxis.axis_line_width = 3      # x轴线宽度
p.xaxis.axis_line_color = "#007580"     #x轴线颜色
p.xaxis.axis_line_dash = [6, 4] #虚线 6线4个格子
# 刻度方向及长度
p.axis.minor_tick_in = 2     # 次要刻度线向内延伸的长度。
p.axis.minor_tick_out = 2   # 次要刻度线向外延伸的长度

pandas_bokeh.show(p)

在这里插入图片描述

19.3网格线

p.ygrid.grid_line_color = 'red' # 线颜色
p.ygrid.grid_line_alpha = 0.8  # 透明度
p.ygrid.grid_line_dash = [6, 4]  # 虚线设置
p.ygrid.minor_grid_line_color = 'navy' # 次要网格线颜色
p.ygrid.minor_grid_line_alpha = 0.1  # 次要网格线透明度
p.grid.bounds = (20, 40)  # 哪个区间显示网格线
pandas_bokeh.show(p)

在这里插入图片描述

19.4图例

p.legend.location = "top_right"  # 图例位置top_left"、"top_center"、"top_right" (the default)、"center_right"、"bottom_right"、"bottom_center"
# "bottom_left"、"center_left"、"center"
p.legend.orientation = "vertical"  # 图例方向 "vertical" (默认)or "horizontal"
p.legend.label_text_font = "楷体"  # 图例字体
p.legend.label_text_font_style = "italic"  # 斜体
p.legend.label_text_color = "navy"  # 图例颜色
p.legend.label_text_font_size = '12pt' # 字体大小
# 图例边框
p.legend.border_line_width = 3  # 线宽
p.legend.border_line_color = "navy"  # 颜色
p.legend.border_line_alpha = 0.5 # 透明度
p.legend.background_fill_color = "gray"  # 图例填充色
p.legend.background_fill_alpha = 0.2   # 填充色透明度
pandas_bokeh.show(p)

在这里插入图片描述

# 绘图边框设置
p.outline_line_width = 7         # 边框线宽
p.outline_line_alpha = 0.3       # 边框线透明度
p.outline_line_color = "navy"    # 边框线颜色 None
p.outline_line_dash = [6, 4]
pandas_bokeh.show(p)

在这里插入图片描述

19.5绘图区

p.background_fill_color = "beige"    # 绘图空间背景颜色
p.background_fill_alpha = 0.5        # 绘图空间背景透明度
pandas_bokeh.show(p)

在这里插入图片描述

19.6图表区

p.border_fill_color = "whitesmoke"    # 外边界背景颜色
p.border_fill_alpha = 0.5             #透明度
p.min_border_left = 80                # 外边界背景 - 左边宽度
p.min_border_right = 80               # 外边界背景 - 右边宽度
p.min_border_top = 10                 # 外边界背景 - 上宽度
p.min_border_bottom = 10              # 外边界背景 - 下宽度
pandas_bokeh.show(p)

在这里插入图片描述

19.7轴、网格线快速设置

p.axis.visible = False # 不显示网格线
p.grid.visible = False # 不显示网格线
pandas_bokeh.show(p)

在这里插入图片描述

19.8整体美化

p1 = data[['价格']].plot_bokeh.hist(title='短租价格分布',
                                 xlim=(0,1200),  # x轴的刻度
                                 bins=np.linspace(0, 1200, 25),
                                 figsize=(900,450),
                                 zooming=False,
                                 panning=False,
                                 legend=None,
                                 toolbar_location=None,
                                 color='#78c4d4',
                                 show_figure=False,
                                 alpha=1,
                                     )
p1.title.text_color = "#343f56" # 字体颜色
p1.title.text_font = "黑体"  # 字体
p1.title.text_font_size="20pt"
p1.title.text_font_style = "bold"  # 斜体italic  粗体bold  
p1.axis.axis_line_color = None     #x轴线颜色
p1.yaxis.minor_tick_line_color=None # 次刻度
p1.xaxis.minor_tick_line_color=None  # 次刻度
p1.yaxis.major_tick_line_color=None  # 主刻度
p1.xaxis.major_tick_line_color='#897853'  # 主刻度
p1.xaxis.axis_label = "价格区间"  # x轴名称
p1.yaxis.axis_label = "房源数量"  # y轴名称
p.xaxis.minor_tick_in = 4 
p1.xaxis.axis_label_text_font_style='normal'
p1.yaxis.axis_label_text_font_style='normal'
p1.background_fill_color = "#f8f4e1"    # 绘图空间背景颜色
p1.outline_line_color = None # 绘图区边框
p1.xgrid.grid_line_color = None # 线颜色
p1.ygrid.grid_line_dash = [6, 4]  # 虚线设置
p1.background_fill_alpha = 0.3    # 绘图空间背景颜色
p1.border_fill_color = "#f8f5f1"    # 外边界背景颜色
p1.border_fill_alpha = 0.5            #透明度
p1.min_border_left = 20                # 外边界背景 - 左边宽度
p1.min_border_right = 40               # 外边界背景 - 右边宽度
p1.min_border_top = 50                 # 外边界背景 - 上宽度
p1.min_border_bottom = 40    
pandas_bokeh.show(p1)

python可视化工具pandas_bokeh作图技巧详解-小白菜博客
如果对你帮助, 欢迎点赞、关注、收藏!

相关阅读推荐:

1. python小白, 1周入门python数据分析视频课程

2. pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路

3. 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?

4. 8个常用的python办公室自动化技巧,学会了同事都找你!

5. 学习python数据分析的30个练手数据+4个数据集网站

6. [工作必备]pandas数据分析处理52个常用技巧

7. 泰坦尼克号数据你没见过的可视化丨pyechart制作桑基图(sankey)的最简单方法

8. pyechart制作第七次人口普查数据动态图