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

news2024/10/6 14:30:37

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

1.构建数据图表的基础

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

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import numpy as np

data = {
    '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 * 100
        labels = ["{: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.coloradmin.cn/o/1672241.html

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

相关文章

ONVIF系列三:ONVIF客户端实现

ONVIF系列: ONVIF系列一:ONVIF介绍 ONVIF系列二:Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三:ONVIF客户端实现 在系列二中完成了在Ubuntu上安装gSOAP并生成ONVIF代码框架,接下来我们利用生成的框架实现ONVIF客户端…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能,需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数: HMB建议值(HMPRE):设定实际分配给HMB使用的主机内存容量,为设备提供最优性能的内存分配量。 HMB最小值…

冥想的时候怎么专注自己

冥想的时候怎么专注自己?我国传统的打坐养生功法,实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐,有上千年之久的功效。因为当你们打坐进入永恒时,时间停止了。这不只是两个半小时,而是百千万亿年…

Github上5个实用的ChatGPT仓库

ChatGPT是一款基于聊天场景的大模型AI,最近火出圈。 Chat表示聊天,GPT表示大模型算法,它通过生成式的人机对话功能,让使用者第一次有了AI机器人‘懂我‘的感觉,而不是Siri、小爱那种傻瓜式的语音服务。 ChatGPT不仅仅…

现货黄金白银行情走高带来的投资机会分析

当现货黄金和白银行情呈现出走高的态势时,这常常被投资者解读为一个潜在的投资机会。本文旨在分析在黄金白银价格上涨时的投资机会,并指出应对策略。 一、走高行情背后的机会 行情的上升,往往代表了市场在某种程度上的认可,无论这…

知乎知+广告推广该如何做?怎么收费?

知乎作为一个汇聚高质量用户群体的知识分享平台,成为了众多品牌和产品推广的优选之地。特别是知乎的“知”广告推广服务,以其精准定向、内容原生的特点,深受广告主青睐。 一、知乎知广告推广基础 1. 什么是知乎知? 知是知乎官方…

企业网站慎用免费SSL证书!OV证书才是首选

市面上有很多免费证书提供,免费的SSL证书更适用于个人博客、学生学习、测试等应用场景。如果您的网站是企业网站一定慎用免费的SSL证书,而是选择企业级的OV证书。 一.免费SSL证书的风险 1安全性:免费SSL证书通常只提供基本的加密…

全新Transformer模型:全球与局部双重突破!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索视觉变换器在对象重识别中的全局与局部特征 在对象重识别(Re-ID)的研究领域中,如何有效地从不同时间…

pytest教程-45-钩子函数-pytest_report_testitemFinished

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_report_collectionfinish钩子函数的使用方法,本小节我们讲解一下pytest_report_testitemFinished钩子函数的使用方法。 pytest_report_testitemFinished 钩子函数在每个测试…

7天精通Web APIs——正则阶段案例(理论+实战)(第六天)

正则表达式的定义和使用 定义:是一种匹配模式,用于匹配字符串中字符组合 作用:表单验证(匹配)、过滤敏感词(替换)、字符串中提取我们想要的部分(提取) 使用分为两步&…

MySQL-InnoDB数据存储结构

1、存储结构-页 索引结构提供了高效的索引方式,索引信息以及数据记录都保存在数据文件或索引文件中(本质存储在页结构中) 1.1、磁盘与内存交互的基本单位:页 在InnoDB中将数据划分为若干页,页的默认大小为&#xff…

SQLZOO:The JOIN operation

数据表:game-gaol-eteam game idmdatestadiumteam1team210018 June 2012National Stadium, WarsawPOLGRE10028 June 2012Stadion Miejski (Wroclaw)RUSCZE100312 June 2012Stadion Miejski (Wroclaw)GRECZE100412 June 2012National Stadium, WarsawPOLRUS... goal …

@游戏行业er!MongoDB广州线下沙龙邀您报名!

随着游戏和应用程序的发展,数据变得越来越重要。在为您的下一个游戏选择数据库时,数据库管理者常常会面对灵活性、可扩展性、可靠性、运营效率等问题或挑战。 MongoDB在游戏开发领域有着广泛的应用,灵活数据模型可以存储和处理各种类型的数据…

C++--String类

系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 一、为什么要学习string 1.c语言的字符串 2.OJ上的使用 二、string类的接口介绍 1.string简介 2.string构造成员函数 3.operator函数 4.string容器size和length 5.重载operator[]和引用返回的意义 5.1 oper…

嫦娥六号揭秘真相:阿波罗登月是真是假?一文终结所有疑问!

近期,嫦娥六号的成功发射如同璀璨的星辰,再次将人们的视线聚焦于浩瀚的宇宙,与此同时,网络上关于美国阿波罗登月是否造假的争议也如潮水般涌现。一些声音宣称,嫦娥六号的发射为揭示美国阿波罗登月任务的真实性提供了关…

Java面试八股之String类的常用方法有哪些

Java中String类的常用方法有哪些 获取字符串信息: length():返回字符串的字符数。 isEmpty():判断字符串是否为空(即长度为0)。 访问单个字符: charAt(int index):返回指定索引处的字符。 …

InstantStyle —— 文本到图像生成中的风格保持新突破

在人工智能领域,文本到图像生成(Text-to-Image Generation)技术正迅速发展,其应用范围从娱乐到专业设计不断扩展。然而,风格一致性生成一直是该领域的一个技术难题。最近,InstantX团队提出了一种名为Instan…

GEVernova推出GEV新能源平台,引领新能源未来

近日,全球领先的能源设备制造和服务公司 GE Vernova 宣布推出 GEV 新能源平台,这是一个将金融、科技和产业深度融合的全新投资平台。GEV 新能源平台旨在为用户提供一站式可持续新能源投资解决方案,助力全球新能源转型和可持续发展。 新能源已…

vs-qt中无法加载qsqlite驱动,但是单独新建demo测试却又是正常的。。。

开发环境: Vs2015 + qt5.12 背景: 接手了一个项目,可以编译过去,也可以运行,, 但是登录一直失败,,但是数据库文件也是正常的。。。 最主要的是环境和同事的是一样的,,,但是他那边可以加载成功,我这边不可以。。 后来单独在vs中创建了一个demo,用来测试QSqlData…

如何高效管理微信?快速掌握捷径!

对于那些需要管理多个微信号的人来说,如何高效地管理这些账号成为了一个难题。今天,就给大家分享一个管理多个微信号的捷径——微信管理系统。 通过微信管理系统,你可以轻松实现高效管理多个微信号,一起来看看吧! 首…