Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化:Matplotlib基础与高级技巧

数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表,我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一,不仅支持多种常用图表,还可以通过设置样式、添加注释等高级操作,满足各种定制化需求。本文将带你从Matplotlib的基础用法入手,再到一些高级技巧,全面掌握数据可视化的必备技能。
在这里插入图片描述

1. Matplotlib概述与安装

Matplotlib是Python的二维绘图库,专注于生成简单、清晰的图表。它特别适合数据分析工作流,与NumPy和Pandas等库的兼容性极高。首先,安装Matplotlib:

pip install matplotlib

导入Matplotlib

安装完成后,我们通常以plt作为别名导入Matplotlib的pyplot模块:

import matplotlib.pyplot as plt
import numpy as np

在这里插入图片描述

2. Matplotlib基础用法

2.1 绘制简单折线图

# 示例数据
x = np.linspace(0, 10, 100)  # 生成0到10的等距数值
y = np.sin(x)  # 计算y值# 绘制折线图
plt.plot(x, y, label='sin(x)', color='blue', linestyle='-', linewidth=2)
plt.xlabel('X-axis')  # x轴标签
plt.ylabel('Y-axis')  # y轴标签
plt.title('Simple Line Plot')  # 图表标题
plt.legend()  # 显示图例
plt.grid(True)  # 显示网格线
plt.show()

在这个简单折线图中,我们定义了标签、标题、线条样式和颜色,并显示了网格线和图例。

2.2 设置样式与颜色

Matplotlib提供了丰富的样式与颜色选择,可以轻松定制图表风格。我们可以通过linestylecolor等参数来调整图表风格,还可以用内置的主题快速应用图表风格:

plt.style.use('ggplot')  # 使用ggplot样式

在这里插入图片描述

3. 常见图表类型

Matplotlib支持多种图表类型,可以满足多种可视化需求。以下是几种常用的图表及其使用方法。

3.1 柱状图(Bar Chart)

柱状图适用于表示分类数据的数量分布。

# 示例数据
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 25]plt.bar(categories, values, color='skyblue')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart Example')
plt.show()

3.2 散点图(Scatter Plot)

散点图用于展示两个变量之间的关系,特别适合展示点状数据。

# 示例数据
x = np.random.rand(50)
y = np.random.rand(50)
sizes = 100 * np.random.rand(50)  # 点的大小
colors = np.random.rand(50)       # 点的颜色plt.scatter(x, y, s=sizes, c=colors, alpha=0.6, cmap='viridis')
plt.colorbar()  # 显示颜色条
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot Example')
plt.show()

3.3 直方图(Histogram)

直方图用于展示数据的分布情况,是观察数值型数据集中趋势和分布的好工具。

data = np.random.randn(1000)  # 生成标准正态分布数据plt.hist(data, bins=30, color='purple', edgecolor='black', alpha=0.7)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram Example')
plt.show()

3.4 饼图(Pie Chart)

饼图用于展示各个类别占整体的比例。

# 示例数据
labels = ['Category A', 'Category B', 'Category C']
sizes = [15, 35, 50]plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Pie Chart Example')
plt.show()

在这里插入图片描述

4. 子图与布局调整

在数据分析中,经常需要在一张图中展示多种数据。Matplotlib支持使用subplots函数创建多子图,并通过调整布局使图表更紧凑。

# 创建2行2列的子图布局
fig, axes = plt.subplots(2, 2, figsize=(10, 8))# 绘制每个子图
axes[0, 0].plot(x, y, 'r')        # 折线图
axes[0, 1].bar(categories, values) # 柱状图
axes[1, 0].scatter(x, y)           # 散点图
axes[1, 1].hist(data, bins=20)     # 直方图# 调整布局
fig.tight_layout()
plt.show()

在这里插入图片描述

5. 图表美化与高级技巧

5.1 添加注释

Matplotlib允许在图表中添加文本注释,以便标注出关键点或数据。

# 绘制简单折线图
plt.plot(x, y, label='sin(x)')# 添加注释
plt.annotate('Max Point', xy=(np.pi/2, 1), xytext=(np.pi/2+1, 1.5),arrowprops=dict(facecolor='black', shrink=0.05))plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Annotation Example')
plt.legend()
plt.show()

5.2 自定义坐标轴与网格

可以通过调整坐标轴的刻度、标签和样式来定制图表外观。

plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Custom Axes and Grid')# 自定义坐标轴
plt.xticks(np.arange(0, 11, 2))  # 设置x轴刻度间隔
plt.yticks([-1, 0, 1])           # 设置y轴刻度# 自定义网格线
plt.grid(color='gray', linestyle='--', linewidth=0.5)plt.show()

5.3 双Y轴图表

对于需要展示两个不同变量(且单位不同)的图表,可以使用双Y轴。

