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

目录

    • 文章导航
    • 一、介绍
    • 二、安装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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于openCV实现的单目相机行人和减速带检测

概述 在计算机视觉项目中,相机标定是一项至关重要的任务,因为它可以校正相机内部参数,消除因镜头畸变等因素导致的图像失真,从而提高后续图像处理和分析的精度。在这个项目中,相机标定的核心功能集成在名为calibratio…

C++_学习String

1.标准库中的string类 1. 字符串是表示字符序列的类 2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性 3. string 类是使用 char( 即作为它的字符类型,使用它的默…

钡铼技术有限公司R40路由器工业4G让养殖环境监控更高效

钡铼技术有限公司的R40路由器是一款专为养殖环境监控而设计的工业级4G路由器。该路由器的出现极大地提高了养殖行业的监控效率,为养殖场主和管理者提供了更可靠、高效的解决方案。本文将从功能特点、优势以及应用案例等方面介绍钡铼技术有限公司的R40路由器在养殖环…

2025武忠祥考研数学,视频百度网盘+基础全程课程PDF

“得数学者的天下”,25考研首先要开始的就是数学复习,而数学复习首先要开始的必然是高数! 很多同学选择了跟着武忠祥老师学习高数,但是具体要怎么学?用什么书?怎么刷题?快来看看以 下的武忠祥…

html和winform webBrowser控件交互并播放视频(包含转码)

1、 为了使网页能够与winform交互 将com的可访问性设置为真 [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name "FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)] 2、在webBrow…

自动驾驶泊车(APA_HAVP)算法学习整理

自动驾驶泊车(APA/HAVP)算法学习整理 附赠宝贵的全套自动驾驶学习资料:链接

基于GA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 4…

腾讯春招后端一面(算法篇)

前言: 哈喽大家好,前段时间在小红书和牛客上发了面试的经验贴,很多同学留言问算法的具体解法,今天就详细写个帖子回复大家。 因为csdn是写的比较详细,所以更新比较慢,大家见谅~~ 就题目而言,…

中科数安 | 企业办公透明加密系统,终端文件数据 \ 资料防泄密管理软件

#公司办公文件数据 \ 资料防泄密软件系统# "中科数安"是一家专注于数据安全领域的公司,其提供的企业办公加密系统是一种针对企事业单位内部数据安全需求而设计的解决方案。该系统通过先进的加密技术,对企业在日常办公过程中产生的各类敏感信息…

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具,用…

计算机网络(6)-----传输层

目录 一.传输层 二.UDP协议 1.UDP的特点: 2.UDP的首部格式: 3.UDP校验的过程: 三.TCP协议 1.TCP协议的特点 2.TCP报文段首部格式 3.TCP的连接管理 (1)连接建立(三次握手) &#xff0…

uniapp无感登录封装

全局请求封装 https://blog.csdn.net/qq_42618566/article/details/109308690 无感登录封装 import {http} from "./index.js" let requestsQueue []; // 请求队列// 记录请求队列 export function recordRequests(path, params, loading, method) {requestsQueu…

开箱即用之 windows部署jdk、设置nginx、jar自启

jdk安装 官网下载对应的安装包,解压之后放在本地指定的文件夹下 传送门https://www.oracle.com/java/technologies/downloads/#jdk21-windows 我比较喜欢下载zip方式的,解压之后直接能用,不需要安装了 配置环境 JAVA_HOME 添加path路径 …

Python常见设计模式库之python-patterns使用详解

概要 设计模式是解决软件设计问题的经验总结和最佳实践。Python 作为一种灵活且强大的编程语言,也可以使用设计模式来提高代码的可读性、可维护性和可扩展性。Python Patterns 库提供了一系列经典和常用的设计模式实现,本文将深入探讨 Python Patterns 库的功能、使用方法以…

Ubuntu Desktop 设置 gedit

Ubuntu Desktop 设置 gedit 1. View2. Editor3. Font & Colors4. keyboard shortcut5. Find and ReplaceReferences gedit (/ˈdʒɛdɪt/ or /ˈɡɛdɪt/) is the default text editor of the GNOME desktop environment and part of the GNOME Core Applications. Desig…

【机器学习-01】机器学习基本概念与建模流程

机器学习的过程本质上是一个不断通过数据训练来提升模型在对应评估指标上表现的过程。在此过程中,为模型提供有效的反馈并基于这些反馈进行持续的调整是至关重要的。只有当这个过程顺利进行时,模型才能得到有效的训练,机器才能真正实现学习。…

Android SystemServer进程解析

SystemServer进程在android系统中占了举足轻重的地位,系统的所有服务和SystemUI都是由它启动。 一、SystemServer进程主函数流程 1、主函数三部曲 //frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…

mysql实战开发之 mysql 删除一张表某个字段的sql语句

有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…

美团大规模KV存储挑战与架构实践

KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量,并且保持着 99.995% 的服务可用性。在 DataFunSummit 2023 数据基础架构峰会上,我们分享了《美团大规模 KV 存储挑战与架构实践》,本文为演讲内容的整理…

CentOS7 部署 k8s

准备两台虚拟机192.168.152.129192.168.152.130更改主机名192.168.152.129:hostnamectl set-hostname k8s-masterhostnamectl192.168.152.130:hostnamectl set-hostname k8s-node1hostnamectl master节点配置 1.配置hosts 在两台节点上执行vim /etc/h…