【四 (2)数据可视化之 Matplotlib 常用图表及代码实现 】

news2024/11/19 4:33:04

目录

    • 文章导航
    • 一、介绍
    • 二、安装Matplotlib
    • 三、导入Matplotlib
    • 四、设置可以中文显示
    • 四、常用图形
      • 1、散点图(Scatter Plot)
      • 2.1、线性图(Line Plot)
      • 2.2、堆叠折线图
      • 2.3、多图例折线图
      • 3.1、柱状图/条形图(Bar Chart)
      • 3.2 堆叠条形图
      • 4、直方图(Histogram)
      • 5、饼图(Pie Chart)
      • 6、箱线图(Box Plot)
      • 7、子图(Subplot)
      • 8、指标卡

文章导航

【一 简明数据分析进阶路径介绍(文章导航)】

一、介绍

Matplotlib是一个Python的2D绘图库,它可以在各种硬拷贝格式和跨平台的交互式环境中生成出版质量级别的图形。它是Python中最常用的可视化工具之一,功能非常强大,可以调用函数轻松地绘制出数据分析中的各种图形,如折线图、条形图、柱状图、散点图、饼图等。

二、安装Matplotlib

pip install matplotlib

三、导入Matplotlib

import matplotlib.pyplot as plt

四、设置可以中文显示

from matplotlib import font_manager    # 设置Matplotlib配置参数
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号

四、常用图形

1、散点图(Scatter Plot)

利用坐标点(散点)的分布形态反映特征间的相关关系。常用于展示两个变量之间的关系。

import numpy as np  
  
# 假设我们有一些关于学生分数和学习时间的数据  
scores = np.random.randint(40, 100, size=50)  # 学生分数  
study_hours = np.random.rand(50) * 20  # 学习时间(小时)  
  
plt.figure(figsize=(8, 6))  # 设置图形大小  
plt.scatter(study_hours, scores, color='blue', edgecolor='black', alpha=0.7)  # 绘制散点图  
plt.xlabel('学习时间 (小时)')  
plt.ylabel('分数')  
plt.title('学习时间与分数的关系')  
plt.grid(True)  # 显示网格  
plt.show()

在这里插入图片描述

2.1、线性图(Line Plot)

也称为折线图,用折线连接数据点以展示数据随时间或其他连续变量的变化趋势。

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有一系列随时间变化的温度数据  
days = np.arange(1, 32)  # 一个月的天数  
temperatures = np.random.uniform(low=10, high=30, size=31)  # 随机生成温度数据  
  
plt.figure(figsize=(10, 5))  
plt.plot(days, temperatures, marker='o', linestyle='-', color='red')  # 绘制线性图  
plt.xlabel('天数')  
plt.ylabel('温度 (°C)')  
plt.title('一个月内的温度变化')  
plt.grid(True)  
plt.show()

在这里插入图片描述

2.2、堆叠折线图

堆叠折线图通常用于展示随时间变化的累计数据,其中每个系列表示一个分类,堆叠在一起表示总的变化趋势

import matplotlib.pyplot as plt  
import numpy as np  
import pandas as pd
# 假设我们有关于不同产品(产品A, 产品B, 产品C)的销售数据,这些数据随时间变化  
dates = pd.date_range(start='2023-01-01', periods=12, freq='M')  # 生成12个月的日期  
  
# 假设数据如下  
sales_data = {  
    '产品A': np.random.randint(10, 50, size=12),  
    '产品B': np.random.randint(5, 30, size=12),  
    '产品C': np.random.randint(20, 60, size=12)  
}  
  
# 计算累计销售数据  
cumulative_sales = {product: np.cumsum(sales) for product, sales in sales_data.items()}  
  
# 绘制堆叠折线图  
fig, ax = plt.subplots()  
colors = ['b', 'g', 'r']  # 为每个产品指定颜色  
bottom = np.zeros(len(dates))  # 初始化底部位置  
  
