【四 (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()

在这里插入图片描述

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

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

相关文章

PostgreSQL中vacuum 物理文件truncate发生的条件

前言 前段时间,有些同学说到vacuum截断的行为时,认为,只要末尾是空页,无论多少,都会被截断,真是这样的吗? PostgreSQL当中,由于vacuum的操作并不总能将死元组的空间进行”物理截断…

HNU-计算机系统-实验1-原型机vspm1.0-(二周目玩家视角)

前言 二周目玩家,浅试一下这次的原型机实验。总体感觉跟上一年的很相似,但还是有所不同。 可以比较明显地感觉到,这个界面越来越好看了,可操作与可探索的功能也越来越多了。 我们HNU的SYSTEM真的越来越好了!&#x…

JMeter 查看 TPS 数据,详细指南

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下方法查看 T…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法,在众多文献均有应用。下面简述一下原理。 (1)量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念,它与经典比特不同,是因为它可以在同一时刻处于两个状态的…

Unreal发布Android App如何面对混乱的Android SDK开发环境

Unreal发布Android App如何面对混乱的Android SDK开发环境 混乱的Android SDK开发环境Unreal 4可以借用Unity3D安装的Android环境Unreal 5需要安装Android Studio开发环境Android Studio的DK版本目录处理gradle和java版本gradle提示错误总结 混乱的Android SDK开发环境 Unreal…

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 (爬百度首页) from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //!&am…

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop(常用)2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高(高可靠、高扩展、高效、高容错) Hadoop组成1.HDFS管理者:NameNode(n…

css3 实现html样式蛇形布局

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …

音视频如何快速转二维码?在线生成音视频活码的教程

音频文件的二维码制作步骤是什么样的呢&#xff1f;扫描二维码来展现内容是很流行的一种方式&#xff0c;基本上日常生活中经常会用的图片、音频、视频等都可以使用生成二维码的方式。现在很多的幼儿园或者学校会录制孩子的音频或者视频内容用来展示&#xff0c;那么二维码制作…

鸿蒙开发实战:【音频组件】

简介 音频组件用于实现音频相关的功能&#xff0c;包括音频播放&#xff0c;录制&#xff0c;音量管理和设备管理。 图 1 音频组件架构图 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样&#xff0c;获取到离散时域上离散信号的过程。 采样率 采样…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:RelativeContainer)

相对布局组件&#xff0c;用于复杂场景中元素对齐的布局。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 规则说明 容器内子组件区分水平方向&#xff0c;垂直方向&#xff1a; 水平方向为left&…

HTTPS的工作过程

一、HTTPS 是什么 HTTPS 也是⼀个应用层协议&#xff0c;是在 HTTP 协议的基础上引入了⼀个加密层. HTTP 协议内容都是按照文本的方式明文传输的。这就导致在传输过程中出现⼀些被篡改的情况. 在互联网上, 明文传输是比较危险的事情!!! HTTPS 就是在 HTTP 的基础上进行了加密…

platform设备注册驱动模块的测试

一. 简介 上一篇文章编写了 platform设备注册代码&#xff0c;文章地址如下&#xff1a; 无设备树platform驱动实验&#xff1a;platform设备注册代码实现-CSDN博客 本文继续无设备树platform驱动实验&#xff0c;本文对编译好的 设备注册程序进行测试&#xff0c;测试所实…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

LeetCode 面试经典150题 80.删除有序数组中的重复项II

题目&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…

百度paddleocr GPU版部署

显卡&#xff1a;NVIDIA GeForce RTX 4070&#xff0c;Nvidia驱动程序版本&#xff1a;537.13 Nvidia驱动程序能支持的最高cuda版本&#xff1a;12.2.138 Python&#xff1a;python3.10.11。试过python3.12&#xff0c;安装paddleocr失败&#xff0c;找不到相关模块。 飞桨版本…

Linux从0到1——Linux第一个小程序:进度条

Linux从0到1——Linux第一个小程序&#xff1a;进度条 1. 输出缓冲区2. 回车和换行的本质3. 实现进度条3.1 简单原理版本3.2 实际工程版本 1. 输出缓冲区 1. 小实验&#xff1a; 编写一个test.c文件&#xff0c;&#xff1a; #include <stdio.h> #include <unistd.h…

老电脑装什么系统流畅

对于一些老旧电脑来说&#xff0c;重装系统是提升电脑性能的最佳选择。那么&#xff0c;老电脑装什么系统流畅呢&#xff1f;推荐Windows 7系统&#xff0c;它对硬件的需求相对较低。配置较低的电脑运行Windows 7可以更好地利用系统资源&#xff0c;提高电脑的运行速度和响应能…

c语言实现https客户端 源码+详细注释(OpenSSL下载,visual studio编译器环境配置)

OpenSSL的下载和环境配置 请参考&#xff1a;openssl下载安装教程 步骤&#xff1a;官网下载->安装到选定目录->配置环境变量->打开命令窗口检查是否安装成功 注意&#xff1a; 打开命令窗口&#xff08;快捷键winr,在弹出窗口内输入cmd按回车&#xff09;&#xff0…

ChatGPT解决hmm...something seems to have gone wrong.

ChatGPT解决hmm…something seems to have gone wrong. 这里是官方社区的一种workaround办法。仅仅只是mark一下。 我这边遇到的现象是&#xff0c;ChatGPT 3.5是正常的&#xff0c;但是使用ChatGPT 4就会频繁的出现这样的输出。而且恶心的是&#xff0c;即使是这种输出&…