Python 知识宝库 —— 数据可视化:matplotlib 与 seaborn 的使用技巧

news2024/9/29 19:46:02

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

  • 博主简介

博主致力于嵌入式、Python、人工智能、C/C++领域和各种前沿技术的优质博客分享,用最优质的内容带来最舒适的阅读体验!在博客领域获得 C/C++领域优质、CSDN年度征文第一、掘金2023年人气作者、华为云享专家、支付宝开放社区优质博主等头衔。

  • 个人社区 & 个人社群 加入点击 即可

加入个人社群即可获得博主精心整理的账号运营技巧,对于技术博主该如何打造自己的个人IP。带你快速找你你自己的账号定位为你扫清一切账号运营和优质内容输出问题。

文章目录

    • 一、matplotlib简介及基本使用
      • 1. 安装与导入
      • 2. 基本绘图流程
    • 二、matplotlib的使用技巧
      • 1. 自定义图表样式
      • 2. 多子图绘制
      • 3. 图例和标注
      • 4. 保存图表
    • 三、seaborn简介及基本使用
      • 1. 安装与导入
      • 2. 基本绘图流程
    • 四、seaborn的使用技巧
      • 1. 美化图表外观
  • 五、总结

一、matplotlib简介及基本使用

1. 安装与导入

  • 安装:matplotlib是一个广泛使用的Python绘图库,可以通过简单的pip install matplotlib命令轻松安装。这一安装过程会将matplotlib及其依赖项下载并配置到您的Python环境中。
  • 导入:在Python脚本或交互式环境中,习惯上使用import matplotlib.pyplot as plt语句导入matplotlib的绘图功能,并将其简称为plt。这样的导入方式使得后续调用绘图函数更加简洁方便。

2. 基本绘图流程

  • 创建图形和坐标轴
    • 首先,使用plt.figure()函数创建一个新的图形对象。这个图形对象就像是一块画布,后续的所有绘图操作都将在这块画布上进行。
    • 接着,通过ax = plt.subplot()创建坐标轴对象。这里的坐标轴对象定义了绘图的区域、坐标系统等属性。例如,subplot函数可以接受参数来指定子图的布局,如plt.subplot(1, 1, 1)表示创建一个1行1列的子图布局中的第一个(也是唯一的一个)子图。
  • 绘制数据
    • 一旦有了坐标轴对象,就可以使用它的各种绘图方法来绘制不同类型的数据。例如,ax.plot()用于绘制折线图,它接受两个长度相同的数组或列表作为参数,分别表示x轴和y轴的数据点。如果要绘制散点图,可以使用ax.scatter(),它同样接受x和y轴的数据作为参数。而ax.bar()函数则用于绘制柱状图,需要提供柱子的位置(通常是x轴的值)和高度(y轴的值)。
  • 设置图表属性
    • 标题是图表的重要组成部分,可以使用ax.set_title('Your Title Here')来设置图表的标题,让读者一眼就能了解图表的大致内容。
    • 坐标轴标签则明确了坐标轴所代表的变量含义,使用ax.set_xlabel('X - axis label')ax.set_ylabel('Y - axis label')来分别设置x轴和y轴的标签。
    • 对于坐标轴的刻度,matplotlib提供了多种设置方式。例如,可以使用ax.set_xticks([tick1, tick2, tick3,...])来手动设置x轴的刻度位置,使用ax.set_yticks([tick1, tick2, tick3,...])设置y轴的刻度位置。同时,还可以通过ax.set_xticklabels(['label1', 'label2', 'label3',...])ax.set_yticklabels(['label1', 'label2', 'label3',...])为刻度添加自定义的标签。
    • 如果图表中有多个数据系列,添加图例可以帮助区分不同的系列。在绘制数据时,可以为每个系列指定label参数,如ax.plot(x, y1, label='Series 1')ax.plot(x, y2, label='Series 2'),然后通过ax.legend()来显示图例。
  • 显示图表
    • 最后,使用plt.show()函数来显示绘制好的图表。这个函数会将之前在图形对象和坐标轴对象上进行的所有操作结果显示出来,使我们能够看到最终的可视化效果。

以下是一个简单的示例,展示了如何绘制一个基本的折线图:

import matplotlib.pyplot as plt

# 数据准备
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 创建图形和坐标轴
plt.figure()
ax = plt.subplot()

# 绘制折线图
ax.plot(x, y)

# 设置标题、坐标轴标签
ax.set_title('Simple Line Plot')
ax.set_xlabel('X - axis')
ax.set_ylabel('Y - axis')