for i, (product, sales) in enumerate(cumulative_sales.items()):  
    ax.plot(dates, sales, color=colors[i], label=product)  
    bottom += sales  # 更新底部位置以进行堆叠  
  
# 添加标题和标签  
ax.set_xlabel('日期')  
ax.set_ylabel('累计销售额')  
ax.set_title('产品累计销售趋势')  
ax.legend()  
  
# 显示图形  
plt.tight_layout()  
plt.xticks(rotation=45)  # 倾斜日期标签以便于阅读  
plt.show()

在这里插入图片描述

2.3、多图例折线图

观察多个图例的变化趋势可以用多图例折线图

import numpy as np  
import matplotlib.pyplot as plt  
import pandas as pd  
  
# 假设我们有一些关于两个不同产品(Product A 和 Product B)的销售数据  
# 创建日期范围  
dates = pd.date_range(start='2023-01-01', periods=12, freq='M')  
  
# 创建一些模拟数据  
np.random.seed(0)  # 为了结果的可复现性  
sales_a = np.random.randint(50, 150, size=len(dates))  
sales_b = np.random.randint(30, 120, size=len(dates))  
  
# 将数据放入 DataFrame 中  
df = pd.DataFrame({  
    '日期': dates,  
    '产品A': sales_a,  
    '产品B': sales_b  
})  
  
# 设置图形的尺寸  
plt.figure(figsize=(10, 6))  
  
# 绘制折线图  
plt.plot(df['日期'], df['产品A'], label='产品A', marker='o', linestyle='-')  
plt.plot(df['日期'], df['产品B'], label='产品B', marker='s', linestyle='-')  
  
# 设置图表的标题和坐标轴标签  
plt.title('销售情况')  
plt.xlabel('日期')  
plt.ylabel('销售额')  
  
# 设置图例位置  
plt.legend(loc='upper left')  
  
# 设置网格  
plt.grid(True)  
  
# 设置日期格式  
plt.gcf().autofmt_xdate()  
  
# 显示图形  
plt.show()

在这里插入图片描述

3.1、柱状图/条形图(Bar Chart)

通过不同高度的长方形条形表示不同类别的数据大小,常用于比较不同类别之间的数据。

import matplotlib.pyplot as plt  
  
# 假设我们有不同类别的产品销售额数据  
categories = ['产品A', '产品B', '产品C', '产品D']  
sales = [1200, 1800, 1000, 1500]  
  
plt.figure(figsize=(8, 6))  
plt.bar(categories, sales, color='green', edgecolor='black')  # 绘制柱状图  
plt.xlabel('产品类别')  
plt.ylabel('销售额')  
plt.title('产品销售额比较')  
plt.xticks(rotation=45)  # x轴标签倾斜  
plt.grid(axis='y', alpha=0.75)  # 仅y轴显示网格,设置网格透明度  
plt.show()

在这里插入图片描述

3.2 堆叠条形图

堆叠条形图常用于展示不同分类下各个子分类的数值总和,以及每个子分类对总和的贡献

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有关于不同部门(A, B, C)的支出数据,这些支出又分为几个子类别(工资、福利、其他)  
departments = ['部门A', '部门B', '部门C']  
categories = ['工资', '福利', '其他']  
  
# 假设数据如下  
data = {  
    '部门A': [20, 30, 10],  
    '部门B': [25, 25, 15],  
    '部门C': [15, 35, 20]  
}  
  
# 转换数据为适合Matplotlib的格式  
N = len(departments)  
ind = np.arange(N)  # 组的x位置  
width = 0.35       # 条形的宽度  
  
# 初始化堆叠条形图的底部位置  
bottom = np.zeros(N)  
  
# 创建堆叠条形图  
fig, ax = plt.subplots()  
for category in categories:  
    values = [data[dept][categories.index(category)] for dept in departments]  
    ax.bar(ind, values, width, bottom=bottom, label=category)  
    bottom += values  # 更新底部位置以进行堆叠  
  
