当前位置: 首页 > news >正文

【深度学习-Day 8】让数据说话:Python 可视化双雄 Matplotlib 与 Seaborn 教程

Langchain系列文章目录

01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!
07-【深度解析】从GPT-1到GPT-4:ChatGPT背后的核心原理全揭秘
08-【万字长文】MCP深度解析:打通AI与世界的“USB-C”,模型上下文协议原理、实践与未来

Python系列文章目录

PyTorch系列文章目录

机器学习系列文章目录

深度学习系列文章目录

Java系列文章目录

JavaScript系列文章目录

深度学习系列文章目录

01-【深度学习-Day 1】为什么深度学习是未来?一探究竟AI、ML、DL关系与应用
02-【深度学习-Day 2】图解线性代数:从标量到张量,理解深度学习的数据表示与运算
03-【深度学习-Day 3】搞懂微积分关键:导数、偏导数、链式法则与梯度详解
04-【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
05-【深度学习-Day 5】Python 快速入门:深度学习的“瑞士军刀”实战指南
06-【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南
07-【深度学习-Day 7】精通Pandas:从Series、DataFrame入门到数据清洗实战
08-【深度学习-Day 8】让数据说话:Python 可视化双雄 Matplotlib 与 Seaborn 教程


文章目录

  • Langchain系列文章目录
  • Python系列文章目录
  • PyTorch系列文章目录
  • 机器学习系列文章目录
  • 深度学习系列文章目录
  • Java系列文章目录
  • JavaScript系列文章目录
  • 深度学习系列文章目录
  • 前言
  • 一、为什么需要数据可视化?
    • 1.1 直观理解数据
    • 1.2 发现模式与趋势
    • 1.3 清晰传达结果
  • 二、Matplotlib:Python 可视化的基石
    • 2.1 Matplotlib 简介
      • 2.1.1 什么是 Matplotlib?
      • 2.1.2 安装 Matplotlib
    • 2.2 Matplotlib 核心概念
      • 2.2.1 Figure 与 Axes
      • 2.2.2 Pyplot 接口
    • 2.3 绘制基本图形
      • 2.3.1 折线图 (Line Plot)
        • (1)应用场景
        • (2)代码示例
      • 2.3.2 散点图 (Scatter Plot)
        • (1)应用场景
        • (2)代码示例
      • 2.3.3 柱状图 (Bar Plot)
        • (1)应用场景
        • (2)代码示例
    • 2.4 图像定制化
      • 2.4.1 添加标题和标签
      • 2.4.2 修改颜色、线型和标记
      • 2.4.3 添加图例
      • 2.4.4 代码示例:综合定制
  • 三、Seaborn:让可视化更美观
    • 3.1 Seaborn 简介
      • 3.1.1 什么是 Seaborn?
      • 3.1.2 Seaborn 与 Matplotlib 的关系
      • 3.1.3 安装 Seaborn
    • 3.2 使用 Seaborn 增强可视化
      • 3.2.1 风格设置
      • 3.2.2 常用绘图函数
        • (1)关系图 (Relational Plots)
        • (2)分类图 (Categorical Plots)
        • (3)分布图 (Distribution Plots)
        • (4)热力图 (Heatmaps)
      • 3.2.3 代码示例:使用 Seaborn 绘制美观图形
  • 四、实战:可视化 NumPy 与 Pandas 数据
    • 4.1 使用 Matplotlib 可视化 NumPy 数组
      • 4.1.1 场景描述
      • 4.1.2 代码示例
    • 4.2 使用 Seaborn 可视化 Pandas DataFrame
      • 4.2.1 场景描述
      • 4.2.2 代码示例
  • 五、常见问题与选择建议
    • 5.1 Matplotlib vs Seaborn:何时选择哪个?
    • 5.2 图像不显示或中文乱码问题
        • (1)图像不显示
        • (2)中文乱码问题
  • 六、总结


前言

在深度学习的征途中,我们不仅需要与冰冷的数字和复杂的算法打交道,更需要一种直观的方式来理解数据、洞察模型行为并有效地展示研究成果。“一图胜千言”,数据可视化正是连接数据与洞察的桥梁。它能够帮助我们发现隐藏在数据背后的模式、趋势和异常点,从而更好地指导我们的数据分析和模型调优工作。

在 Python 的生态系统中,Matplotlib 和 Seaborn 是两个功能强大且广受欢迎的数据可视化库。Matplotlib 提供了灵活的底层绘图接口,几乎可以绘制任何类型的静态、动态、交互式图表。而 Seaborn 则构建于 Matplotlib 之上,提供了更高级别的接口,使得创建美观且信息丰富的统计图形变得更加容易。

本篇文章作为深度学习基础准备阶段的第八篇,将带领大家系统学习如何使用 Matplotlib 和 Seaborn 这两大神器,让您的数据和模型结果“说话”,为后续的深度学习实践打下坚实的视觉分析基础。

一、为什么需要数据可视化?

在深入学习具体的绘图库之前,我们首先需要理解数据可视化为什么如此重要。简单来说,数据可视化主要有以下三个方面的核心价值:

1.1 直观理解数据

人类大脑对视觉信息的处理远胜于对抽象数字的处理。通过将数据转换成图形,我们可以更快速、更直观地把握数据的分布、集中趋势、离散程度等关键特征。例如,一组看似杂乱无章的销售数据,通过折线图可以清晰地展示其随时间的变化趋势。

1.2 发现模式与趋势

数据可视化是探索性数据分析(EDA)的关键环节。通过绘制不同类型的图表,我们可以更容易地发现数据中隐藏的模式、相关性、聚类以及异常值。这些发现对于特征工程、模型选择和问题诊断至关重要。例如,通过散点图矩阵,我们可以快速识别不同特征之间的线性或非线性关系。

1.3 清晰传达结果

无论是学术研究、商业报告还是项目演示,清晰、有效地传达分析结果都至关重要。精美的图表不仅能让观众更容易理解复杂的分析结果,还能增强报告的说服力和专业性。一个精心设计的可视化作品,其传递信息的效率远高于冗长的文字描述。

二、Matplotlib:Python 可视化的基石

Matplotlib 是 Python 中应用最广泛的绘图库,它几乎是所有其他 Python 可视化库(包括 Seaborn)的基础。学习 Matplotlib 能让我们掌握最底层的绘图逻辑,从而实现高度定制化的可视化需求。