# 数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)# 创建双Y轴
fig, ax1 = plt.subplots()ax1.plot(x, y1, 'g-', label='sin(x)')
ax1.set_xlabel('X-axis')
ax1.set_ylabel('sin(x)', color='g')# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--', label='cos(x)')
ax2.set_ylabel('cos(x)', color='b')fig.tight_layout()
plt.title('Dual Y-Axis Example')
plt.show()

在这里插入图片描述

6. 保存图表

Matplotlib支持将生成的图表保存为多种格式(如PNG、PDF、SVG等)。可以使用savefig方法将图表保存到本地:

plt.plot(x, y)
plt.title('Save Plot Example')# 保存图表
plt.savefig('plot_example.png', dpi=300, bbox_inches='tight')  # dpi设置图像清晰度,bbox_inches调整图表边距
plt.show()

在这里插入图片描述

7. 实战案例:销售数据分析

接下来,通过一个案例来整合上述技巧,分析销售数据并生成多个图表。

案例说明

假设我们有一组包含月度销售额和利润的数据,目标是分析月度趋势、销售额与利润的关系,并进行可视化展示。

7.1 数据准备

# 生成示例数据
months = np.arange(1, 13)
sales = np.random.randint(5000, 15000, size=12)
profits = sales * np.random.uniform(0.05, 0.15, size=12)

7.2 绘制分析图表

1. 月度销售趋势图
plt.plot(months, sales, marker='o', color='b', label='Sales')
plt.xlabel('Month')
plt.ylabel('Sales ($)')
plt.title('Monthly Sales Trend')
plt.legend()
plt.grid(True)
plt.show()
2. 销售额与利润的散点图
plt.scatter(sales, profits, color='purple')
plt.xlabel('Sales ($)')
plt.ylabel('Profit ($)')
plt.title('Sales vs. Profit')
plt.grid(True)
plt.show()
3. 多子图展示
fig,axs = plt.subplots(1, 2, figsize=(14, 6))# 折线图
axs[0].plot(months, sales, marker='o', label='Sales', color='blue')
axs[0].set_title('Monthly Sales Trend')
axs[0].set_xlabel('Month')
axs[0].set_ylabel('Sales ($)')# 散点图
axs[1].scatter(sales, profits, color='green')
axs[1].set_title('Sales vs. Profit')
axs[1].set_xlabel('Sales ($)')
axs[1].set_ylabel('Profit ($)')fig.tight_layout()
plt.show()

在这里插入图片描述

8. 总结

本文带领大家从基础到高级,全面介绍了Matplotlib的各种功能,包括基础图表、子图布局、注释、坐标轴定制、双Y轴图表等。同时,结合实战案例分析销售数据,展示了如何在真实场景中使用Matplotlib进行数据可视化。希望本文能帮助你掌握数据可视化的基本技能,并为日后的数据分析提供支持。
在这里插入图片描述

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

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

相关文章

沈阳乐晟睿浩科技有限公司抖音小店新篇章

