3款常用的可视化工具Matplotlib、Seaborn和Pandas

大家好,Seaborn 是基于 Matplotlib 的扩展库,Pandas 的可视化功能同样也依赖于 Matplotlib。尽管二者都使用相同的底层图形库,但绘制图表的方法却各有千秋。本文将介绍各种柱状图的绘制,比较 Matplotlib、Pandas 和 Seaborn 在数据可视化方面的功能、优势和局限。

1.构建数据图表的基础

先从定义一些虚拟数据和导入所需库开始:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import numpy as npdata = {'label': ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'],'percent': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],'remaining': [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0],
}df = pd.DataFrame(data)

创建一个包含三个子图的 Matplotlib 图形,然后分别用 Matplotlib、Pandas 和 Seaborn 绘制三个柱状图。

f, (ax1, ax2, ax3) = plt.subplots(3, figsize=(12, 8))  # matplotlib
ax1.bar(df.label, df.percent)  # pandas
df.plot(x='label', y='percent', kind='bar', ax=ax2)  # seaborn
sb.barplot(x=df.label, y=df.percent, ax=ax3)
plt.show()

图片

虽然绘制的图表在外观上各具特色,采用的生成方法也不尽相同,但它们背后都是由 Matplotlib 的对象构成的,编辑图表的方式方法是一致的。

2.定制化图表设计

绘制好柱状图后,就可以通过与坐标轴、图形以及其他元素的交互来对图表进行个性化定制。

具体来说,既可以利用 Seaborn 提供的函数来进行快速定制,也可以深入到 Matplotlib 的对象层面进行精细调整。Pandas 在简化绘图流程方面有其独到之处,但它主要负责图表的生成,而不提供直接编辑 Matplotlib 对象的功能。

接下来,对图表进行一系列的修改。首先,设置统一的主题风格。然后,利用 Seaborn 的功能去除图上的脊线,并添加必要的标签。最后,通过 Matplotlib 来调整坐标轴的刻度、图表的标题以及图例的样式。

sb.set_theme(style="whitegrid")
f, (ax1, ax2, ax3) = plt.subplots(3, figsize=(10, 16))ax1.bar(df.label, df.percent)
df.plot(x='label', y='percent', kind='bar', ax=ax2)
sb.barplot(x=df.label, y=df.percent, ax=ax3)sb.despine(f)
for ax in [ax1, ax2, ax3]:container = ax.containers[0]labels = ["{:g}%".format(val * 100) for val in container.datavalues]ax.bar_label(container, labels=labels)ax.grid(False)ax.grid(axis='y')ticks = np.arange(0, 1.1, 0.1)tick_labels = ["{:g}%".format(val) for val in ticks]ax.set_yticks(ticks, tick_labels)ax.legend([])ax.get_legend().remove()ax.set_ylabel('Y 轴')ax.set_xlabel('X 轴')ax.set_title('你好,世界', fontsize=16)
plt.show()

图片

3.横向柱状图

要在 Matplotlib 中实现柱状图 90 度旋转,需要将方法.bar 更改为.barh

对于 Seaborn,如果 X 轴是数值字段且 Y 轴代表字符串字段,那么会自动绘制横向柱状图。若 X 和 Y 轴均为数值字段,则可以通过设置参数orient='h' 来强制图表以水平方式展示。

至于 Pandas,虽然初看之下令人有些困惑,但实际操作起来并不复杂。只需要将绘图类型的参数kind改为 "barh"就行。需要注意的是,在这种情况下,X 轴和 Y 轴的参数是相反的,因此即便标签显示在 Y 轴上,也需要将其作为 X 轴的参数传递。

f, (ax1, ax2, ax3) = plt.subplots(3, figsize=(10, 12))
ax1.barh(df.label, df.percent)df.plot(x='label', y='percent', kind='barh', ax=ax2)sb.barplot(data=df, x='percent', y='label', orient='h', ax=ax3)
sb.despine(f)for ax in [ax1, ax2, ax3]:container = ax.containers[0]labels = ["{:g}%".format(val * 100) for val in container.datavalues]ax.bar_label(container, labels=labels)ax.grid(False)ax.grid(axis='x')ticks = np.arange(0, 1.1, 0.1)tick_labels = ["{:g}%".format(val) for val in ticks]ax.set_xticks(ticks, tick_labels)ax.legend([])ax.get_legend().remove()ax.set_ylabel('Y 轴')ax.set_xlabel('X 轴')ax.set_title('你好,世界', fontsize=16)plt.tight_layout()
plt.show()