# 显示图表
plt.show()

二、matplotlib的使用技巧

1. 自定义图表样式

  • 设置线条样式
    • 除了默认的实线样式,matplotlib提供了多种线条样式供选择。通过linestyle参数可以轻松设置线条的样式。例如,ax.plot(x, y, linestyle='--')将绘制虚线,linestyle=':'会绘制点线,linestyle='-.'则绘制点划线。这种多样化的线条样式在绘制多个数据系列时非常有用,可以通过不同的线条样式来区分不同的系列,增强图表的可读性。
  • 设置颜色
    • 在matplotlib中,可以使用多种方式来指定颜色。最直观的是使用颜色名称,如'red''blue''green'等。此外,还可以使用十六进制颜色代码,例如'#FF0000'表示红色,'#0000FF'表示蓝色。如果更倾向于使用RGB值,可以像(1, 0, 0)表示红色(这里的取值范围是0到1)这样来指定颜色。例如,ax.plot(x, y, color='red')将绘制红色的线条,ax.plot(x, y, color='#00FF00')将绘制绿色的线条。
  • 设置标记样式
    • 数据点的标记样式可以通过marker参数进行设置。常见的标记样式有圆形('o')、方形('s')、三角形('^')等。例如,ax.plot(x, y, marker='o')会在每个数据点上显示圆形标记,ax.plot(x, y, marker='s')则显示方形标记。同时,还可以结合markerfacecolormarkeredgecolor参数来分别设置标记的填充颜色和边缘颜色,进一步定制标记的外观。

以下是一个综合展示自定义图表样式的示例:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.figure()
ax = plt.subplot()

# 设置线条样式为虚线,颜色为蓝色,标记样式为三角形,标记填充色为黄色,边缘色为黑色
ax.plot(x, y, linestyle='--', color='blue', marker='^', markerfacecolor='yellow', markeredgecolor='black')

ax.set_title('Customized Line Plot')
ax.set_xlabel('X - axis')
ax.set_ylabel('Y - axis')

plt.show()

2. 多子图绘制

  • 使用subplots方法创建子图布局
    • plt.subplots()函数是创建多子图布局的强大工具。它可以接受nrowsncols参数来指定子图的行数和列数。例如,fig, axes = plt.subplots(nrows = 2, ncols = 2)将创建一个2行2列的子图布局。这个函数会返回一个图形对象fig和一个包含坐标轴对象的二维数组axes。通过索引这个二维数组,可以访问每个子图的坐标轴对象,如axes[0, 0]表示第一行第一列的子图坐标轴,axes[0, 1]表示第一行第二列的子图坐标轴,以此类推。
  • 在子图中绘制不同内容
    • 一旦创建了子图布局,就可以在每个子图的坐标轴对象上进行独立的绘图操作。例如,可以在不同的子图中绘制不同的数据系列、不同类型的图表或者对同一数据进行不同视角的展示。

以下是一个绘制多个子图的示例,展示了不同三角函数的图像:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)

fig, axes = plt.subplots(nrows = 2, ncols = 2)

# 在第一个子图中绘制正弦函数
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('Sin(x)')

# 在第二个子图中绘制余弦函数
axes[0, 1].plot(x, y2)
axes[0, 1].set_title('Cos(x)')

# 在第三个子图中绘制正切函数
axes[1, 0].plot(x, y3)
axes[1, 0].set_title('Tan(x)')

# 在第四个子图中绘制指数函数
axes[1, 1].plot(x, y4)
axes[1, 1].set_title('Exp(x)')

# 调整子图之间的间距,使布局更美观
plt.tight_layout()
plt.show()

3. 图例和标注

  • 添加图例
    • 如前面所述,在绘制数据时为每个系列指定label参数是添加图例的第一步。例如,ax.plot(x, y1, label='Series 1')ax.plot(x, y2, label='Series 2')。然后,调用ax.legend()函数来显示图例。此外,还可以通过loc参数来指定图例的位置,例如ax.legend(loc='upper right')将图例放置在右上角,loc='lower left'则将图例放置在左下角。图例的位置选择应该以不遮挡图表中的重要信息为原则。
  • 添加标注
    • 使用annotate方法可以在图表上添加标注。这个方法接受多个参数来精确控制标注的内容、位置和样式。例如,ax.annotate('Important Point', xy=(x_value, y_value), xytext=(x_text, y_text), arrowprops=dict(arrowstyle='->'))。其中,'Important Point'是标注的文本内容,xy参数指定了被标注的数据点的坐标,xytext参数指定了标注文本的起始坐标,arrowprops参数则用于设置箭头的样式,这里设置为一个向右的箭头。标注在突出显示图表中的特定数据点、解释数据特征或趋势等方面非常有用。