# 添加标题和标签  
ax.set_xlabel('部门')  
ax.set_ylabel('支出金额')  
ax.set_title('各部门支出分布')  
ax.set_xticks(ind)  
ax.set_xticklabels(departments)  
ax.legend()  
  
# 显示图形  
plt.tight_layout()  
plt.show()

在这里插入图片描述

4、直方图(Histogram)

一种特殊的柱状图,用于展示数据的分布情况,每个柱子表示某一范围内的数据点数量。

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有一些正态分布的数据  
data = np.random.randn(1000)  
  
plt.figure(figsize=(8, 6))  
plt.hist(data, bins=30, edgecolor='black', alpha=0.7, color='lightblue')  # 绘制直方图  
plt.xlabel('数据值')  
plt.ylabel('频数')  
plt.title('数据分布直方图')  
plt.grid(axis='y', alpha=0.75)  
plt.show()

在这里插入图片描述

5、饼图(Pie Chart)

用扇形的面积表示各部分在总体中所占的百分比,常用于展示数据的比例关系。

import matplotlib.pyplot as plt  
  
# 假设我们有一组关于不同类别支出的数据  
labels = ['食品', '住房', '交通', '娱乐', '其他']  
sizes = [25, 30, 15, 10, 20]  # 各部分所占的百分比  
  
plt.figure(figsize=(8, 6))  
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, colors=['#ff9999','#66b3ff','#99ff99','#ffcc99','#c0c0c0'])  # 绘制饼图  
plt.axis('equal')  # 保证饼图为圆形  
plt.title('支出分布饼图')  
plt.show()

在这里插入图片描述

6、箱线图(Box Plot)

一种展示数据分布情况的图形,通过中位数、四分位数等统计量来描绘数据的分布特征。

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有多组数据,想要比较它们的分布  
np.random.seed(10)  
data1 = np.random.normal(100, 10, 200)  
data2 = np.random.normal(90, 20, 200)  
data3 = np.random.normal(80, 30, 200)  
data4 = np.random.normal(70, 40, 200)  
  
labels = ['组1', '组2', '组3', '组4']  
data = [data1, data2, data3, data4]  
  
plt.figure(figsize=(10, 7))  
plt.boxplot(data, vert=False, patch_artist=True, notch=True, medianprops={'linewidth': 2}, showmeans=True, meanline=True)  # 绘制箱线图  
plt.yticks(range(1, len(labels) + 1), labels)  
plt.xlabel('数据值')  
plt.title('多组数据的箱线图')  
plt.grid(axis='x', alpha=0.75)  
plt.show()

在这里插入图片描述

7、子图(Subplot)

在同一窗口中绘制多个图形,便于比较和展示多组数据。

import matplotlib.pyplot as plt  
import numpy as np  
  
# 创建一些模拟数据  
x = np.linspace(0, 10, 100)  
y1 = np.sin(x)  
y2 = np.cos(x)  
  
# 创建一个图形和一组子图  
plt.figure(figsize=(12, 6))  
  
# 添加第一个子图  
plt.subplot(2, 2, 1)  # 2行2列,第1个子图  
plt.plot(x, y1)  
plt.title('正弦函数')  
plt.xlabel('x')  
plt.ylabel('y')  
  
# 添加第二个子图  
plt.subplot(2, 2, 2)  # 2行2列,第2个子图  
plt.plot(x, y2)  
plt.title('余弦函数')  
plt.xlabel('x')  
plt.ylabel('y')  
  
# 添加第三个子图(共享x轴)  
plt.subplot(2, 1, 2)  # 2行1列,第2个子图(跨两列)  
plt.plot(x, y1, label='sin(x)')  
plt.plot(x, y2, label='cos(x)')  
plt.title('正弦和余弦函数')  
plt.xlabel('x')  
plt.ylabel('y')  
plt.legend()  
  