2.1 Matplotlib 简介

2.1.1 什么是 Matplotlib?

Matplotlib 是一个用于创建高质量静态、动态和交互式可视化的 Python 库。它提供了一个类似 MATLAB 的绘图框架,使得用户可以轻松生成各种类型的图表,如折线图、散点图、柱状图、直方图、饼图等。Matplotlib 的设计理念是尽可能地让简单的事情简单化,让复杂的事情成为可能。

2.1.2 安装 Matplotlib

在开始使用 Matplotlib 之前,我们需要先安装它。如果您使用的是 Anaconda 或 Miniconda,可以通过以下命令在终端或 Anaconda Prompt 中安装:

conda install matplotlib

如果您使用的是 pip,则可以使用以下命令:

pip install matplotlib

安装完成后,我们就可以在 Python 脚本或 Jupyter Notebook 中导入并使用它了。

import matplotlib.pyplot as plt
import numpy as np # 通常与 NumPy 结合使用

2.2 Matplotlib 核心概念

理解 Matplotlib 的核心组件是高效使用它的关键。

2.2.1 Figure 与 Axes

在 Matplotlib 中,最顶层的容器是 Figure,可以将其理解为一个画布,所有的绘图元素都将放置在这个画布上。一个 Figure 对象可以包含一个或多个 Axes 对象。

Axes(轴域)才是真正进行绘图的区域,它代表了图表中的一个子图。一个 Axes 对象通常包含两个(或三个,对于3D图)Axis 对象(坐标轴),用于定义数据的范围和刻度。我们可以在一个 Figure 上创建多个 Axes,从而实现多子图的布局。

2.2.2 Pyplot 接口

matplotlib.pyplot 是 Matplotlib 的一个模块,它提供了一个类似 MATLAB 的命令式函数集合,用于快速、便捷地创建图表。通常,我们将其导入为 pltpyplot 模块会自动管理当前的 FigureAxes 对象,使得我们可以直接调用绘图函数而无需显式地创建它们。

2.3 绘制基本图形

接下来,我们将学习如何使用 pyplot 接口绘制几种常见的图形。

2.3.1 折线图 (Line Plot)

折线图通常用于显示数据随某个连续变量(如时间)变化的趋势。

(1)应用场景
  • 展示股票价格随时间的变化。
  • 显示实验测量值随参数的变化。
  • 可视化模型训练过程中的损失值或准确率变化。
(2)代码示例
import matplotlib.pyplot as plt
import numpy as np# 准备数据
x = np.linspace(0, 10, 100) # 生成0到10之间的100个点
y1 = np.sin(x)
y2 = np.cos(x)# 创建一个Figure和一个Axes
fig, ax = plt.subplots()# 绘制折线图
ax.plot(x, y1, label='sin(x)') # 绘制 y1
ax.plot(x, y2, label='cos(x)') # 绘制 y2# 添加标题和标签
ax.set_title('简单折线图示例')
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')# 添加图例
ax.legend()# 显示图形
plt.show()

代码解释:

  • np.linspace(0, 10, 100): 创建一个包含100个从0到10等间隔的数值的NumPy数组。
  • plt.subplots(): 创建一个 Figure 对象和一个 Axes 对象。这是推荐的绘图方式,可以更好地控制图形的各个部分。
  • ax.plot(x, y1, label='sin(x)'): 在 ax (Axes对象) 上绘制折线图。label 参数用于后续生成图例。
  • ax.set_title(), ax.set_xlabel(), ax.set_ylabel(): 设置图形的标题和坐标轴标签。
  • ax.legend(): 显示图例,它会根据 plot 函数中的 label 参数自动生成。
  • plt.show(): 显示绘制好的图形。

2.3.2 散点图 (Scatter Plot)

散点图用于展示两个变量之间的关系,每个点代表一个数据样本。

(1)应用场景
  • 观察两个特征之间的相关性。
  • 识别数据中的聚类或异常点。
  • 比较不同组别的数据分布。
(2)代码示例
import matplotlib.pyplot as plt
import numpy as np# 准备数据
np.random.seed(0) # 设置随机种子以保证结果可复现
x = np.random.rand(50) # 50个0到1之间的随机数
y = 2 * x + 1 + np.random.randn(50) * 0.3 # y = 2x + 1 + 噪声
colors = np.random.rand(50) # 为每个点生成随机颜色
sizes = 100 * np.random.rand(50) # 为每个点生成随机大小# 创建一个Figure和一个Axes
fig, ax = plt.subplots()# 绘制散点图
scatter = ax.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis') # c=颜色, s=大小, alpha=透明度, cmap=颜色映射# 添加标题和标签
ax.set_title('散点图示例')
ax.set_xlabel('X 值')
ax.set_ylabel('Y 值')# 添加颜色条 (colorbar)
fig.colorbar(scatter, label='颜色值')# 显示图形
plt.show()

代码解释:

  • np.random.seed(0): 确保每次运行代码时生成的随机数都是一样的,便于复现。
  • ax.scatter(): 绘制散点图。
    • c=colors: 指定每个点的颜色。
    • s=sizes: 指定每个点的大小。
    • alpha=0.7: 设置点的透明度,当点重叠时很有用。
    • cmap='viridis': 指定颜色映射方案,将 colors 数组中的数值映射到具体的颜色。
  • fig.colorbar(scatter, label='颜色值'): 为散点图添加一个颜色条,用于解释颜色与数值的对应关系。

2.3.3 柱状图 (Bar Plot)

柱状图用于比较不同类别的数据大小。

(1)应用场景
  • 比较不同产品的销量。
  • 展示不同城市的人口数量。
  • 可视化分类特征的频数分布。
(2)代码示例
import matplotlib.pyplot as plt# 准备数据
categories = ['类别 A', '类别 B', '类别 C', '类别 D']
values = [25, 40, 30, 50]# 创建一个Figure和一个Axes
fig, ax = plt.subplots()# 绘制柱状图
bars = ax.bar(categories, values, color=['skyblue', 'lightcoral', 'lightgreen', 'gold'])# 添加标题和标签
ax.set_title('柱状图示例')
ax.set_xlabel('类别')
ax.set_ylabel('数量')# 在每个柱子上方显示数值
for bar in bars:yval = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2.0, yval + 1, round(yval, 1), ha='center', va='bottom')# 显示图形
plt.show()