以下是一个添加图例和标注的示例:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]

plt.figure()
ax = plt.subplot()

# 绘制两条线并指定标签
ax.plot(x, y1, label='Line 1')
ax.plot(x, y2, label='Line 2')

# 添加图例并放置在右上角
ax.legend(loc='upper right')

# 找到y1中的最大值及其对应的x值
max_index = y1.index(max(y1))
x_max = x[max_index]
y_max = y1[max_index]

# 添加标注指向y1的最大值点
ax.annotate('Max Value of Line 1', xy=(x_max, y_max), xytext=(x_max + 0.5, y_max + 1), arrowprops=dict(arrowstyle='->'))

ax.set_title('Line Plot with Legend and Annotation')
ax.set_xlabel('X - axis')
ax.set_ylabel('Y - axis')

plt.show()

4. 保存图表

  • 使用savefig方法保存图表
    • plt.savefig()方法用于将绘制好的图表保存为图像文件。可以指定文件名作为参数,并且可以选择不同的文件格式,如'png''jpg''pdf'等。例如,plt.savefig('my_plot.png', dpi = 300)将把当前图表保存为名为my_plot.png的PNG图像文件,并且设置分辨率为300dpi。较高的分辨率在需要高质量打印或者在大屏幕上展示图表时非常有用。如果想要保存为PDF格式,可以使用plt.savefig('my_plot.pdf')。需要注意的是,在保存图表之前,不需要调用plt.show(),因为show函数可能会改变图形的某些属性,导致保存的结果与预期不符。

以下是一个保存图表的示例:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.figure()
ax = plt.subplot()

ax.plot(x, y)

ax.set_title('Simple Line Plot')
ax.set_xlabel('X - axis')
ax.set_ylabel('Y - axis')

# 保存图表为PNG格式,分辨率为300dpi
plt.savefig('my_plot.png', dpi = 300)

三、seaborn简介及基本使用

1. 安装与导入

  • 安装:seaborn是一个基于matplotlib的Python数据可视化库,通过pip install seaborn命令即可轻松安装。它依赖于matplotlib,所以在安装seaborn之前需要确保matplotlib已经安装成功。
  • 导入:在Python代码中,通常使用import seaborn as sns语句导入seaborn库,并将其简称为sns,以便在后续代码中方便地调用seaborn的函数。

2. 基本绘图流程

  • 加载数据集
    • seaborn自带了一些示例数据集,这些数据集对于学习和演示seaborn的功能非常有用。可以使用sns.load_dataset('dataset_name')函数来加载数据集,其中'dataset_name'是数据集的名称,例如tipsiris等。这些数据集通常以DataFrame的形式返回,可以直接用于绘图操作。
  • 选择绘图类型
    • seaborn提供了多种绘图函数,每个函数都针对特定类型的可视化需求。例如,sns.lineplot()用于绘制折线图,它可以接受多种参数来定制图表的外观和内容。sns.scatterplot()用于绘制散点图,能够很好地展示两个变量之间的关系。sns.barplot()则用于绘制柱状图,适合比较不同类别之间的数据差异。根据数据的特点和想要展示的信息,选择合适的绘图函数是关键的一步。
  • 设置绘图参数
    • 在seaborn的绘图函数中,可以设置各种参数来调整图表的外观。例如,可以通过color参数设置颜色,通过style参数设置线条或标记的样式,通过size参数调整数据点或柱子的大小等。同时,也可以像在matplotlib中一样添加标题、坐标轴标签等属性,不过在seaborn中,通常使用sns.set_title('Your Title Here')sns.set_xlabel('X - axis label')sns.set_ylabel('Y - axis label')来设置这些属性。

以下是一个使用seaborn绘制简单散点图的示例:

import seaborn as sns

# 加载示例数据集
tips = sns.load_dataset('tips')

# 绘制散点图
sns.scatterplot(x='total_bill', y='tip', data=tips)

# 设置标题和坐标轴标签
sns.set_title('Scatter Plot of Total Bill vs Tip')
sns.set_xlabel('Total Bill')
sns.set_ylabel('Tip')

四、seaborn的使用技巧

