python可视化工具pandas_bokeh作图技巧详解

2023-11-04 06:10

本文主要是介绍python可视化工具pandas_bokeh作图技巧详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

在这里插入图片描述

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

目录

    • 1 工具包安装
    • 2 工具包调用
    • 3线形图
    • 4点图
    • 5散点图
    • 6柱形图
    • 7直方图
    • 8面积图
    • 9饼图
    • 10图表参数优化
    • 11仪表盘dashboard布局
    • 12保存图片
    • 13数据标签显示
    • 14地图可视化
    • 15结论先行
    • 16选项卡控件
    • 17 添加数据标签
    • 18图表美化
    • 19其他图表元素设置
      • 19.1标题
      • 19.2标轴
      • 19.3网格线
      • 19.4图例
      • 19.5绘图区
      • 19.6图表区
      • 19.7轴、网格线快速设置
      • 19.8整体美化

- 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() 

在这里插入图片描述
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  #23689bpanning=True,   #是否可以平移zooming=True)  # 是否可以缩放

在这里插入图片描述
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/blueplot_data_points=True,             # 数据标记是否显示plot_data_points_size=10,          # 标记大小marker="*")                 # 标记样式  asterisk  # 标记样式  x o p . *  v  ^  +  - 

在这里插入图片描述
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"  

在这里插入图片描述
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 $"
)  # 数字标签格式

在这里插入图片描述
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)

在这里插入图片描述
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="青岛短租房源分布")

在这里插入图片描述
在这里插入图片描述

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)

在这里插入图片描述
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)

在这里插入图片描述
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")

在这里插入图片描述
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)

在这里插入图片描述
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)

在这里插入图片描述
如果对你帮助, 欢迎点赞、关注、收藏!

相关阅读推荐:

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制作第七次人口普查数据动态图

这篇关于python可视化工具pandas_bokeh作图技巧详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343778

相关文章

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

SpringIoC与SpringDI详解

《SpringIoC与SpringDI详解》本文介绍了Spring框架中的IoC(控制反转)和DI(依赖注入)概念,以及如何在Spring中使用这些概念来管理对象和依赖关系,感兴趣的朋友一起看看吧... 目录一、IoC与DI1.1 IoC1.2 DI二、IoC与DI的使用三、IoC详解3.1 Bean的存储

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音