代码解释:

  • ax.bar(categories, values, color=...): 绘制柱状图。color 参数可以是一个颜色列表,为每个柱子指定不同的颜色。
  • 循环部分 (for bar in bars: ...): 用于在每个柱子的顶部显示其对应的数值,增强可读性。
    • bar.get_height(): 获取柱子的高度。
    • bar.get_x(): 获取柱子左下角的 x 坐标。
    • bar.get_width(): 获取柱子的宽度。
    • plt.text(): 在指定位置添加文本。

2.4 图像定制化

Matplotlib 提供了丰富的选项来定制图形的各个方面,使其更具表现力和美观性。

2.4.1 添加标题和标签

如前面的示例所示,可以使用 ax.set_title(), ax.set_xlabel(), ax.set_ylabel() 来为图形和坐标轴添加标题和标签。还可以通过 fontsize 参数调整字体大小。

ax.set_title('定制化标题', fontsize=16)
ax.set_xlabel('X 轴标签', fontsize=12)
ax.set_ylabel('Y 轴标签', fontsize=12)

2.4.2 修改颜色、线型和标记

plot 函数中,可以通过参数控制线条的颜色 (color)、线型 (linestyle) 和数据点的标记 (marker)。

  • 颜色 (color): 可以使用预定义的颜色名称(如 ‘red’, ‘blue’, ‘green’)、十六进制颜色码(如 ‘#FF5733’)或 RGB 元组。
  • 线型 (linestyle): 常用的有 ‘-’ (实线), ‘–’ (虚线), ‘:’ (点线), ‘-.’ (点划线)。
  • 标记 (marker): 用于标记数据点,如 ‘o’ (圆圈), ‘.’ (点), ‘,’ (像素), ‘s’ (正方形), ‘^’ (上三角)。

2.4.3 添加图例

当一个图形中包含多条线或多个数据集时,图例 (legend) 就非常重要。通过在绘图函数中设置 label 参数,然后调用 ax.legend() 即可显示图例。

ax.legend(loc='upper right', fontsize=10) # loc 参数可以控制图例的位置

2.4.4 代码示例:综合定制

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, 50)
y_sin = np.sin(x)
y_cos = np.cos(x)fig, ax = plt.subplots(figsize=(8, 6)) # figsize 控制画布大小ax.plot(x, y_sin,color='purple',       # 线条颜色linestyle='--',      # 线型为虚线linewidth=2,         # 线条宽度marker='o',          # 数据点标记为圆圈markersize=5,        # 标记大小markerfacecolor='yellow', # 标记填充颜色markeredgecolor='red',   # 标记边缘颜色label='Sin Wave')ax.plot(x, y_cos,color='#2E8B57',     # SeaGreen 的十六进制码linestyle=':',       # 线型为点线linewidth=2,marker='s',markersize=5,label='Cos Wave')ax.set_title('定制化折线图', fontsize=18, fontweight='bold') # fontweight 设置字体粗细
ax.set_xlabel('弧度 (Radians)', fontsize=14)
ax.set_ylabel('函数值', fontsize=14)ax.grid(True, linestyle=':', alpha=0.7) # 添加网格线
ax.legend(loc='lower left', fontsize=12, shadow=True, frameon=True, facecolor='lightgray') # 更丰富的图例设置# 设置坐标轴范围
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.5, 1.5)# 设置刻度
ax.set_xticks(np.linspace(0, 2 * np.pi, 5)) # 设置 X 轴刻度点
ax.set_xticklabels(['0', 'π/2', 'π', '3π/2', '2π']) # 设置 X 轴刻度标签plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.show()

代码解释:

  • figsize=(8, 6): 在创建 Figure 时指定其宽度和高度(单位为英寸)。
  • linewidth: 控制线条的宽度。
  • markerfacecolor, markeredgecolor: 分别设置数据点标记的填充颜色和边缘颜色。
  • ax.grid(True, ...): 添加网格线,linestylealpha 可以分别设置网格线的样式和透明度。
  • ax.legend(...): 提供了更多图例定制选项,如 shadow (阴影), frameon (边框), facecolor (背景色)。
  • ax.set_xlim(), ax.set_ylim(): 设置 X 轴和 Y 轴的显示范围。
  • ax.set_xticks(), ax.set_xticklabels(): 自定义坐标轴的刻度位置和标签。
  • plt.tight_layout(): 自动调整布局,防止标签重叠或超出边界。

三、Seaborn:让可视化更美观

虽然 Matplotlib 功能强大且灵活,但有时为了创建具有统计意义且美观的图形,需要编写较多的样板代码。Seaborn 的出现正是为了简化这一过程,它提供了更高级别的接口,专注于统计可视化。

3.1 Seaborn 简介

3.1.1 什么是 Seaborn?

Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库。它提供了一个高级界面,用于绘制引人入胜且信息丰富的统计图形。Seaborn 的目标是使可视化成为数据探索和理解的核心部分。

3.1.2 Seaborn 与 Matplotlib 的关系

Seaborn 是建立在 Matplotlib 之上的。这意味着 Seaborn 使用 Matplotlib 来实际渲染图形。因此,您通常可以将 Matplotlib 的定制命令与 Seaborn 图形结合使用。可以理解为 Seaborn 是 Matplotlib 的一个更高级、更专注统计的封装。

3.1.3 安装 Seaborn

与 Matplotlib 类似,可以使用 conda 或 pip 安装 Seaborn:

conda install seaborn

或者:

pip install seaborn

通常,我们会将 Seaborn 导入为 sns

import seaborn as sns
import matplotlib.pyplot as plt # 通常也需要导入 Matplotlib 进行微调

3.2 使用 Seaborn 增强可视化

Seaborn 的强大之处在于其内置的统计功能和美观的默认样式。

3.2.1 风格设置

Seaborn 提供了多种内置的主题和颜色方案,可以轻松改变图形的整体外观。

sns.set_theme(style="darkgrid") # 设置主题,可选:"whitegrid", "dark", "white", "ticks"
# sns.set_style("whitegrid") # 另一种设置风格的方式
# sns.set_palette("pastel") # 设置调色板

只需在绘图代码之前调用这些函数,后续的 Seaborn (甚至 Matplotlib) 图形都会应用这些风格。

3.2.2 常用绘图函数

Seaborn 提供了许多专门用于统计分析的绘图函数,通常它们能够更好地处理 Pandas DataFrame。

(1)关系图 (Relational Plots)