图片

4.分组/聚类柱状图

Seaborn 为 Matplotlib 增添了许多强大的功能,Pandas 也提供了简化数据可视化的方法。

使用 Matplotlib 绘制聚类柱状图时,需要确保 X 轴是数值类型,以便于调整柱状的具体位置,同时,通常还需要对每组柱状应用.bar函数。

相较之下,在 Seaborn 和 Pandas 中绘制聚类柱状图更加简便直接。

f, (ax1, ax2, ax3) = plt.subplots(3, figsize=(12, 8))x = np.arange(0, len(df.label))
ax1.bar(x - 0.3, df.percent, width=0.3)
ax1.bar(df.label, df.remaining, width=0.3)df.plot(x='label', y=['percent', 'remaining'], kind='bar', ax=ax2)df2 = df.melt(id_vars=['label'], value_vars=['percent', 'remaining'])
sb.barplot(data=df2, x='label', y='value', hue='variable', ax=ax3)sb.despine(f)for ax in [ax1, ax2, ax3]:for container in ax.containers:values = container.datavalues * 100labels = ["{:g}%".format(val) for val in values]ax.bar_label(container, labels=labels)ax.grid(False)ax.grid(axis='y')ticks = np.arange(0, 1.1, 0.1)tick_labels = ["{:g}%".format(val * 100) for val in ticks]ax.set_yticks(ticks, tick_labels)ax.legend([])ax.get_legend().remove()ax.set_ylabel('Y 轴')ax.set_xlabel('X 轴')ax.set_title('你好,世界', fontsize=16)plt.show()

图片

Pandas 提供了便利,支持通过传递 Y 轴字段的列表来自动绘制聚类柱状图,此时,每个柱状组对应一列数据。

而在 Seaborn 中,可以通过定义 Hue 来控制数据的分组和着色方式。为了实现这一点,需要两列数据:一列用于区分所有的值,另一列则用于指定柱状的类别或组。在上面的例子中,需要对 DataFrame 进行重塑,以适配 Seaborn 的绘图要求。

Seaborn 在美化图表方面表现非常出色,提供的易于使用的函数和多样化的图表类型,为数据可视化增添了许多价值。Pandas 在快速生成图表方面也毫不逊色。无需额外库的辅助,就能够用极简的代码快速生成美观的图表。不过无论是 Seaborn 还是 Pandas,二者都基于 Matplotlib 构建。因此,只要对 Matplotlib 的架构和对象有深刻理解,就能够轻松地定制图表。

此外,可以巧妙地结合这三个库的优势,共同完成可视化任务。可以首先使用 Pandas 快速生成图表框架,然后通过 Seaborn 应用美观的主题样式,最后利用 Matplotlib 对图表的各个细节进行精细打磨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub靶机struts2环境下的s2-032(CVE-2016-3081)(远程命令执行漏洞)

