AI基础:数据可视化简易入门(Matplotlib和Seaborn)

news/2025/2/22 6:59:54

Matplotlib是一个Python的2D绘图库,它以各种硬拷贝和跨平台的交互式环境生成出版质量级别的图形。
Seaborn是基于Python且非常受欢迎的图形可视化库,在Matplotlib的基础上进行了更高级别的封装,使作图更加方便快捷。

1 Matplotlib

1.1 通过figure()函数创建画布

绘制简单的图形

import numpy as np
import matplotlib.pyplot as plt

# 生成包含100~200的数组
data = np.arange(100, 201)
# 绘制data图形
plt.plot(data)
plt.show()

运行后如图:
图1
创建新的空白画布

# 创建新的画布, 返回figure实例
# figure_obj = plt.figure()

实践

data2 = np.arange(200, 301)
# 背景变为灰色
plt.figure(facecolor='gray')
plt.plot(data2)
plt.show()

在这里插入图片描述

1.2 通过subplot()函数创建单个子图

nums = np.arange(0, 101)
# 分成2*2的矩阵区域,占用编号为1的区域,即第一行第一列的子图
plt.subplot(221)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第一行第二列
plt.subplot(222)
plt.plot(nums, -nums)
# 分成2*1的矩阵区域,占用编号为2的区域,即第2行的子图
plt.subplot(212)
plt.plot(nums, nums**2)
plt.show()

在这里插入图片描述

1.3 通过subplots()函数创建多个子图

plt.subplots()函数是Matplotlib库中用于创建多个子图的便捷方法。它一次性创建并返回一个包含所有子图的Figure对象和Axes对象。

nums = np.arange(1, 101)
# 分成2*2的矩阵区域,返回子图数组axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0]
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]
# 在选中的子图上作图
ax1.plot(nums, nums)
ax2.plot(nums, -nums)
ax3.plot(nums, nums**2)
ax4.plot(nums, np.log(nums))
plt.show()

运行如图:
在这里插入图片描述

1.4 通过add_subplot()方法添加和选中子图

# 创建Figure的实例
fig = plt.figure()
# 添加子图
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 2, 4)
fig.add_subplot(2, 2, 3)
# 在子图上作图
random_arr = np.random.rand(100)
# 默认是在最后一次使用subplot的位置上作图,即编号为3的位置
plt.plot(random_arr)
plt.show()

运行结果:
在这里插入图片描述

1.5 添加各类标签

data = np.arange(0, 1.1, 0.01)
# 添加标题
plt.title("Title")
# 添加x轴的名称
plt.xlabel("x")
# 添加y轴名称
plt.ylabel("y")
# 设置x轴和y轴的刻度
plt.xticks([0, 0.5, 1])
plt.yticks([0, 0.5, 1.0])
plt.plot(data, data**2)
plt.plot(data, data**3)
plt.legend(["y=x^2", "y=x^3"])
plt.show()
xticks中参数详解
ticks: 指定 x 轴刻度值的位置,可以是一个列表或者数组。如果传入空列表,则不显示 x 轴刻度。
labels: 指定 x 轴刻度值的显示标签,可以是一个列表或者数组。只有当 ticks 参数有输入值时,该参数才能传入参数。
fontproperties: 指定 x 轴刻度值的字体属性,例如字体大小、字体颜色等。
rotation: 指定 x 轴刻度值的旋转角度。例如 rotation=90 表示将刻度值顺时针旋转 90 度。
ha: 指定 x 轴刻度值的水平对齐方式,可以是 'left'、'center' 或者 'right'。
minor: 指定是否设置次要刻度。设置为 True 则会在主要刻度之间添加次要刻度。

plt.xticks([1, 2, 3, 4, 5], ['A', 'B', 'C', 'D', 'E'], rotation=30)
在这个例子中,plt.xticks 函数用于将 x 轴的刻度设置为 1 到 5,并且每个刻度对应的标签分别是 'A' 到 'E'。同时,rotation=30 参数使得标签文本旋转了 30 度。

在这里插入图片描述

# 产生-3到3之间的50点
x = np.linspace(-3, 3, 50)
# 构造函数
y1 = 2*x+1
y2 = x**2
# 确保编号为 3 的图形被创建或激活,并设置其尺寸为 8×5 英寸
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
# 红色虚线直线宽度默认1.0
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# 设置x轴范围
plt.xlim((-1, 2))
# 设置y轴范围
plt.ylim((-2, 3))
# 设置坐标轴含义,注:英文直接写,中文需要后边加上fontproperties属性
# u代表unicode编码
# SimHei 黑体
# fontsize=16 设置标签文本的字体大小为 16 磅
plt.xlabel(u'价格', fontproperties='SimHei', fontsize=16)
plt.ylabel(u'利润', fontproperties='SimHei', fontsize=16)
# 设置x轴刻度
# -1到2区间,5个点,4个区间,平均分:[-1., -0.25, 0.5, 1.25, 2.]
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)

# 设置y轴刻度
'''
设置对应坐标用汉字或英文表示,后边的属性fontproperties表示中文可见,不乱吗,
内部英文$$表示将英文括起来,r表示正则匹配,通过这个方式将其变为好看的字体
如果要显示特殊字符,比如阿尔法,则用转义符\alpha,前面的\ 表示转义
'''
plt.yticks([-2, -1.8, -1, 1.22, 3.],
           ['非常糟糕', '糟糕', r'$good\ \alpha$', r'$really\ good$', '超级好'],
           fontproperties='SimHei',
           fontsize=12)