用于可视化两个变量之间的关系。

  • sns.relplot(): Figure-level 接口,可以创建散点图 (kind="scatter", 默认) 或线图 (kind="line")。
  • sns.scatterplot(): Axes-level 散点图。
  • sns.lineplot(): Axes-level 折线图,可以自动计算聚合统计量(如均值和置信区间)。
(2)分类图 (Categorical Plots)

用于可视化一个数值变量与一个或多个分类变量之间的关系。

  • sns.catplot(): Figure-level 接口,支持多种分类图,如:
    • 散点图: kind="strip" (默认), kind="swarm"
    • 分布图: kind="box", kind="violin", kind="boxen"
    • 估计图: kind="point", kind="bar", kind="count"
  • Axes-level 函数如 sns.boxplot(), sns.violinplot(), sns.barplot(), sns.countplot(), sns.stripplot(), sns.swarmplot()
(3)分布图 (Distribution Plots)

用于可视化单个变量的分布或多个变量的联合分布。

  • sns.displot(): Figure-level 接口,可以绘制直方图 (kind="hist", 默认)、核密度估计图 (kind="kde")、经验累积分布函数图 (kind="ecdf")。
  • sns.histplot(): Axes-level 直方图。
  • sns.kdeplot(): Axes-level 核密度估计图。
  • sns.ecdfplot(): Axes-level ECDF图。
  • sns.rugplot(): 在轴上绘制小标记表示数据点。
  • sns.jointplot(): 绘制两个变量的联合分布和各自的边缘分布。
  • sns.pairplot(): 绘制数据集中两两特征间的关系图(散点图或直方图)。
(4)热力图 (Heatmaps)

用于将矩阵数据显示为颜色编码的图像。

  • sns.heatmap(): 非常适合可视化相关性矩阵、混淆矩阵等。

3.2.3 代码示例:使用 Seaborn 绘制美观图形

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 设置 Seaborn 风格
sns.set_theme(style="whitegrid")# 1. 使用 Seaborn 绘制折线图 (自动处理置信区间)
fmri = sns.load_dataset("fmri") # 加载 Seaborn 内置数据集
plt.figure(figsize=(8, 5)) # Matplotlib 的 figure 设置仍然适用
sns.lineplot(x="timepoint", y="signal", hue="event", style="region", data=fmri)
plt.title('Seaborn 折线图 (fMRI 数据)', fontsize=15)
plt.show()# 2. 使用 Seaborn 绘制散点图,并按类别着色
iris = sns.load_dataset("iris") # 加载鸢尾花数据集
plt.figure(figsize=(8, 5))
sns.scatterplot(x="sepal_length", y="sepal_width", hue="species", size="petal_length", data=iris, palette="viridis", alpha=0.8)
plt.title('Seaborn 散点图 (Iris 数据集)', fontsize=15)
plt.show()# 3. 使用 Seaborn 绘制箱线图 (Box Plot)
tips = sns.load_dataset("tips") # 加载小费数据集
plt.figure(figsize=(8, 5))
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2")
plt.title('Seaborn 箱线图 (Tips 数据集)', fontsize=15)
plt.show()# 4. 使用 Seaborn 绘制热力图 (Heatmap)
# 创建一个随机的相关性矩阵数据
np.random.seed(42)
data = pd.DataFrame(np.random.rand(10, 10), columns=[f'Var{i}' for i in range(1, 11)])
correlation_matrix = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", fmt=".2f", linewidths=.5)
# annot=True: 在单元格中显示数值
# cmap="coolwarm": 设置颜色映射
# fmt=".2f": 设置数值格式(保留两位小数)
# linewidths=.5: 设置单元格之间的线条宽度
plt.title('Seaborn 热力图 (相关性矩阵)', fontsize=15)
plt.show()

代码解释:

  • sns.load_dataset(): Seaborn 提供了一些内置的数据集,方便学习和测试。
  • hue: Seaborn 的一个强大参数,可以根据指定的列对数据进行分组,并用不同的颜色、标记或线型来区分。
  • style: 类似于 hue,但用不同的标记或线型区分。
  • palette: 控制颜色方案。
  • sns.boxplot(): 直观地展示了不同类别下数据的分布情况,包括中位数、四分位数和异常值。
  • sns.heatmap(): 将数值矩阵可视化为颜色编码的图,常用于展示相关性矩阵。annot=True 可以在每个单元格中显示数值。

四、实战:可视化 NumPy 与 Pandas 数据

在实际的数据分析和机器学习项目中,我们通常会使用 NumPy 存储数值数组,使用 Pandas 存储和处理表格数据 (DataFrame)。Matplotlib 和 Seaborn 都能很好地与这两个库集成。

4.1 使用 Matplotlib 可视化 NumPy 数组

4.1.1 场景描述

假设我们有一些通过 NumPy 生成或处理的实验数据,例如某个物理量随时间变化的测量值,我们希望将其可视化。

4.1.2 代码示例

import matplotlib.pyplot as plt
import numpy as np# 生成模拟数据
time = np.arange(0, 10, 0.1)  # 时间序列,从0到10,步长0.1
signal_A = np.exp(-time / 3.0) * np.sin(2 * np.pi * time) # 信号A:衰减正弦波
noise = np.random.normal(0, 0.1, len(time)) # 高斯噪声
signal_B = signal_A + noise # 信号B:带噪声的信号A# 使用 Matplotlib 绘图
fig, ax = plt.subplots(figsize=(10, 6))ax.plot(time, signal_A, label='原始信号 (Signal A)', color='blue', linestyle='-', linewidth=2)
ax.plot(time, signal_B, label='带噪声信号 (Signal B)', color='red', linestyle=':', linewidth=1.5, alpha=0.7)
# ax.scatter(time[::5], signal_B[::5], label='部分采样点', color='green', marker='x') # 每隔5个点绘制一个标记ax.set_title('NumPy 数组可视化:信号与噪声', fontsize=16)
ax.set_xlabel('时间 (s)', fontsize=14)
ax.set_ylabel('信号幅值', fontsize=14)
ax.legend(fontsize=12)
ax.grid(True, linestyle='--', alpha=0.6)plt.show()

这个例子展示了如何直接将 NumPy 数组传递给 Matplotlib 的 plot 函数进行绘图,并进行相应的定制。

4.2 使用 Seaborn 可视化 Pandas DataFrame

4.2.1 场景描述