1. 美化图表外观

  • 使用style和palette参数调整整体风格和颜色方案
    • sns.set_style('style_name')函数可以快速改变图表的整体风格。seaborn提供了几种预定义的风格,如'whitegrid''darkgrid''white''dark''ticks'等。例如,sns.set_style('whitegrid')将设置图表为白色网格背景,这种风格简洁清晰,适合大多数情况。'darkgrid'则提供了黑色网格背景,适合在需要突出数据点的情况下使用。
    • sns.set_palette('palette_name')函数用于选择颜色调色板。seaborn有多种调色板可供选择,如'husl''Set1''Set2''Set3''Pastel1''Pastel2'等。不同的调色板适用于不同的场景,例如,'husl'调色板提供了丰富而鲜艳的颜色组合,'Set1'调色板适合用于区分少量的类别(最多9个类别)。例如,sns.set_palette('husl')将使用HSL颜色调色板来为图表中的数据系列着色。
  • 去除图表边框
    • 使用sns.despine()方法可以去除图表的边框,使图表看起来更加简洁美观。这个方法默认会去除图表的上下左右四个边框,如果只想去除部分边框,可以通过传递参数来指定。例如,sns.despine(left=True)将只去除左边框,sns.despine(top=False)则会保留上边框。

以下是一个美化图表外观的示例:

import seaborn as sns

tips

五、总结

matplotlib 和 seaborn 是 Python 中两个非常强大的数据可视化库,它们提供了丰富的功能和灵活的操作方式,可以满足各种数据可视化的需求。通过掌握它们的使用技巧,我们可以创建出更加美观、专业的图表,更好地展示和分析数据。在实际应用中,可以根据具体情况选择合适的库和方法,以达到最佳的可视化效果。
希望本文介绍的 matplotlib 和 seaborn 的使用技巧对你有所帮助,让你在数据可视化的道路上更加得心应手。

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

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

相关文章

SpringBoot日常:链路追踪skyworking的接入

前言 开发中遇到这样的一个常见,服务之间调用需要链路追踪,并且日志报错时能够及时预警,最重要的一点是不要写太多的侵入式代码,那么我们来捋捋常用的链路追踪组件,有Google的Dapper,阿里的鹰眼&#xff0…

Excel提取数据

Excel提取数据 在使用Excel的过程中,我需要将带有评语的评分的文本内容提取出评分,如下所示 其中分数与文本之间用空格分隔,只有分数的评语会自动靠右对齐,我需要做的就是将B列的评语从中提取出分数放到C列中,以下为实…

卡牌小程序搭建:多样化在线拆卡体验

潮玩市场已经成为备受消费者瞩目的行业,新兴的潮流玩具不断出现,其中卡牌更是备受广大消费者关注,不管是哪个年龄层的消费者,对卡牌都非常情有独钟。在科技的不断发展下,卡牌的玩法与互联网相结合,打造出了…

如何高效删除 MySQL 日志表中的历史数据?实战指南

在处理高并发的物联网平台或者其他日志密集型应用时,数据库中的日志表往往会迅速增长,数据量庞大到数百GB甚至更高,严重影响数据库性能。如何有效管理这些庞大的日志数据,特别是在不影响在线业务的情况下,成为了一项技…

IPD变革中,数据治理是关键

IPD变革中,数据治理是关键 2024-09-29 14:41汉捷咨询 华为轮值董事长徐直军先生在回顾IPD变革时,提到:“华为IPD变革前期,对数据的关注不够,没有系统梳理产品的信息架构和数据标准,也没有对业务流中的数据…

C++的隐式构造函数、隐式转换和explicit关键字

1、隐式的意思是不用告诉它该怎么做&#xff0c;有点类似于自动化的意思 #include <iostream> #include <string>class Entity { private:std::string m_Name;int m_Age; public:Entity(const std::string& name) :m_Name(name),m_Age(-1){}Entity(int age):…

安全、稳定、SLA高达99.9%:Azure OpenAI数据分离与隔离优势

近期有不少客户&#xff0c;由于其开发的系统软件是面向海外以及政企的&#xff0c;又想通过微软Azure OpenAI服务将大模型接入其业务作为优势&#xff0c;因此非常重视服务的安全性和稳定性。 下面将重点介绍微软Azure OpenAI 服务的数据、隐私和安全内容。 稳定&#xff1a;S…

使用kubectl快速查看各个节点的CPU和内存占用量