影响范围 Struts 2.3.19至2.3.20.2、2.3.21至2.3.24.1和2.3.25至2.3.28 当用户提交表单数据并验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。 漏洞搭建 没有特殊要求,请看 (3…

EasyImage2.0 图床源码

EasyImage2.0 是一个简单图床的源码,它支持以下功能: 1. API接口 2. 登录后才能上传图片 3. 设置图片质量 4. 压缩图片大小 5. 添加文字或图片水印 6. 设定图片的宽度和高度 7. 将上传的图片转换为指定的格式 8. 限制上传图片的最小宽度和高度 …

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Java入门基础学习笔记19——关系运算符、逻辑运算符

关系运算符: 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或false。 注意:在java中判断是否相等一定是“”,不要把“”写成“”,“”是赋值表达式。 package c…

社区新零售:家门口的便利与温暖

社区新零售:家门口的便利与温暖 随着都市生活节奏的加快,人们对于便捷、高效的生活方式有了更高的追求。社区新零售,作为零售业的一股新兴力量,正以其独特的魅力,悄然改变着我们的日常生活。 家门口的便利 社区新零…

嵌入式学习第三十三天!(二叉树)

1. 树的概念: 1. 树:由n个结点组成的有限集,有且只有一个根结点(由根结点可以访问后继结点),其他结点只有一个前驱结点,但可以有多个后继结点(一对多)。当n 0时&#xf…

OpenAI 刚刚宣布了 “GPT-4o“ 免费用户开放、通过 API 可用

OpenAI 刚刚宣布了 “GPT-4o”。它可以通过语音、视觉和文本进行推理。 该模型速度提高了 2 倍,价格降低了 50%,比 GPT-4 Turbo 的速率限制高出了 5 倍。 它将对免费用户开放、通过 API 可用。 与 GPT-4 相比,GPT-4o 的速度和额外的编码能力…

揭秘APP广告:变现逻辑全解析!

在当今的移动互联网时代,APP广告变现已经成为了各大应用开发者的主要营收来源之一。然而,随着科技的发展、用户行为的变化以及广告市场趋势的演进,APP广告变现逻辑也正在不断地进行优化和调整。本文将基于当前市场和技术趋势,为大…

Proteus新手入门之初学体验

Proteus是嵌入式工程师比较喜欢用的,可以实现从原理图布图、代码调试到单片机与外围电路协同仿真。作为一款功能强大的电子电路仿真软件,Proteus为电子爱好者和工程师们提供了一个理想的平台,用于设计、测试和验证各种电子电路。对于初学者来…

CSS 块状元素

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

Saas详解

1. 什么是Saas SaaS(Software-as-a-Service),简单点理解就是软件即服务,即通过网络提供软件服务。 在SaaS模型中,用户不需要在本地安装软件,而是通过网络(通常是浏览器)访问应用程…

LeetCode算法题:49. 字母异位词分组(Java)

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", …

答辩PPT自述稿如何准备?笔灵AI答辩PPT,自动生成演讲稿

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

试试这四个AI论文工具和降重技术,低成本高回报

在科研领域,AI写作工具如同新一代的科研利器,它们能够极大提高文献查阅、思路整理和表达优化的效率,本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息,还帮助我们精确提炼中心思想,显著提升论文写作…

研发管理-选择研发管理系统-研发管理系统哪个好

选择研发管理系统-研发管理系统哪个好 选择研发管理系统时,并没有一个绝对的“最好”的系统,因为每个企业的需求和情况都是独特的。然而,我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统,供您参考: 1、彩…

MathType7.9中文官方最新破解汉化版无需许可证激活码

MathType是一个功能强大的数学公式编辑器,它能够帮助用户轻松地创建、编辑和排版各种数学公式。无论是学生、教师还是科研人员,都可以从MathType的丰富功能中受益。本文将为您详细介绍MathType的主要功能和使用方法,帮助您更好地利用这个工具…

web网页录音(recorder.js)并上传后端语音转文字(Vosk)

我是一个后端开发人员,现在都快进化成全栈了。操了,是谁有好的项目让我跳跳槽,转转行吧 写在前面,很重要 这是官方文档的说明 翻译如下: 我们有两种型号-大型号和小型号,小型号非常适合在移动应用程序上执…

远程服务器AutoDL登录/配环境/部署运行大模型方法

1. AutoDL autodl平台,是一个功能强大的本地大语言模型LLM运行专家,为用户提供了简单高效的方式来运行大型语言模型.通过优化设置和配置细节。 地址:AutoDL官方地址 2. 登录远程服务器方式 登录远程服务器的方式和工具有很多种 2.1 方法一 用AutoDL…

应用层(上篇)

应用层 应用层协议原理 网络应用程序体系解构 应用程序体系结构: 由应用程序研发者设计规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等…

24.5.12(23广东,19陕西)(字典树)

星期一: dp题单 区间dp第三题 二叉搜索树 cf传送门 思路:dp【i】【j】【0/1】表示区间 i到 j,以 i / j为根节点能否形成一棵二叉搜索树 因为题目要求组成二叉搜索树,若 i 到 j 的节点为一颗完整的子…