Pandas DataFrame 是处理结构化数据的标准方式。Seaborn 在设计上就非常适合直接操作 DataFrame,可以方便地根据列名来指定绘图的变量。

4.2.2 代码示例

假设我们有一个包含学生考试成绩的 Pandas DataFrame,我们想分析不同科目成绩的分布以及它们之间的关系。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 生成模拟学生成绩数据
np.random.seed(123)
data = {'学生ID': range(1, 101),'数学成绩': np.random.randint(50, 100, 100),'英语成绩': np.random.randint(40, 95, 100),'科学成绩': np.random.randint(60, 100, 100),'班级': np.random.choice(['A班', 'B班', 'C班'], 100, p=[0.3, 0.4, 0.3])
}
df_scores = pd.DataFrame(data)# 1. 查看各科目成绩的分布 (直方图与核密度估计)
plt.figure(figsize=(12, 6))
sns.histplot(data=df_scores, x='数学成绩', hue='班级', kde=True, multiple="stack")
# multiple="stack" 可以将不同班级的直方图堆叠起来
plt.title('数学成绩分布 (按班级)', fontsize=15)
plt.show()# 2. 查看数学成绩与英语成绩之间的关系 (散点图,按班级区分)
plt.figure(figsize=(8, 6))
sns.scatterplot(data=df_scores, x='数学成绩', y='英语成绩', hue='班级', style='班级', s=80)
plt.title('数学成绩 vs 英语成绩 (按班级)', fontsize=15)
plt.show()# 3. 查看所有数值型特征两两之间的关系 (配对图)
sns.pairplot(df_scores[['数学成绩', '英语成绩', '科学成绩', '班级']], hue='班级', diag_kind='kde')
# diag_kind='kde' 在对角线上绘制核密度估计图
plt.suptitle('成绩数据配对关系图 (按班级)', y=1.02, fontsize=16) # 为整个 pairplot 添加总标题
plt.show()# 4. 查看不同班级各科成绩的箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(data=pd.melt(df_scores, id_vars=['学生ID', '班级'], value_vars=['数学成绩', '英语成绩', '科学成绩'],var_name='科目', value_name='成绩'),x='班级', y='成绩', hue='科目')
# pd.melt 用于将宽格式数据转换为长格式数据,方便 boxplot 按科目分组
plt.title('各班级科目成绩箱线图', fontsize=15)
plt.show()

代码解释:

  • pd.melt(): 这是一个非常有用的 Pandas 函数,可以将 DataFrame 从宽格式(每个科目一列)转换为长格式(一列表示科目名称,一列表示成绩),这对于某些 Seaborn 绘图函数(如 boxplot 分组显示多个科目)非常方便。
  • sns.pairplot(): 能够快速生成数据集中数值型特征两两之间的散点图,以及每个特征自身的分布图(对角线上),是探索性数据分析的利器。
  • 在 Seaborn 函数中,data 参数直接传入 DataFrame,然后通过字符串列名指定 x, y, hue 等。

五、常见问题与选择建议

5.1 Matplotlib vs Seaborn:何时选择哪个?

  • Matplotlib:

    • 优点: 极致的灵活性和控制力,几乎可以绘制任何类型的图表,是底层绘图库。
    • 缺点: 对于复杂或统计相关的图形,代码量可能较大,默认样式相对朴素。
    • 适用场景: 需要高度定制化图形、绘制非标准图表、进行精细的图形元素控制、集成到大型应用中作为绘图引擎。
  • Seaborn:

    • 优点: 接口更高级,代码简洁,内置美观的主题和调色板,专注于统计可视化,能很好地与 Pandas DataFrame 集成。
    • 缺点: 灵活性不如 Matplotlib,主要针对特定类型的统计图表。
    • 适用场景: 快速探索性数据分析、绘制美观的统计图表(如分布图、关系图、分类图、热力图等)、希望用更少的代码获得更好的视觉效果。

实践建议:

  • 对于简单的、快速的绘图或需要精细控制的场景,直接使用 Matplotlib。
  • 对于统计分析和希望快速生成美观图形的场景,优先考虑 Seaborn。
  • 通常两者结合使用:使用 Seaborn 进行主体绘图,然后使用 Matplotlib 的命令进行细节调整(如修改标题、标签、添加注解等)。

5.2 图像不显示或中文乱码问题

(1)图像不显示
  • Jupyter Notebook/Lab: 通常会自动显示。如果不行,可以尝试在绘图代码的最后加上 plt.show()。或者在 Notebook 开头执行 %matplotlib inline (用于静态图) 或 %matplotlib notebook (用于交互式图)。
  • Python 脚本: 必须在绘图代码的最后调用 plt.show() 才能显示图形。
(2)中文乱码问题

Matplotlib 默认的字体可能不支持中文。解决方法通常有两种:

  • 临时指定字体:

    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12) # 指定一个支持中文的字体文件路径# 在绘图时指定
    plt.title("中文标题", fontproperties=font)
    plt.xlabel("X轴-中文", fontproperties=font)
    
  • 全局修改配置 (推荐):

    import matplotlib.pyplot as plt
    import seaborn as sns# 一次性设置,后续绘图均生效
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
    plt.rcParams['axes.unicode_minus'] = False   # 解决保存图像是负号'-'显示为方块的问题# seaborn 的风格设置也应该在这之后,或者单独为 seaborn 的文本元素指定字体
    # sns.set(font='SimHei') # 可以尝试,但有时可能不完全覆盖所有 seaborn 元素# ... 正常的绘图代码 ...
    plt.title("你好,世界!")
    plt.xlabel("X轴")
    plt.plot([1,2,3], [4,5,1])
    plt.show()
    

    你需要确保你的系统中安装了 SimHei (黑体) 或其他支持中文的字体。常见的可选字体有 SimHei (黑体), KaiTi (楷体), FangSong (仿宋), Microsoft YaHei (微软雅黑) 等。

六、总结

本篇文章详细介绍了 Python 中两个核心的数据可视化库 Matplotlib 和 Seaborn,它们是进行数据分析和展示研究成果不可或缺的工具。