plt.show()

输出:
在这里插入图片描述

1.6 绘制常见类型图表

# 创建随机数组
# 生成一个包含 100个服从标准正态分布(均值为 0,标准差为 1)的随机数的一维数组
arr = np.random.randn(100)
# 绘制直方图
# 将数据划分为8个区块,直方图颜色是绿色,透明度为0.7
plt.hist(arr, bins=8, color='g', alpha=0.7)
plt.show()

在这里插入图片描述

# 创建包含整数0~51的数组,用于表示x的数据
x = np.arange(51)
# 创建另一数组,用于表示y轴的数据
y = np.random.rand(51)*10
# 绘制数据散点图
plt.scatter(x, y)
plt.show()

在这里插入图片描述

# 创建包含0~4的一维数组
x = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 31, size=(2, 5))
# 条形宽度
width = 0.25
# 创建一个子图
ax = plt.subplot(1, 1, 1)
# 绘制红色的柱形图
ax.bar(x, y1, width, color='r')
# 绘制另一个绿色的柱形图
ax.bar(x+width, y2, width, color='g')
# 设置x轴的刻度
ax.set_xticks(x+width)
# 设置x轴的刻度标签
ax.set_xticklabels(['January', 'February', 'March', 'April', 'May'])
plt.show()

在这里插入图片描述

data = np.arange(1, 3, 0.3)
# 绘制直线,颜色为青色,标记为"x", 线型为长虚线
plt.plot(data, color='c', marker="x", linestyle="--")
# 绘制直线,颜色为品红,标记为实心圆圈,线型为短虚线
plt.plot(data+1, color='m', marker="o", linestyle=":")
# 绘制直线,颜色为黑色,标记为五边形,线性为短点相间线
plt.plot(data+2, color='k', marker='p', linestyle="-.")
# 或者简写为下面这种
# plt.plot(data, 'cx--', data+1, 'mo:', data+2, 'kp-.')
plt.show()

在这里插入图片描述

2 seaborn-绘制统计图形

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

2.1 可视化数据的分布

# 显式调用set()获取默认绘图
sns.set()
# 确定随机数生成器的种子
np.random.seed(0)
# 生成随机数组
arr = np.random.randn(100)
# 生成10个块
ax = sns.distplot(arr, bins=10)
plt.show()

在这里插入图片描述

data = np.random.randint(0, 100, 500)
# 绘制核密度估计曲线,kde指定类型为核密度曲线
sns.displot(data, kind='kde', rug=True)
# 书上是下面这个,但我电脑报错,Rectangle.set() got an unexpected keyword argument 'hist',有大佬知道为啥吗?
# sns.displot(data, hist=False, rug=True)
plt.show()

在这里插入图片描述

dataframe = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)})
# 绘制散布图
sns.jointplot(x="x", y="y", data=dataframe)
plt.show()

在这里插入图片描述

dataframe = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)})
# 绘制二维直方图
sns.jointplot(x="x", y="y", data=dataframe, kind="hex")
plt.show()

在这里插入图片描述

# 核密度估计
sns.jointplot(x="x", y="y", data=dataframe, kind="kde")

在这里插入图片描述
后边的内容因为书上是从网上加载下载的资料,笔者电脑好像下不了,就先写道这吧


http://www.niftyadmin.cn/n/5861847.html

相关文章

微信问题总结(onpageshow ,popstate事件)

此坑描述 订单详情某按钮点击,通过window.location.href跳转到(外部)第三方链接后,回退后,在ios中生命周期和路由导航钩子都失效了,无法触发。 在安卓中无视此坑, 回退没有问题 解决 原因&am…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

精准测量PMD:OCI-V光矢量分析系统赋能光纤通信性能优化

在光纤通信技术飞速发展的今天,偏振模色散(PMD)已成为制约系统性能的核心瓶颈之一。PMD会导致信号失真、码间串扰,并限制传输距离,严重影响系统的带宽容量和传输可靠性。因此,精准测量PMD对于优化光纤通信系…

kafka-集群缩容

一. 简述: 当业务增加时,服务瓶颈,我们需要进行扩容。当业务量下降时,为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器,预计缩到 10 台机器,那么需要做 5 次缩容操作,每次将一个节点下线…

Ubuntu 22.04 Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能,可以与用户进行自然语言交互,回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括: 强大的语言理解能力:能够理解和生成自然语言,与用户进行流畅的对话。多领域知识&…

使用Open WebUI下载的模型文件(Model)默认存放在哪里?

🏡作者主页:点击! 🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2025年2月21日21点21分 🀄️文章质量:95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下…

Android Studio SVN下载安装

原文链接:SVN简介和安装 步骤1:安装 SVN 插件 首先,你需要在 Android Studio 中安装 SVN 插件。你可以按照以下步骤进行操作: 打开 Android Studio点击 “File” 菜单,选择 “Settings”在 “Settings” 窗口中&…

Redis 缓存穿透、击穿、雪崩:问题与解决方案

在使用 Redis 作为缓存中间件时,系统可能会面临一些常见的问题,如 缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致数据库压力过大、系统响应变慢甚至崩溃。本文将详细分析这三种问题的起因,并提供有效的解决…