# 显示图形  
plt.tight_layout()  # 调整子图参数,使之填充整个图像区域  
plt.show()

在这里插入图片描述

8、指标卡

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有一个百分比值  
percentage = 0.75  
  
# 设置阈值  
threshold = 0.7  
  
# 根据百分比值确定背景颜色  
completed_color = 'green' if percentage >= threshold else 'red'  
  
# 创建一个新的图形  
fig, ax = plt.subplots()  
  
# 绘制一个矩形,表示进度条的背景  
ax.add_patch(plt.Rectangle((0.1, 0.1), 0.8, 0.8, color='lightgrey'))  

  
# 绘制一个矩形,表示已完成的进度  
background_color = 'white' if completed_color == 'green' else 'blue'  # 确保已完成进度与背景色对比度高  
ax.add_patch(plt.Rectangle((0.1, 0.1), 0.8 * percentage, 0.8, color=completed_color))  
  
# 设置文本标签,并调整字体大小  
font_size = 20  # 设置字体大小为20  
ax.text(0.5, 0.5, f'{percentage*100:.0f}%', ha='center', va='center', fontsize=font_size, color='black')  
  
# 移除坐标轴标签和刻度  
ax.set_xticks([])  
ax.set_yticks([])  
ax.set_aspect('equal', adjustable='box')  
  
# 显示图形  
plt.show()

在这里插入图片描述

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

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

相关文章

AI基础知识问答(1)

1.什么是线性判别分析法(FDA)? 线性判别分析是一种对于监督数据降维的经典方法。通过对数据标准化,求得类内散度矩阵和类间散度矩阵,寻找一个投影矩阵W,使得同类样例的投影点尽可能接近,异类样…

使用采购管理软件构建更高效的采购模式

采购流程是企业整个采购部门的关键要素。无论企业规模大小,构建采购流程的模式都将直接影响企业控制成本、管理风险和保持流程弹性的能力。 下面我们将解释采购模式的类型、优缺点,以及如何确定哪种模式最适合你的采购部门。 集中采购的优缺点 在集中采…

HTML小游戏26 —— HTML5密室逃生游戏(附完整源码)

💂 网站推荐:【神级源码资源网】【摸鱼小游戏】 【工具大全】🤟 基于Web端打造的:👉【轻量化工具创作平台】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【学习交流群】 本节教程我会带大家使用 HTML 、…

编程入行指南:从代码小白到技术大牛的“码农”奇幻漂流

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在这个飞速发展的信息时代,技术不断推陈出新,程序员若想保持行业翘楚地位,必须持续汲取新知、…

SQLiteC/C++接口详细介绍之sqlite3类(十六)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十五) 下一篇: SQLiteC/C接口详细介绍之sqlite3类(十七)(未发表) 50.sqlite…

相机sd卡照片删除后数据恢复,相机sd卡中的照片被删除后如何恢复数据

当我们使用相机拍摄照片时,有时会不小心删除了一些重要的照片。这可能是因为误操作、SD卡故障或者其他原因。无论是珍贵的照片、还是重要的工作文件,被删除后,我们往往会感到焦虑和失望。相机sd卡中的照片被删除后如何恢复数据?幸…

Windows下安装双版本Python环境安装

前言 根据自己电脑系统选择所需版本进行下载,本次以Windows11环境为展示案例 本机系统查看 例如Windows11,进入系统即可查看本机信息 Python环境安装 Python下载 Python 3 下载 Python 2 下载,在历史版本中找到Python 2 最新版进行下载…

YOLOv7-Openvino和ONNXRuntime推理【CPU】

纯检测系列: YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv7-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 跟踪系列: YOLOv5/6/7-O…

vscode 生成树状图工具:project-tree

按下快捷键“CtrlShiftP”, 在弹框中输入 Project Tree,然后敲回车即会在根目录自动生成README.md(如果之前没有的话)。

