可视化神器Plotly玩转柱状图

本文是可视化神器Plotly绘图的第5篇:重点讲解如何利用Plotly绘制柱状图。柱状图在可视化图中是出现频率非常高的一种图表,能够很直观地展现数据的大小分布情况,在自己的工作中也使用地十分频繁。本文将详细介绍如何制作柱状图水平柱状图

前4篇关于Plotly的文章分别是:

  • 酷炫!36张图爱上高级可视化神器Plotly_Express
  • Plotly玩转散点图
  • Plotly玩转饼图
  • Plotly玩转漏斗图

导入库

首先还是需要导入我们绘图需要的几个常用库

import pandas as pd
import numpy as np# 两种接口
import plotly_express as px
import plotly.graph_objects as go

绘图的时候还是会基于两种方式来实现:

  • plotly_express:px
  • plotly.graph_objects:go

基于px实现柱状图

基础柱状图

模拟生成一份简单的绘图所需数据

df1 = pd.DataFrame({"name": ["小明","小红","周明","周红","张三"],"age": [20,28,18,25,36],"score": ["150","170","160","168","154"]
})df1

fig = px.bar(df1,x="name",y="age")
fig.show()

加上颜色参数color:

fig = px.bar(df1,x="name",y="age",color="age"   # 颜色参数)
fig.show()

基于长表的分组柱状图

df2 = pd.DataFrame({"姓名": ["小明","小红","张三","小明","小红","张三","小明","小红","张三"],"科目":["语文","语文","语文","数学","数学","数学","英语","英语","英语"],"得分": [58,78,84,90,71,90,64,84,69]
})df2

fig = px.bar(df2,x="姓名",y="得分",color="科目")
fig.show()

基于宽表的分组柱状图

宽表形式主要是指字段很多

df3 = pd.DataFrame({"姓名": ["小明","小红","张三"],"语文":[58,78,84],"数学":[90,71,90],"英语":[64,84,69]
})df3

fig = px.bar(df3,x="姓名",y=["语文","数学","英语"],title="学生成绩对比"  # 添加标题)
fig.show()

图表个性设置

1、改变图形的颜色:加上颜色参数

fig = px.bar(df1,x="name",y="age",color="age"  # 加上颜色参数)
fig.show()

看下自带数据集中小费的例子:

fig = px.bar(df4,x="sex",y="total_bill",color="smoker"   # 参数)fig.show()

2、设置图表的悬停信息:hover_data:

fig = px.bar(df1,x="name",y="age",color="age",  # 加上颜色参数hover_data = ['score']   # 悬停参数)
fig.show()

3、x轴标签倾斜设置

information = pd.DataFrame({"days":["2021年3月1日 星期一","2021年3月2日 星期二","2021年3月3日 星期三","2021年3月4日 星期四",ß"2021年3月5日 星期五"],"number":[400,700,300,500,800]
})information

默认情况下是水平显示:

fig = px.bar(information,x="days",y="number")
fig.show()   # 默认水平显示

如果我们加上参数width,height向右显示:

fig = px.bar(information,x="days",y="number",width=600,height=600)
fig.show()   # 参数width,height向右显示

加上xaxis_tickangle,设置倾斜角度:

fig = px.bar(information,x="days",y="number")
fig.update_layout(xaxis_tickangle=-45)   # 倾斜角度设置
fig.show()   # 结果是向左倾斜

即使我们加上width=600,height=600还是向左倾斜的:

fig = px.bar(information,x="days",y="number",width=600,height=600)
fig.update_layout(xaxis_tickangle=-45)   # 倾斜角度设置fig.show()   # 结果是向左倾斜

柱状图模式设置

柱状图显示模式主要是有4种:

  • stack:堆叠
  • group:分组
  • overlay:覆盖
  • relative:相对
fig = px.bar(df4,x="sex",y="total_bill",color="smoker",barmode="stack"  # ['stack', 'group', 'overlay', 'relative'])fig.show()

4种不同模式下的显示区别:

多面柱状图

我们以自带的小费数据为例:

fig = px.bar(df4,   # 带绘图数据 x="sex",  # x轴y="total_bill",   # y轴color="smoker",  # 颜色设置barmode="group",  # 柱状图4种模式之一facet_row="time",  #  行facet_col="day",  # 列category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],"time": ["Lunch", "Dinner"]   # 分类顺序设置})
fig.show()

需要注意每个不同的参数表示的含义

基于go实现柱状图

基础柱状图

自建的数据集:

fig = go.Figure(data = (go.Bar(x=df1["name"].tolist(),  # x轴数据y=df1["score"].tolist()  # y轴数据))
)fig.show()

分组柱状图

也是可以选择4种不同的柱状图模式:

  • stack:堆叠
  • group:分组
  • overlay:覆盖
  • relative:相对
fig = go.Figure(data=[go.Bar(name='小明', x=["语文","数学","英语"], y=[120, 104, 93]),go.Bar(name='小红', x=["语文","数学","英语"], y=[101, 88, 109])
])# 柱状图模式需要设置:4选1
fig.update_layout(barmode='group')  # ['stack', 'group', 'overlay', 'relative']fig.show()

设置文本悬停信息hovertext

name = ['Product A', 'Product B', 'Product C']
number = [200, 500, 300]fig = go.Figure(data=[go.Bar(x=name, y=number,hovertext=['20% 市场份额 ', '50% 市场份额', '30% 市场份额'])])fig.update_traces(marker_color='rgb(158,202,225)', # marker颜色marker_line_color='rgb(8,48,107)', # 线条颜色marker_line_width=1.5,   # 线宽opacity=0.6)  # 透明度fig.update_layout(title_text='3种产品市场份额')fig.show()

显示数据信息

显示的模式有4种:

  • auto:自动
  • inside:内部
  • outside:外部
  • none:无
name = ['Product A', 'Product B', 'Product C']
number = [200, 500, 300]fig = go.Figure(data=[go.Bar(x=name, y=number,text=number,  # 显示number的数据信息textposition="auto"  # ['inside', 'outside', 'auto', 'none'])])fig.update_layout(title_text='3种产品市场数量')fig.show()

格式化文本显示模式

import plotly.express as pxgap = px.data.gapminder().query("continent == 'Europe' and year == 2007 and pop > 2.e6")gap.head()

fig = px.bar(gap, x='country',y='pop', text='lifeExp')fig.update_traces(texttemplate='%{text:.2s}',   # 显示的整数位数:示例为2位textposition='outside')   # 文本显示位置:['inside', 'outside', 'auto', 'none']fig.update_layout(uniformtext_minsize=8,  # 显示文本字体大小uniformtext_mode='show')  #  文本显示4种模式:[False, 'hide', 'show']fig.show()

x轴标签倾斜

import plotly.graph_objects as gomonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']# 生成画布对象
fig = go.Figure()  # 添加多个图形轨迹
fig.add_trace(go.Bar(x=months,y=[20, 14, 25, 16, 18, 22, 19, 15, 12, 16, 14, 17],name='产品A',marker_color='lightblue'  # 颜色的不同表示方法
))fig.add_trace(go.Bar(x=months,y=[19, 14, 22, 14, 16, 19, 15, 14, 10, 12, 12, 16],name='产品B',marker_color='#af0010'
))fig.update_layout(barmode='group',  # 柱状图模式xaxis_tickangle=-45   # 倾斜角度)
fig.show()

单个柱状图设置

我们还是自建的数据集:

fig = go.Figure(data=[go.Bar(x=df1["name"].tolist(),  # 姓名作为x轴y=df1["score"].tolist(), # 分数作为y轴marker_color=colors  # 颜色设置:上面的colors
)])fig.update_layout(title_text="期末成绩分数")fig.show()

柱状图宽度设置

# 不设置的话,每个柱状图是一样的宽度fig = go.Figure(data=[go.Bar(x=df1["name"].tolist(),  # 姓名作为x轴y=df1["score"].tolist(), # 分数作为y轴
)])fig.update_layout(title_text="期末成绩分数")fig.show()

默认情况下,每个柱子的宽度是相同的:

我们给每个柱子设置不同的宽度:

fig = go.Figure(data=[go.Bar(x=df1["name"].tolist(),  # 姓名作为x轴y=df1["score"].tolist(), # 分数作为y轴width=[1, 0.8, 0.4, 1.2, 0.4]  # 宽度设置
)])fig.update_layout(title_text="期末成绩分数")fig.show()

改变柱状图基准位置

import plotly.graph_objects as goyears = ['2018','2019','2020']fig = go.Figure()fig.add_trace(go.Bar(x=years, y=[2000, 3000, 5000],# base另一种写法:np.array([2000, 3000, 5000]) * (-1)base=[-2000,-3000,-5000],  # 基准设置marker_color='crimson',name='商家A'))fig.add_trace(go.Bar(x=years, y=[3000, 4000, 2000],base=0,  # 默认基准设置marker_color='lightslategrey',name='商家B'
))fig.show()

图例位置和颜色

设置图例的位置和颜色:

import plotly.graph_objects as gosubjects = ["语文","数学","英语","物理","化学","生物"]fig = go.Figure()
fig.add_trace(go.Bar(x=subjects,   # x轴、y轴数据             y=[90,85,78,90,99,80],                name='小明',  # 图例名称           marker_color='rgb(15, 83, 109)'  # 该组数据颜色))fig.add_trace(go.Bar(x=subjects,               y=[80,89,68,100,78,90],               name='小红',               marker_color='rgb(180, 118, 255)'))fig.update_layout(title='期末成绩对比',  # 整个图的标题xaxis_tickfont_size=12,   # x轴字体大小yaxis=dict(title='成绩',  # y轴的标题titlefont_size=16,  # 标题大小tickfont_size=12,  # y轴上的数值大小),legend=dict(x=0,  # 图例的位置y=1,
#         bgcolor='rgba(255, 255, 255, 0)',  # 图例的背景色bordercolor='rgba(2, 255, 255, 0)'   # 边缘颜色),barmode='group',  # 柱状图模式bargap=0.4,  # 组间距离bargroupgap=0.2  # 组内距离
)
fig.show()

相对模式relative理解

import plotly.graph_objects as gox = [1, 2, 3, 4]fig = go.Figure()
fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 2]))
fig.add_trace(go.Bar(x=x, y=[6, -9, -1.5,4]))
fig.add_trace(go.Bar(x=x, y=[-10, -3, 4.5, -8]))
fig.add_trace(go.Bar(x=x, y=[-1, 3, -3, -4]))fig.update_layout(barmode='relative',   # 相对初始位置title_text='相对模式理解')fig.show()

堆叠模式

import plotly.graph_objects as gosubjects=['语文', '数学', '英语']fig = go.Figure(go.Bar(x=subjects, y=[69,71,120], name='小明'))fig.add_trace(go.Bar(x=subjects, y=[64, 89, 116], name='小红'))fig.add_trace(go.Bar(x=subjects, y=[76,104, 70], name='张三'))fig.update_layout(barmode='stack',   # 堆叠模式xaxis={'categoryorder':'total descending'})  # category ascending、category descending、total ascending、total descendingfig.show()

多组共享x轴

import plotly.graph_objects as gox = [["小明", "小明", "小明", "小红", "小红", "小红"],["语文", "数学", "英语", "语文", "数学", "英语",]
]fig = go.Figure()fig.add_bar(x=x,y=[91,72,83,104,85,66],name="上学期")
fig.add_bar(x=x,y=[106,85,64,93,72,81],name="下学期")fig.update_layout(barmode="relative")fig.show()

基于px实现水平柱状图

基础柱状图

需要注意两点:

  • x、y轴的数据需要交换
  • 添加参数orientation
df1 = pd.DataFrame({"name": ["小明","小红","周明","周红","张三"],"age": [20,28,18,25,36],"score": ["150","170","160","168","154"]
})df1

fig = px.bar(df1,y="name",   # xy轴的数据需要交换!!!x="age",orientation='h'   # 设置:改成水平柱状图
)
fig.show()

显示数据信息

fig = px.bar(df1,y="name",   x="age",orientation='h',   # 水平柱状图text="age"   # 需要显示的数据
)
fig.show()

默认文本是显示在内部的,可以进行修改:

# 修改文本位置fig = px.bar(df1,y="name",   # xy轴的数据需要交换x="age",orientation='h',   # 水平柱状图text="age"   # 需要显示的数据
)fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']fig.show()

设置颜色参数

fig = px.bar(df1,y="name",   x="age",color="age",  # 颜色参数orientation='h',   # 水平柱状图text="age"
)fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']fig.show()

自定义颜色

fig = px.bar(df1,y="name",   x="age",color_discrete_sequence=px.colors.diverging.RdBu,  # 自定义颜色orientation='h',   # 水平柱状图text="age"
)fig.update_traces(textposition="outside")  # ['inside', 'outside', 'auto', 'none']fig.show()

小费案例

多参数个性设置

fig = px.bar(tips, x="total_bill", y="sex", color='day', orientation='h',hover_data=["tip", "size"],height=400,title='小费案例')
fig.show()

基于go实现水平柱状图

基础图形

fig = go.Figure(go.Bar(x=df1["score"].tolist(),  # x轴数据y=df1["name"].tolist(),  # y轴数据orientation='h'))fig.show()

设置颜色和模式

import plotly.graph_objects as go# 生成画布
fig = go.Figure()# 添加3个图形轨迹
fig.add_trace(go.Bar(y=['小明', '小红', '张三'],x=[120, 74, 103],name='语文',orientation='h',marker=dict(color='rgba(246, 78, 139, 0.6)',line=dict(color='rgba(246, 78, 139, 1.0)', width=3))
))fig.add_trace(go.Bar(y=['小明', '小红', '张三'],x=[92, 128, 89],name='数学',orientation='h',marker=dict(color='rgba(5, 71, 80, 0.6)',line=dict(color='rgba(58, 71, 80, 1.0)', width=3))
))fig.add_trace(go.Bar(y=['小明', '小红', '张三'],x=[92, 78, 69],name='英语',orientation='h',marker=dict(color='rgba(18, 7, 80, 0.6)',line=dict(color='rgba(58, 71, 80, 1.0)', width=3))
))fig.update_layout(barmode='stack')  # 堆叠模式:['stack', 'group', 'overlay', 'relative']fig.show()

4种不同模式的对比:

总结

本文结合自建和Plotly中自带的数据集,详细的介绍了如何基于plotly_express和plotly.graph_objects两种方式来实现不同需求和显示方式的柱状图和水平柱状图,希望对读者朋友有所帮助。

尤而小屋,一个温馨的小屋。小屋主人,一手代码谋求生存,一手掌勺享受生活,欢迎你的光临

可视化神器Plotly玩转柱状图相关推荐

  1. 可视化神器Plotly玩转多子图绘制

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转多子图绘制 大家好,我是Peter~ 很长时间没有Plotly绘图的文章,之前已经介绍如何绘制柱状图.饼图.小提琴图.桑 ...

  2. 可视化神器Plotly玩转股票图

    可视化神器Plotly玩转股票图 本文是可视化神器Plotly绘图的第7篇,讲解的是如何通过Plotly来绘制与股市相关的图形,比如基础K线图.OHLC图等. 温馨提示⚠️:**股市有风险,投资需谨慎 ...

  3. 可视化神器Plotly玩转甘特图

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转甘特图 本文介绍的是一种特殊的柱状图:甘特图,虽然在实际工作中使用的几率较小,还是很有必要和兴趣来学习下,将制作过程 ...

  4. 可视化神器Plotly玩转箱形图

    可视化神器Plotly玩转箱形图 在之前的文章中介绍过如何使用Plotly绘制柱状图.饼图.散点图等,都是比较常用的可视化图表呈现方式.本文介绍的是利用Plotly绘制统计图形中的一种:箱型图. 扩展 ...

  5. 酷炫!可视化神器Plotly玩转饼图

    酷炫!可视化神器Plotly玩转饼图 之前发表过两篇关于Plotly的文章: 入门篇:酷炫!36张图爱上高级可视化神器Plotly_Express 散点图:酷炫!可视化神器Plotly玩转散点图 Pl ...

  6. 可视化神器Plotly玩转桑基图

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter呀~ 本文介绍的是利用Plotly绘制一种相对少见的可视化图形:桑基图,这个图形可以说是展现数据流动的利器. 虽然桑基图使用 ...

  7. 高级可视化神器Plotly快速入门

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...

  8. Python 可视化神器--Plotly

    文 | 潮汐 来源:Python 技术「ID: pythonall」 学习Python是做数分析的最基础的一步,数据分析离不开数据可视化.Python第三方库中我们最常用的可视化库是 pandas,m ...

  9. 可视化神器Plotly美化表格

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly美化表格 有时候看到一份表格,没有任何的颜色修饰,总觉得缺点美观效果.在Excel中我们可以直接对字体的颜色.大小等进行设置 ...

最新文章

  1. 练习2-17 生成3的乘方表 (15 分)
  2. 机器学习数据预处理之缺失值:插值法填充+多项式插值
  3. 创建的二叉树后续非递归遍历结果为_一入递归深似海,从此offer是路人
  4. 计算机删除qq用户信息吗,电脑中删除qq资料生日性别的方法
  5. 【CodeForces - 616C】The Labyrinth(bfs,并查集,STLset)
  6. 作者:徐晔(1964-),男,博士,中国科学院云计算产业技术创新与育成中心公共安全研究院研究员、院长。...
  7. 关于PE可执行文件的修改
  8. 弎问笔录30 之 狐狸和兔子(二)
  9. ORACLE SQL日期函数
  10. Java项目:ssm房屋租赁管理系统
  11. Java定时任务,定时执行某个操作
  12. 金融数据分析(十三)投资组合问题
  13. Python学习之字典练习(重复数字统计)
  14. iOS - 找出汉字拼音首字母
  15. Docker——入门实战
  16. PMI-ACP(Agile Certified Practitioner)敏捷管理专业人士资格认证考试知识点汇总
  17. 提名卡斯卡迪亚的免费软件社区贡献者
  18. Qt设计师的python代码运行,报错等解决方案
  19. ios客户端学习-itunes app 下载地址
  20. Intel X86 CPU之特权级别

热门文章

  1. Unity频繁创建Texture造成内存溢出解决办法
  2. google中文官网
  3. matlab GUI设置背景图及添加logo
  4. 210104-技术分享-漏洞复现-shiro
  5. 天若有情天亦老,人间正道是沧桑。
  6. matlab arima函数,ARIMA模型——MATLAB实现
  7. xilinx Vivado的使用详细介绍(2):综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
  8. css怎么将样式取消,css怎么把透明样式取消
  9. 五分钟入门rust语言
  10. 【深度学习】梯度消失 / 梯度弥散 (gradient diffusion)