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


🎬 鸽芷咕个人主页
🔥 个人专栏 : 《C++干货基地》《粉丝福利》

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


  • 博主简介

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

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

文章目录

一、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()函数来显示绘制好的图表。这个函数会将之前在图形对象和坐标轴对象上进行的所有操作结果显示出来,使我们能够看到最终的可视化效果。

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

python 复制代码
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参数来分别设置标记的填充颜色和边缘颜色,进一步定制标记的外观。

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

python 复制代码
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]表示第一行第二列的子图坐标轴,以此类推。
  • 在子图中绘制不同内容
    • 一旦创建了子图布局,就可以在每个子图的坐标轴对象上进行独立的绘图操作。例如,可以在不同的子图中绘制不同的数据系列、不同类型的图表或者对同一数据进行不同视角的展示。

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

python 复制代码
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参数则用于设置箭头的样式,这里设置为一个向右的箭头。标注在突出显示图表中的特定数据点、解释数据特征或趋势等方面非常有用。

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

python 复制代码
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函数可能会改变图形的某些属性,导致保存的结果与预期不符。

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

python 复制代码
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绘制简单散点图的示例:

python 复制代码
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 的使用技巧对你有所帮助,让你在数据可视化的道路上更加得心应手。

相关推荐
深度学习lover32 分钟前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
API快乐传递者2 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
励志成为嵌入式工程师2 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
阡之尘埃3 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
记录成长java4 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山4 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js