核心内容回顾:

  1. 数据可视化的重要性: 可视化帮助我们直观理解数据、发现模式与趋势,并清晰地传达分析结果。
  2. Matplotlib:
    • 是 Python 可视化的基石,提供底层的绘图接口和高度的灵活性。
    • 核心概念包括 Figure (画布) 和 Axes (子图/绘图区域)。
    • 学习了如何绘制基本的折线图、散点图、柱状图,并对图形进行定制(标题、标签、颜色、线型、图例等)。
  3. Seaborn:
    • 构建于 Matplotlib 之上,提供更高级的接口,专注于创建美观且信息丰富的统计图形。
    • 能够轻松设置绘图风格和调色板。
    • 介绍了常用的绘图函数,如关系图 (lineplot, scatterplot)、分类图 (boxplot, barplot)、分布图 (histplot, kdeplot, pairplot) 和热力图 (heatmap)。
  4. 实战应用:
    • 演示了如何结合 NumPy 使用 Matplotlib 进行数组数据的可视化。
    • 展示了如何利用 Seaborn 的便利性直接对 Pandas DataFrame 进行复杂的可视化分析。
  5. 选择与常见问题:
    • 讨论了 Matplotlib 和 Seaborn 的适用场景和选择建议。
    • 提供了解决图像不显示和中文乱码问题的方案。

掌握 Matplotlib 和 Seaborn,将为您的数据探索之旅增添一双锐利的眼睛。通过不断实践,您将能够根据不同的数据和分析需求,灵活运用这两个库,创造出既美观又富有洞察力的可视化作品。在后续的深度学习模型训练和评估中,这些可视化技巧也将大放异彩。


相关文章:

【深度学习-Day 8】让数据说话:Python 可视化双雄 Matplotlib 与 Seaborn 教程

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

InnoDB结构与表空间文件页的详解

目录 1.InnoDB的概览 表空间文件在哪里? 为什么要设计成内存结构和磁盘结构? 表空间与表空间文件关系? 用户数据如何在表空间文件存储? 2.页 如何设置页的大小? 页的结构及在表空间的位置? 页头包…...

计算机网络基础科普

IP地址是计算机网络中标识设备的唯一地址 IPv4(32位)IPv6(128位) 1.IPv4(32位) 简介:IPv4(Internet Protocol version 4)是互联网协议(IP)的…...

PostgreSQL 的 pg_advisory_lock_shared 函数

PostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数,允许多个会话同时获取相同键值的共享锁,但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg…...

Win11安装APK方法详解

1、官方win11系统 预览版 开发版 正式版 都行 2、同时你还需要开启主板 BIOS 虚拟化选项(具体名称不同主板略有不同) 这一步自行百度 开始:先去确定有没有开启虚拟化 任务管理器检查—— 虚拟化是否已经开启,如果没有自己去BIO…...

kafka的安装及简单使用

kafka 1、什么是kafka kafka是一个分布式事件流平台,核心功能有发布/订阅消息系统、实时处理数据流等,Kafka非常适合超大数据量场景。 2、kafka安装 (1)下载 在kafka官网下载二进制压缩包 (2)解压安…...

圆角边框 盒子阴影 文字阴影

一.圆角边框 在css3中,新增了圆角边框样式,这样我们的盒子就可以变成圆角了 1.border-radius border-radius属性用于设置元素的外边框圆角 border-radius:length; radius半径(圆的半径)原理:椭圆与矩形边框的交集形…...

LRU CPP实现

缓存结构&#xff1a; 使用一个双向链表&#xff08;std::list<int>&#xff09;保存缓存中的页面编号&#xff0c;越靠前的是最近访问的&#xff0c;越靠后的是最久未访问的。 使用一个哈希表&#xff08;std::unordered_map<int, list<int>::iterator>&am…...

C/C++复习-- C语言初始基础

C语言初始基础 本文结合代码实例与理论解析&#xff0c;系统讲解C语言的核心知识点&#xff0c;涵盖数据类型、控制结构、函数、指针、结构体等核心内容&#xff0c;并辅以常见错误分析与进阶技巧。通过对比文件一代码与文件二理论&#xff0c;帮助初学者构建完整的C语言知识框…...

小刚说C语言刷题—1078求恰好使s=1+1/2+1/3+…+1/n的值大于X时n的值

1.题目描述 求恰好使 s11/21/3⋯1/n 的值大于 X 时 n 的值。( 2≤x≤10 ) 输入 输入只有一行&#xff0c;包括 1个整数 X 。 输出 输出只有一行&#xff08;这意味着末尾有一个回车符号&#xff09;&#xff0c;包括 1 个整数。 样例 输入 2 输出 4 2.参考代码(C语言…...

深度学习篇---MediaPipe 及其人体姿态估计模型详解

文章目录 前言一、MediaPipe 核心特点跨平台支持实时性能模块化设计预训练模型 二、MediaPipe 人体姿态估计模型1. MediaPipe Pose (BlazePose)模型特点实时性能两种变体LiteHeavy 关键点定义技术细节检测器关键点预测器支持3D姿态估计 2. MediaPipe Holistic模型特点更全面的检…...

Embedding 的数学特性与可视化解析

一、向量空间的可视化解码 1.1 GloVe 词向量实例 取词向量维度 d 50 d50 d50 的 GloVe 嵌入示例&#xff1a; king_vec [[0.50451, 0.68607, -0.59517, -0.022801, 0.60046, -0.13498, -0.08813, 0.47377, -0.61798, -0.31012, -0.076666, 1.493, -0.034189, -0.98173, 0…...

“睿思 BI” 系统介绍

“睿思 BI” 商业智能系统是由成都睿思商智科技有限公司自主研发的企业数据分析系统&#xff0c;以下是对该系统的详细介绍&#xff1a; 功能模块 &#xff1a; • 数据集成与准备 &#xff1a;支持数据导入、数据填报、数据 ETL 等功能&#xff0c;可抽取企业在经营过程中产生…...

[ctfshow web入门] web69

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }解题 查目录 百度了一下有哪些打印函数&#xff0c;var_export能用 var_exp…...

AI赋能研究工作:我的深度学习助手使用体验(DeepResearch)

在过去一年多的时间里&#xff0c;AI工具在国内经历了数次大规模普及与质量波动。作为一名研究工作者&#xff0c;我一直在寻找稳定高效的AI解决方案来辅助日常工作。今天想分享一个让我受益良多的平台——GPTYOU.com 为什么它值得一试&#xff1f; 和市面上众多同类产品相比…...

Vue基础(8)_监视属性、深度监视、监视的简写形式

