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

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

在这里插入图片描述

相关文章:

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

目录 文章导航一、介绍二、安装Matplotlib三、导入Matplotlib四、设置可以中文显示四、常用图形1、散点图(Scatter Plot)2.1、线性图(Line Plot)2.2、堆叠折线图2.3、多图例折线图3.1、柱状图/条形图(Bar Chart&#x…...

官网建设的江湖四大流派,一派苦撑、一派完犊子、另外两派搅局。

有人的地方就有江湖,有江湖的地方就有纷争,有纷争地方就有此起彼伏。 说好的,当赚够了钱就退出建站江湖,人就是江湖,怎么退? 官网建设风起云涌20年,一方倒地,一方揭竿而起&#xff…...

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…...

SA3D:基于 NeRF 的三维场景分割方法

Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36. Introduction: https://jumpat.github.io/SA3D/ Code: https://github.com/Jumpat/SegmentAnythingin3D SA3D 是一种用于 NeRF 表…...

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

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

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器(3)Bug问题记录1&#xff…...

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…...

数据结构——动态顺序表

数据结构的动态顺序表有以下几个操作:创建,销毁,初始化,增删查改和打印以及内存空间不够时的扩容 本文的宏定义: #define SeqTypeData int 1.动态顺序表的创建 typedef struct SeqListInit{//动态顺序表的创建SeqT…...

Android Studio实现内容丰富的安卓宠物医院管理系统

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.系统公告 3.宠物社区(可发布宠物帖子&#xf…...

华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)

题目描述: 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…...

在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?

一、mac磁盘工具显示未装载 1.打开终端,输入 diskutil list查看当前硬盘列表,大多数时候,可以解决。 二、使用命令行装载硬盘 执行上面命令后,仍不起作用,则手动挂载,在命令行输入如下内容: …...

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1:按照二叉搜索树的方法插入结点步骤2:自底向上调整平衡因子步骤3:触发旋转操作(AVL树平衡的精髓)右单旋左单旋左右双旋右左双旋…...

CodeSys通过C函数接口调用Qt

文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】,了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…...

线性代数笔记18--行列式公式、代数余子式

1. 行列式公式推导 二阶行列式推导 [ a b c d ] [ a 0 c d ] [ 0 b c d ] [ a 0 0 d ] [ a 0 c 0 ] [ 0 b c 0 ] [ 0 b 0 d ] [ a 0 0 d ] − [ b 0 0 c ] a d − b c \begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}& \begin{bmatrix} a &…...

最新2024年项目基金撰写与技巧及GPT融合应用

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…...

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus? Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库,用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…...

【Hadoop】Hadoop概述与核心组件

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

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展,数据可视化已成为一项重要工具,有助于用户更好地理解数据和分析结果。其中,3D地图作为一种可视化工具,已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合,以更加直观…...

JavaScript 进阶(二)

一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 : 是一种特殊的函数,主要用来初始化对象。 使用场景: 常规的 {...} 语法允许创建一个对象。…...

基于ssm+layui的图书管理系统

基于ssmlayui的图书管理系统 账户类型分为:管理员,用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为:管理员,用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...

双指针算法_复写零

题目: 给一个固定长度的数组arr,将数组中出现的每一个0都复写一遍,并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素,在数组上直接修改 示例: 双数组模拟操作: 从示例来看,因为…...

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…...

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…...

用miniconda建立PyTorch、Keras、TensorFlow三个环境

一、配置清华镜像conda源 由于网络问题,直接使用conda默认的源下载包可能会非常慢。为了解决这个问题,可以配置国内镜像源来加速包的下载。清华大学TUNA协会提供了一个常用的conda镜像源。下面是如何配置清华镜像源的步骤: 1. 配置清华conda…...

【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】

【QT 5 Linux下qt软件点击.sh脚本运行Dconf编辑器学习他人文章番外篇:点击脚本运行软件】 1、前言2、实验环境3、自我学习总结-本篇总结1、说明:代替qt的快捷方式2、适用性更广3、了解工具:Dconf编辑器注意事项: 4、参考链接-感谢…...

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来,引发了业务模式与应用使用的巨大变革,掀起了各大企业对于多模态大模型的研究热潮。3月初,AnthropicClaude在官网正式发布Claude 3系列多模态大模型,据了解,该模型在多个维度上超越了GPT-4&#…...

.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码 [AllowAnonymous] public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode) { 返回excel。 string ReportName "ExcelTemplete" DateTime.Now.Ticks.ToString(); …...

如何压缩图片文件大小?教大家几种方法

当图片文件较大时,图片压缩可以有效的缩小图片kb,从而使图片储存起来更加方便,也可以解决上传时图片大小被限制的问题,那么我们有什么方法可以简单快速的将图片大小压缩呢?下面就来给大家分享几个如何修改照片大小kb的…...

Qt 如何搭建Lua的运行环境

一、Lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程(procedural)编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的,运行速度快,支持自动内存管理,因此被广泛用于配置、脚本…...