史莱克七怪都要去海神岛练级了, 你的职场技能是否储备的够多了呢?
前言:
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()
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) # 是否可以缩放
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 ^ + -
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)
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个数据集网站