监视属性(watch)&#xff1a; 1.当被监视的属性变化时&#xff0c;回调函数(handler)自动调用&#xff0c;进行相关操作。 2.监视的属性必须存在&#xff0c;才能进行监视&#xff01;&#xff01; 3.监视的两种写法&#xff1a; (1).new Vue时传入watch配置 (2).通过vm.$watc…...

STM32硬件I2C驱动OLED屏幕

本文基于STM32硬件I2C驱动SSD1306 OLED屏幕&#xff0c;提供完整的代码实现及关键注意事项&#xff0c;适用于128x32或128x64分辨率屏幕。代码通过模块化设计&#xff0c;支持显示字符、数字、汉字及位图&#xff0c;并优化了显存刷新机制。 零、完整代码 完整代码: 1&#x…...

2021-11-16 C++歌手去掉2最高2最低均分

缘由大学一年级c编程题目-编程语言-CSDN问答 void 歌手去掉2最高2最低均分() {//缘由https://ask.csdn.net/questions/7551893?spm1005.2025.3001.5141int n 0, h 0, j 0, qd[6]{0}, fs[50]{0};scanf_s("%d", &n); j n; qd[2] qd[3] INT_MAX; qd[0] qd[…...

Vue插槽(Slots)详解

文章目录 1. 插槽简介1.1 什么是插槽&#xff1f;1.2 为什么需要插槽&#xff1f;1.3 插槽的基本语法 2. 默认插槽2.1 什么是默认插槽&#xff1f;2.2 默认插槽语法2.3 插槽默认内容2.4 默认插槽实例&#xff1a;创建一个卡片组件2.5 Vue 3中的默认插槽2.6 默认插槽的应用场景 …...

[虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)

原英文教程地址深入理解实时渲染&#xff08;An In-Depth Look at Real-Time Rendering&#xff09; 文章目录 1.Intro to An In-Depth Look at Real-Time RenderingCPU VS GPUDeferred VS Forward 2. Before Rendering and OcclusionCulling计算的步骤使用console command:fre…...

【bibtex4word】在Word中高效转换bib参考文献,Texlive环境安装bibtex4word插件

前言 现已退出科研界&#xff0c;本人水货一个。希望帮到有缘人 本篇关于如何将latex环境中的参考文献bib文件转化为word&#xff0c;和一些踩坑记录。 可以看下面的资料进行配置&#xff0c;后面的文字是这些资料的补充说明。 参考文章&#xff1a;https://blog.csdn.net/g…...

torch.nn 下的常用深度学习函数

1. 层&#xff08;Layers&#xff09; 这些函数用于定义神经网络中的各种层&#xff0c;是构建模型的基础模块。 torch.nn.Linear 用途&#xff1a;全连接层&#xff08;也称为线性层&#xff09;。用于将输入数据从一个维度映射到另一个维度&#xff0c;常用于神经网络的隐藏…...

(2025)图文解锁RAG从原理到实操

什么是RAG RAG(检索增强生成)是一种将语言模型与可搜索知识库结合的方法&#xff0c;主要包含以下关键步骤&#xff1a; 数据预处理 加载&#xff1a;从不同格式(PDF、Markdown等)中提取文本分块&#xff1a;将长文本分割成短序列(通常100-500个标记)&#xff0c;作为检索单元…...

PXE_Kickstart_无人值守自动化安装系统

文章目录 1. PXE2. 配置服务参数2.1 tftp服务配置2.2 dhcp服务配置2.3 http服务配置 3. 配置PXE环境3.1 网络引导文件pxelinux.03.2 挂载镜像文件3.3 创建配置文件default3.4 复制镜像文件和驱动文件3.5 修改default文件3.6 配置ks.cfg文件 4. PXE客户端4.1 创建虚拟机&#xf…...

Redis经典面试题

本篇文章简单介绍一些 Redis 常见的面试题。 Redis 是什么&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&…...

Vite Proxy配置详解:从入门到实战应用

Vite Proxy配置详解&#xff1a;从入门到实战应用 一、什么是Proxy代理&#xff1f; Proxy&#xff08;代理&#xff09;是开发中常用的解决跨域问题的方案。Vite内置了基于http-proxy的代理功能&#xff0c;可以轻松配置API请求转发。 二、基础配置 在vite.config.js中配置…...

用AI写简历是否可行?

让AI批量写简历然后投简历是绝对不行的&#xff01;&#xff01;&#xff01; 为什么不行&#xff0c;按照 "招聘经理" 工作经历举例&#xff1a; ai提示词&#xff1a;请帮我写一份招聘经理的工作经历内容&#xff1a; 招聘经理 | XXX科技有限公司 | 2020年…...

投影显示技术全解析:主流方案对比与雷克赛恩 CyberPro1 的核心优势

目录 一、主流投影显示技术深度解析 &#xff08;一&#xff09;LCD 投影技术 &#xff08;二&#xff09;DP 投影技术 &#xff08;三&#xff09;3LCD 技术 &#xff08;四&#xff09;FSHD 技术 FSHD 技术优势 二、雷克赛恩 CyberPro1 核心优势对比分析 &#xff08…...

Skyvern:用 AI+视觉驱动浏览器自动化

Skyvern&#xff1a;用 AI视觉驱动浏览器自动化 一、前言二、项目概览2.1 Skyvern 项目简介2.2 代码结构与模块划分 三、环境搭建与快速上手3.1 环境准备3.1.1 系统与依赖3.1.2 克隆项目3.1.3 安装 Python 依赖3.1.4 配置环境变量3.1.5 启动服务 3.2 验证安装 四、核心功能与实…...

101alpha第九

alpha ((rank(ts_arg_max((vwap - close), 3)) * rank(ts_delta(volume, 3))) 今天我们来学下这个 这个是两个rank操作符相加&#xff0c;然后和另外一个操作符相乘&#xff0c;我们来看实现了什么 vwap - close&#xff1a;这部分先计算成交量加权平均价&#xff08;vwap&am…...

蓝牙身份证阅读器使用Uniapp调用二次开发demo

<template> <view class"content"> <view class"search" :loading"searchingstatus" click"searchbluetooth"> {{searchingstatus?"搜索中":"搜索蓝牙阅读器"}} </view> …...

好用的shell终端工具

FinalShell SSH工具,服务器管理 FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.12,更新日期2024.10.30 - FinalShell官网...

OSPF不规则区域划分

1、建立一条虚链路 vlink 可以被视为是⻣⼲区域的⼀段延伸。 这⼀条虚拟的链路&#xff0c;只能够跨域⼀个⾮⻣⼲区域。 [r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 [r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2 在没有建立虚链路之前,r1是不能ping r4的。vlink建⽴的邻居关…...

复习javascript

1.修改元素内的内容 ​ <div>zsgh</div> <script> const box1document.querySelector("div") box1.innerText"ppp" box1.innerHtml<h1>修改</h1> </script>​ 2.随机点名练习 <!DOCTYPE html> <html lang…...

海盗王64位服务端+32位客户端3.0版本

经过多天的尝试&#xff0c;终于把海盗王3.0的服务端改成了64位的&#xff0c;包括AccountServer GroupServer GameServer GateServer。 客户端则保留了32位。 服务端改成64位的好处是GameServer可以只启动一个就开全部地图&#xff0c;大概6G内存左右&#xff0c;直接将跳…...

【从零实现JsonRpc框架#2】Muduo库介绍

1.基本概念 Muduo 由陈硕大佬开发&#xff0c;是一个基于非阻塞IO和事件驱动的C高并发TCP网络编程库。它是一款基于主从Reactor模型的网络库&#xff0c;其使用的线程模型是 one loop per thread。 1.1 主从 Reactor 模型 主 Reactor&#xff08;MainReactor&#xff0c;通常…...

如何创建伪服务器,伪接口

创建伪接口一般是用于模拟真实接口的行为&#xff0c;以便在开发和测试过程中进行使用&#xff0c;以下是一些常见的创建伪接口的方法&#xff1a; 使用 Web 框架搭建&#xff1a; Python 和 Flask&#xff1a;Flask 是一个轻量级的 Python Web 框架。示例代码如下&#xff1a;…...

NX949NX952美光科技闪存NX961NX964

NX949NX952美光科技闪存NX961NX964 在半导体存储领域&#xff0c;美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计&#xff0c;成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…...

vue配置代理解决前端跨域的问题

文章目录 一、概述二、报错现象三、通过配置代理来解决修改request.js中的baseURL为/api在vite.config.js中增加代理配置 四、参考资料 一、概述 跨域是指由于浏览器的同源策略限制&#xff0c;向不同源(不同协议、不同域名、不同端口)发送ajax请求会失败 二、报错现象 三、…...

深入解析Vue3中ref与reactive的区别及源码实现

深入解析Vue3中ref与reactive的区别及源码实现 前言 Vue3带来了全新的响应式系统&#xff0c;其中ref和reactive是最常用的两个API。本文将从基础使用、核心区别到源码实现&#xff0c;由浅入深地分析这两个API。 一、基础使用 1. ref import { ref } from vueconst count…...

Java Bean容器详解:核心功能与最佳使用实践

在Java企业级开发中&#xff0c;Bean容器是框架的核心组件之一&#xff0c;它通过管理对象&#xff08;Bean&#xff09;的生命周期、依赖关系等&#xff0c;显著提升了代码的可维护性和扩展性。主流的框架如Spring、Jakarta EE&#xff08;原Java EE&#xff09;均提供了成熟的…...

Xilinx Kintex-7 XC7K325T-2FFG676I 赛灵思 FPGA

XC7K325T-2FFG676I 属于 Kintex-7 FPGA &#xff0c;低功耗与合理成本的应用市场&#xff0c;可提供比前代产品两倍的性价比提升和卓越的系统集成能力。该器件于 28 nm 工艺节点制造&#xff0c;速度等级为 -2&#xff0c;适合对时序要求严格但预算有限的系统设计。 产品架构与…...

AI实战笔记(1)AI 的 6 大核心方向 + 学习阶段路径

一、机器学习&#xff08;ML&#xff09; 目标&#xff1a;用数据“训练”模型&#xff0c;完成分类、回归、聚类等任务。 学习阶段&#xff1a; &#xff08;1&#xff09;基础数学&#xff1a;线性代数、概率统计、微积分&#xff08;适度&#xff09; &#xff08;2&#xf…...

Ceph集群故障处理 - PG不一致修复

Ceph集群故障处理 - PG不一致修复 目录故障现象故障分析故障定位修复过程磁盘状态检查OSD存储结构检查修复分析故障总结问题原因修复方法后续建议经验教训最佳实践 参考资料 # ceph -v ceph version 14.2.22目录 故障现象故障分析故障定位修复过程磁盘状态检查OSD存储结构检查…...

【前端】每日一道面试题3:如何实现一个基于CSS Grid的12列自适应布局?

要实现一个基于CSS Grid的12列自适应布局&#xff0c;关键在于利用网格系统的灵活性和响应式设计能力。以下是具体实现步骤及核心代码示例&#xff1a; 一、基础网格容器定义 创建网格容器 使用display: grid将父元素定义为网格容器&#xff1a; .container {display: grid;gr…...

leetcode 349. Intersection of Two Arrays

题目描述 题目限制0 < nums1[i], nums2[i] < 1000&#xff0c;所以可以开辟一个1001个元素的数组来做哈希表。 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> table(1001,0…...

机器学习 day01

文章目录 前言一、机器学习的基本概念二、数据集的加载1.玩具数据集2.联网数据集3.本地数据集 三、数据集的划分四、特征提取1.稀疏矩阵与稠密矩阵2.字典列表特征提取3.文本特征提取 前言 目前我开始学习机器学习部分的相关知识&#xff0c;通过今天的学习&#xff0c;我掌握了…...

C++STL——priority_queue

优先队列 前言优先队列仿函数头文件 前言 本篇主要讲解优先队列及其底层实现。 优先队列 优先队列的本质就是个堆&#xff0c;其与queue一样&#xff0c;都是容器适配器&#xff0c;不过优先队列是默认为vector实现的。priority_queue的接口优先队列默认为大根堆。 仿函数 …...

DS18B20温度传感器

1.基本信息 测温范围为一55&#xff5e; 125℃&#xff1b;3.3/5V的供电电压&#xff1b;-10~85内精度较高&#xff1b; 典型的温度转换时间为 750ms&#xff08;12 位分辨率&#xff09;&#xff1b; 输出最小分辨率&#xff1a;0.0625&#xff1b; 采用单总线数据格式&am…...

《Python星球日记》 第50天:深度学习概述与环境搭建

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是深度学习&#xff1f;它与传统机器学习的区别1. 深度学习的定义2. 深…...