在当今数字化时代,电商行业如雨后春笋般迅速崛起,其中抖音小店凭借其庞大的用户基础、精准的推荐算法和便捷的购物体验,成为了电商领域的新宠。在这场电商变革中,沈阳乐晟睿浩科技有限公司(以下简称“乐晟睿浩”&#…

1,国产FPGA(紫光同创)-IP核-PLL

本文默认在0,国产FPGA(紫光同创)-新建PDS工程基础上完成。 1,添加IP核 右击(1)空白处进行添加,点击New IP(2)进行新建IP核。 选择本次实验要配置的IP核-PLL(…

“智能二维码”实现光伏行业数字信息化管理

近日,为了提升管理效率,国电投建业光伏电站将二维码引入设备巡视和班组建设中。 首先,使用传统纸质巡视作业卡,巡视工作强度大,容易出现错误;此外,“三会一活动”和培训记录等班组建设过程材料大…

电脑录屏不用愁!四款免费录屏软件深度体验分享

虽然我不是专业的,但是我有一颗想要变得专业的心。作为一名经常需要录制教学视频和游戏直播的博主,我深知一款好用的录屏软件对于工作效率的重要性。今天,我就来和大家分享一下我最近亲测的四款免费录屏软件,来看看哪一款更适合你…

shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘

查找美国安全局漏洞 nww.nsa.gov(美国安全局官方网站) net参数使用 搜索指定的ip网段 shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24 (老美国家安全局的一个网段)可能直接访问不太行,可以使用host参数,得到域名再去…

部署MiniCPM-V

GitHub - OpenBMB/MiniCPM-V: MiniCPM-V 2.6: A GPT-4V Level MLLM for Single Image, Multi Image and Video on Your Phone 安装和执行 "Local WebUI Demo" 的步骤如下: 克隆仓库并导航到源文件夹: git clone https://github.com/OpenBMB/M…

Vue 权限管理

vue 中,比较常见的需要进行权限管控的权限控制实现思路有四条:、 菜单的控制 在登录请求中,会得到权限数据,当然,这个需要后端返回数据的支持,前端根据权限数据,展示对应的菜单,单…

MongoDB 8.0.3版本安装教程

MongoDB 8.0.3版本安装教程 一、下载安装 1.进入官网 2.选择社区版 3.点击下载 4.下载完成后点击安装 5.同意协议,下一步 6.选择第二个Custon,自定义安装 7.选择安装路径 !记住安装路径 8.默认,下一步 9.取…

用于约束多目标优化的新型双阶段双种群进化算法

PPT链接:人工智能论文课程汇报介绍PPT资源-CSDN文库 A Novel Dual-Stage Dual-Population Evolutionary Algorithm for Constrained Multi-Objective Optimization IEEE Transactions on Evolutionary Computation, Volume 26, Issue 5, Pages 1129-1143, October …

C语言中的位操作

第一章 变量某位赋值与连续赋值 寄存器 | 值 //例如&#xff1a;a 1000 0011b a | (1<<2) //a 1000 0111 b 单独赋值 a | (3<<2*2) // 1011 0011b 连续赋值 第二章 变量某位清零与连续清零 寄存器 & ~&#xff08;&#xff09; 值 //例子&#xff1a;a …

uniapp 报错Invalid Host header

前言 在本地使用 nginx 反向代理 uniapp 时&#xff0c;出现错误 Invalid Host header 错误原因 因项目对 hostname 进行检查&#xff0c;发现 hostname 不是预期的&#xff0c;所以&#xff0c;报错 Invalid Host header 。 解决办法 这样做是处于安全考虑。但&#xff0…

Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程

Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程 Ubuntu 20.04 安装 OpenCV 和 OpenCV_contrib 教程前言 OpenCV概述核心功能优势特点应用领域安装与使用 OpenCV_contrib概述核心功能具体模块 安装与使用一、准备工作二、下载OpenCV和OpenCV_contrib三、编译和安装OpenCV四、…

10.24.2024刷华为OD C题型(四) -- 对象list按照多个属性排序

文章目录 最长连续子序列AI面板识别语法知识记录 最长连续子序列 https://www.nowcoder.com/discuss/592408743019589632 if __name__ "__main__":# 获取用户输入# numbers int(input().split(,))# str_arr input().split(,)arr [int(num) for num in input(…

生活中是否害怕过机械硬盘出现坏道?

目录 一、坏道起因 二、继续了解-系统对坏扇区的处理 &#xff08;一&#xff09;硬盘自身的处理机制 &#xff08;二&#xff09;操作系统层面的处理 三、进一步了解-备用扇区 &#xff08;一&#xff09;备用扇区的工作原理 &#xff08;二&#xff09;S.M.A.R.T.技术…

开发了一个成人学位英语助考微信小程序

微信小程序名称&#xff1a;石榴英语 全称&#xff1a;石榴英语真题助手 功能定位 北京成人学士学位英语辅助学习工具&#xff0c;包含记高频单词&#xff0c;高频词组&#xff0c;专项练习&#xff0c;模拟考试等功能。 开发背景 个人工作需要提高学习英文水平&#xff…

[Web安全 网络安全]-Burp Suite抓包软件‘下载‘安装‘配置‘与‘使用‘

文章目录&#xff1a; 一&#xff1a;前言 1.简介 2.主要功能 3.抓包原理 4.抓包过程 二&#xff1a;Burp Suite下载安装与配置 1.下载Burp Suite 2.安装JDK&#xff08;用于Java运行环境_包含JRE&#xff09; 第一步&#xff1a;安装JDK环境 第二步&#xff1a;安…

2、片元着色器之有向距离场(SDF)运算:并集、差集、交集

1、并集 float sdCircle(vec2 uv,float r){return length(uv)-r; } float sdRect(vec2 uv,float r){return max(abs(uv.x),abs(uv.y))-r; } void mainImage( out vec4 fragColor, in vec2 fragCoord ) {float w 1.0/iResolution.y;// 计算纹理坐标vec2 uv fragCoord/iResolu…

【Apache Zookeeper】

一、简介 1、场景 如何让⼀个应⽤中多个独⽴的程序协同⼯作是⼀件⾮常困难的事情。开发这样的应⽤&#xff0c;很容易让很多开发⼈员陷⼊如何使多个程序协同⼯作的逻辑中&#xff0c;最后导致没有时间更好地思考和实现他们⾃⼰的应⽤程序逻辑&#xff1b;又或者开发⼈员对协同…

面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) …

名词(术语)了解 -- SSG

名词&#xff08;术语&#xff09;了解 – SSG 什么是静态站点生成(SSG)? 静态站点生成(Static Site Generation, SSG)是一种在构建时生成静态HTML网页的网站构建方法。与动态网站相比&#xff0c;SSG会提前将所有页面渲染成静态HTML文件&#xff0c;这些文件可以直接部署到…