本文章视频教程地址&#xff1a;https://www.bilibili.com/video/BV1TdxkedE1K 前言 笔者之前写过一篇文章关于在Kubernetes上安装 Prometheus 和 Grafana 监控去查看Kubernetes各个节点的资源占用率&#xff0c;文章地址&#xff1a;https://blog.csdn.net/m0_51510236/arti…

springcloud 面试题

什么是微服务&#xff1f; 本文导图&#xff1a;SpringCloud 梳理-ProcessOn 分布式架构CAP理论 CAP定理是分布式系统中最基础的原则&#xff0c;所以理解和掌握了CAP对系统架构的设计至关重要。分布式架构下所有系统不可能同时满足以下三点&#xff1a;Consisteny&#xff08…

Unity android 接USBCamera

目录 一、前提 1. unity打包android后&#xff0c;链接USB摄像头&#xff0c;需要USB权限。 二、流程 1.Unity导出android工程&#xff0c;Player配置如图&#xff1a; 2.导出android工程 3.在android工程中找到AndroidManifest.xml加入usb权限相关 <?xml version&quo…

【Immich部署与访问】自托管媒体文件备份服务 Immich 本地化部署与远程访问存储数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

如何在一个高并发的应用中进行调试和测试

在一个高并发的应用中进行调试和测试是一项挑战性的工作&#xff0c;因为它涉及到了系统性能、资源竞争、同步机制以及潜在的并发编程错误等多个方面。下面我会详细解释如何在高并发环境中进行调试和测试&#xff0c;并提供相应的策略和技术。 1. 单元测试 在多线程环境下&am…

YoloV10改进策略:BackBone改进|PoolFormer赋能YoloV10,视觉检测性能显著提升的创新尝试

摘要 在深度学习的广阔领域中,目标检测作为计算机视觉的基石任务之一,始终吸引着研究者的广泛关注。近期,我们大胆尝试将前沿的PoolFormer主干网络引入经典的目标检测框架YoloV10中,这一创新性融合不仅为YoloV10注入了新的活力,更在检测精度与效率上实现了双重飞跃,成为…

如何使用ssm实现小区物业管理系统

TOC ssm733小区物业管理系统jsp 第一章 绪论 1.1 研究背景 在现在社会&#xff0c;对于信息处理方面&#xff0c;是有很高的要求的&#xff0c;因为信息的产生是无时无刻的&#xff0c;并且信息产生的数量是呈几何形式的增加&#xff0c;而增加的信息如何存储以及短时间分析…

分治(归并排序)

一、基本思路 我们以一个归并排序为例。 . - 力扣&#xff08;LeetCode&#xff09; 归并排序的思想&#xff1a;得到两个有序数组&#xff0c;把两个有序数组合并&#xff0c;传到下一层递归&#xff0c;一直得到两个有序数组&#xff0c;一直合并&#xff0c;最后就能得到有…

汽车信息安全 -- 再谈车规MCU的安全启动

目录 1. 安全启动流程回顾 1.1 TC3xx的安全启动 1.2 RH850的安全启动 1.3 NXP S32K3的安全启动 1.4 小结 2.信任链的问题 3.国产HSM IP的拓展 今天接着 汽车信息安全 -- 存到HSM中的密钥还需包裹吗&#xff1f;-CSDN博客这篇文章深究另一个重要功能-- 安全启动。 该文章…

华为OD机试 - 对称美学(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

深度学习------------------------RNN(循环神经网络)

目录 潜变量自回归模型循环神经网络困惑度梯度剪裁循环神经网络的从零开始实现初始化循环神经网络模型的模型参数初始化隐藏状态创建一个类来包装这些函数该部分总代码 定义预测函数该部分总代码 梯度裁剪定义一个函数在一个迭代周期内训练模型训练函数 循环神经网络的简洁实现…

JS设计模式之观察者模式:观察者与可观察对象的巧妙互动

一. 前言 在前端开发中&#xff0c;我们经常会遇到需要对用户的操作进行响应的场景&#xff0c;例如页面上的按钮点击、输入框内容变化等。为了实现这种响应式的设计&#xff0c;我们可以使用观察者模式来解耦各个组件之间的依赖关系。 本文将详细介绍观察者模式的原理和实现…

【FaceFusion3.0.0】全新升级,重磅发布!

FaceFusion 3.0.0 版本引入了许多新特性和改进&#xff0c;其中包括&#xff1a; 重新设计架构&#xff0c;使所有操作都作为“任务”进行处理。在面部交换功能中引入像素增强(pixel boost)。向面部检测器添加多角度处理功能。引入年龄修正处理器(age modifier processor)。引…