[题解]无厘头题目——无聊的军官

这道题非常无厘头! 题目描述: 每个学年的开始,高一新生们都要进行传统的军训。今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每次吹哨后学员们都会变换位置。每次左数第I位学员都会站到第ai个位置&#x…

谷歌的后量子密码学威胁模型

1. 引言 若现在不使用量子安全算法来加密数据,能够存储当前通信的攻击者最快十年内就能对其解密。这种先存储后解密的攻击是当前采用后量子密码学 (post-quantum cryptography,PQC) 背后的主要动机,但其他未来的量子计算威胁也需要一个深思熟…

Linux下Arthas(阿尔萨斯)的简单使用-接口调用慢排查

使用环境 k8s容器内运行了一个springboot服务,服务的启动方法是main()方法 下载并启动 arthas curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar选择应用 java 进程 就一个进程org.apache.catalina.startup.Bootstrap,输…

Unity PS5开发 天坑篇 之 申请开发者与硬件部署01

腾了好几天终于把PS5开发机调试部署成功, 希望能帮到国内的开发者, 主机游戏PlayStation/Nintendo Switch都是比较闭塞的,开发者账号是必须的。 开发环境有两个部分,一是DEV Kit 开发机, TEST Kit测试机两部分组成,二是Unity的支持库(安装后…

Android的三种动画详解(帧动画,View动画,属性动画)

Android的三种动画详解(帧动画、View动画、属性动画)_android动画效果大全-CSDN博客 1、帧动画 缺点是:占用内存较高,播放的是一帧一帧的图片,很少使用。 顺序播放预先定义的图片,类似于播放视频。 步骤…

数据结构 第3章:栈与队列

文章目录 1. 栈1.1 栈的基本概念1.2 栈的基本操作1.3 栈的顺序存储实现1.4 栈的链式存储实现 2. 队列2.1 队列的基本概念2.2 队列的基本操作2.3. 队列的顺序存储实现2.4 队列的链式存储实现2.5 双端队列 3. 栈与队列的应用3.1 栈在括号匹配中的应用3.2 栈在表达式求值中的应用3…

k8s的pod和svc相互访问时网络链路解析

k8s的pod和svc相互访问时网络链路解析 1. k8s环境中pod相互访问1.1. k8s中pod相互访问的整体流程1.2. k8s的相同机器的不同pod相互访问1.3. k8s的不同机器的不同pod相互访问 2. k8s访问svc2.1 nat操作2.2 流量进入到后端pod 3. 疑问和思考3.1 访问pod相互访问为什么不用做nat?…

【Linux】从零开始认识进程 — 前篇

我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。。——山本耀司 从零开始认识进程 1 认识冯诺依曼体系2 操作系统3 进程3.1 什么是进程???3.2 进程管理PCB 3.3 Linux中的进程深入理解 3.4 进程创建总结 送给…

【vue baidu-map】实现百度地图展示基地,鼠标悬浮标注点展示详细信息

实现效果如下&#xff1a; 自用代码记录 <template><div class"map" style"position: relative;"><baidu-mapid"bjmap":scroll-wheel-zoom"true":auto-resize"true"ready"handler"><bm-mar…

JVMJava虚拟机

JVM的内存区域 程序计数器&#xff1a; 字节码解释器通过改变程序计数器来依次读取指令&#xff0c;从而实现代码的流程控制&#xff0c;如&#xff1a;顺序执行、选择、循环、异常处理。 在多线程的情况下&#xff0c;程序计数器用于记录当前线程执行的位置&#xff0c;从而当…

python—gui-计算图像像素两点间距离

代码&#xff1a; import tkinter as tk from tkinter import ttkdef create_gui():# 创建Tkinter窗口root tk.Tk()# 设置窗口标题root.title("显示图片")# 图片文件路径image_path path_to_your_image.jpg# 加载图片img load_image(image_path)# 创建标签&#…