首页 > 编程问答 >使用seaborn和hue绘制条形图,如何获取百分比值形式的条形标签?

使用seaborn和hue绘制条形图,如何获取百分比值形式的条形标签?

时间:2024-07-25 04:55:54浏览次数:7  
标签:python seaborn bar-chart

我有以下数据集(df):

``source_city     class         price

0 Bangalore Business 53671.856898 1 班加罗尔经济 6526.294410 2 钦奈商务 54036.749819 3 钦奈经济 6497.568622 4 德里商业 48614.172893 5 德里经济 6275.093136 6 海得拉巴业务 50357.590531 7 海得拉巴经济 6207.890037 8 加尔各答商业 56401.673678 9 加尔各答经济 7410.881850 10 孟买商业 52666.702876 11 孟买经济 6334.098781 ``

我想使用 python seaborn 库绘制条形图:

我像下面一样尝试了 bar_plot = sns.barplot(x = 'source_city', y = 'price', hue = 'class', data = df)

获取条形标签

for labels in bar_plot.containers: bar_plot.bar_label(labels)

但是我想要百分比(价格)来代替值(价格)作为条形标签 怎么办,请指导。 我可以使用估计器参数吗?如果可以,如何使用?


以下是使用 seaborn 在条形图上获取百分比标签的方法:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 创建示例数据
data = {'source_city': ['Bangalore', 'Bangalore', 'Chennai', 'Chennai', 'Delhi', 'Delhi', 'Hyderabad', 'Hyderabad', 'Kolkata', 'Kolkata', 'Mumbai', 'Mumbai'],
        'class': ['Business', 'Economy', 'Business', 'Economy', 'Business', 'Economy', 'Business', 'Economy', 'Business', 'Economy', 'Business', 'Economy'],
        'price': [53671.856898, 6526.294410, 54036.749819, 6497.568622, 48614.172893, 6275.093136, 50357.590531, 6207.890037, 56401.673678, 7410.881850, 52666.702876, 6334.098781]}
df = pd.DataFrame(data)

# 按城市计算总价格
total = df.groupby('source_city')['price'].transform('sum')

# 计算每个条形的百分比
df['percentage'] = (df['price'] / total * 100).round(2)

# 创建条形图
plt.figure(figsize=(12, 6))  # 调整图形大小以获得更好的可读性
bar_plot = sns.barplot(x='source_city', y='price', hue='class', data=df)

# 添加百分比标签
for p in bar_plot.patches:
    height = p.get_height()
    x = p.get_x() + p.get_width() / 2
    y = height
    label_text = f'{height:.2f}%'  # 格式化为两位小数的百分比
    bar_plot.text(x, y, label_text, ha='center', va='bottom')

# 设置标签和标题
plt.xlabel('Source City')
plt.ylabel('Price (%)')
plt.title('Price Percentage by Class and Source City')

# 旋转 x 轴标签以获得更好的可读性(如果需要)
plt.xticks(rotation=45)

plt.show()

说明:

  1. 计算百分比:
  2. 我们首先使用 groupby transform('sum') 按城市计算总价格。
  3. 然后,我们创建一个名为“percentage”的新列,其中包含每个价格相对于城市总价格的百分比。

  4. 创建条形图:

  5. 我们使用 sns.barplot 创建条形图。

  6. 添加百分比标签:

  7. 我们遍历条形图的 patches (代表每个条形)。
  8. 对于每个条形,我们提取高度、x 位置和 y 位置。
  9. 我们使用 bar_plot.text() 将百分比标签添加到每个条形,使用 f-string 格式将其格式化为两位小数。

  10. 自定义(可选):

  11. 调整 plt.figure(figsize) 以更改图形大小。
  12. 使用 plt.xticks(rotation=45) 旋转 x 轴标签以获得更好的可读性。
  13. 使用 plt.xlabel plt.ylabel plt.title 设置标签和标题。

此代码将创建一个条形图,其中每个条形都带有代表其相对于城市总价格的百分比的标签。

标签:python,seaborn,bar-chart
From: 78790550

相关文章

  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 任意几行代码要成为Python中的函数需要什么?
    我正在上一门计算机科学课,我的任务是创建一个程序来实现一个带有参数的函数。我的老师告诉我,下面的代码不是一个函数,这让我很困惑,对于将某些代码行归类为“函数”所需的条件,我感到很困惑。defgame(numbers,max_turns,pfl,tgl):turns=0flag=Falseprint("You......
  • 如何使用 Python 创建新的 Azure 订阅?
    我正在尝试使用PythonSDK以编程方式创建新的Azure订阅。我发现的对AzurePythonSDK的唯一引用是这个这是我最终得到的结果:importazure.mgmt.billingimportazure.mgmt.subscriptioncreds=AzureCliCredential()client_name='test'defcreat......
  • 用于打印脚本输出的 Python 实用程序
    我可以发誓有一个实用程序可以打印一个python脚本,其输出交织在一起。例如,给定一个脚本:a=2b=3print(a+b)print(a*b)该实用程序将输出a=2b=3print(a+b)#>5print(a*b)#>6有人知道该实用程序的名称吗?我最难找到它。谢谢你!描述的实用程序没有标......
  • a method to make some handy tools with python
    Inmyworkingofcomputer,therearealotofsimplejobsthatarefrequentlyrepeated.Itriedtofindawaytomakethesejobbeenprocessedeasily.Method1:Themethodiswritingascripttodothejob,andexecutingthescriptbyutoolsextensionuto......
  • Python网络爬虫详解:实战豆瓣电影信息采集
    文章目录前言一、爬虫是什么?二、常用库及其作用1.Requests2.BeautifulSoup3.lxml4.Scrapy5.Selenium6.PyQuery7.Pandas8.JSON9.Time三、实现步骤步骤一:环境准备步骤二:数据采集步骤三:数据处理步骤四:数据存储总结前言随着互联网的迅猛发展和数据分析需求的不......
  • python学习之内置函数
    Python拥有许多内置函数,这些函数是Python的一部分,不需要额外导入即可直接使用。这些函数提供了对Python解释器功能的直接访问,涵盖了从数学计算到类型检查、从内存管理到异常处理等各个方面。下面是一些常用的Python内置函数及其简要说明:一、Printprint函数大家都不会......
  • Python中以函数为作用域
    点击查看代码#第一题foriteminrange(10):#不报错,没有函数,所有操作在全局作用域里面执行,item最后赋值为:9,此时item在缩进与全局都可以使用passprint(item)#第二题item=10deffunc():foriteminrange(10):#优先在本地查找,找不到在到全局查找p......
  • 掌握IPython宏:%%macro命令的高效使用指南
    掌握IPython宏:%%macro命令的高效使用指南在编程中,宏是一种允许你定义可重用代码片段的强大工具。IPython,这个增强版的Python交互式环境,提供了一个名为%%macro的魔术命令,允许用户创建宏,从而提高代码的可重用性和效率。本文将详细介绍如何在IPython中使用%%macro命令创建宏,并......
  • 7月24号python:库存管理
    7月24号python:库存管理题目:​ 仓库管理员以数组stock形式记录商品库存表。stock[i]表示商品id,可能存在重复。原库存表按商品id升序排列。现因突发情况需要进行商品紧急调拨,管理员将这批商品id提前依次整理至库存表最后。请你找到并返回库存表中编号的最小的元素以便及......