【Python】使用matplotlib绘制图形(曲线图、条形图、饼图等)

文章目录

    • 一、什么是matplotlib
    • 二、matplotlib 支持的图形
    • 三、如何使用matplotlib
      • 1. 安装matplotlib
      • 2. 导入matplotlib.pyplot
      • 3. 准备数据
      • 4. 绘制图形
      • 5. 定制图形
      • 6. 显示或保存图形
      • 7. (可选)使用subplots创建多个子图
      • 注意事项:
    • 四、常见图形使用示例
      • 1. 线图 (Line Plot)
      • 2. 散点图 (Scatter Plot)
      • 3. 条形图 (Bar Chart)
      • 4. 直方图 (Histogram)
      • 5. 饼图 (Pie Chart)
      • 6. 直方图 2d
      • 7. 面积图(Area Plot)
      • 8. 热力图(Heatmap)
      • 9. 三维图形(3D Plot)
      • 10. 堆叠图(Stacked Plot)
    • 五、常用函数
    • 参考

一、什么是matplotlib

matplotlib 是一个用于创建静态、动态和交互式可视化图形的 Python 库。它被广泛用于数据可视化,并且可以与多种操作系统和图形后端一起工作。matplotlib 提供了一套与 MATLAB 相似的命令 API,适合交互式制图,也可以作为绘图控件嵌入到其他应用程序中。

matplotlib 的主要组成部分是 pyplot,它是一个类似于 MATLAB 的绘图框架。pyplot 提供了一个 MATLAB 式的接口,可以隐式地创建图形和轴,使得绘图变得简单。

以下是一个简单的 matplotlib 使用示例,用于绘制一条简单的折线图:

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图形
plt.figure()# 绘制折线图
plt.plot(x, y, '-')# 设置图表标题和坐标轴标签
plt.title("Simple Plot of Sine Function")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")# 显示图形
plt.show()

在这个例子中,我们首先导入了 matplotlib.pyplotnumpy。然后,我们创建了一组数据 xy,其中 yx 的正弦函数。接下来,我们使用 plt.figure() 创建一个新的图形,并使用 plt.plot() 绘制折线图。最后,我们设置了图表的标题和坐标轴标签,并使用 plt.show() 显示图形。

这只是 matplotlib 的一个基本示例。该库提供了许多其他功能,包括散点图、条形图、饼图、3D 图形、等高线图等。此外,matplotlib 还支持自定义颜色、线型、标记等,以及添加图例、网格等。

二、matplotlib 支持的图形

matplotlib 是一个非常灵活的绘图库,支持绘制多种类型的图形。以下是一些 matplotlib 支持的主要图形类型:

  1. 线图 (Line Plots): 最基本的图形类型,用于显示数据点的连接。

  2. 散点图 (Scatter Plots): 用于显示两个变量之间的关系,通过点的分布来表示。

  3. 条形图 (Bar Charts): 适用于展示分类数据的相对大小。

  4. 直方图 (Histograms): 展示数据分布的统计图,通常用于表示连续变量的分布情况。

  5. 饼图 (Pie Charts): 用于表示整体中各部分的比例关系。

  6. 箱图 (Box Plots): 用于展示数据的分布情况,包括中位数、四分位数、最大值、最小值以及可能存在的异常值。

  7. 面积图 (Area Charts): 类似于线图,但是下方区域会被填充颜色,用于表示数据随时间的变化量。

  8. 等高线图 (Contour Plots): 通常用于表示三维数据在二维平面上的投影,通过等高线展示数据点的密集程度。

  9. 热力图 (Heatmap): 通过颜色的深浅来表示数据矩阵中各个值的大小。

  10. 极坐标图 (Polar Plots): 在极坐标系中展示数据点,常用于表示与角度相关的信息。

  11. 三维图形 (3D Plots): 用于在三维空间中展示数据点的分布情况,可以创建三维散点图、三维曲面图等。

  12. 堆叠图 (Stacked Plots): 适用于展示多个分类数据系列的累积效果,如堆叠条形图或堆叠面积图。

  13. 误差条图 (Error Bar Charts): 用于表示数据点的不确定性或变化范围。

  14. 矢量场图 (Vector Fields): 用于表示矢量数据,如风向或流体的流动方向。

  15. 流线图 (Stream Plots): 类似于矢量场图,但更侧重于表示流体的流动路径。

matplotlib 还支持许多其他高级和定制化的图形,包括但不限于小提琴图 (violin plots)、树状图 (dendrograms)、雷达图 (radar charts) 等。由于其强大的定制性和灵活性,matplotlib 已经成为数据可视化的重要工具之一。

三、如何使用matplotlib

使用matplotlib进行数据可视化是一个相对直接的过程。以下是一个清晰、分点的指南,帮助您开始使用matplotlib

1. 安装matplotlib

首先,确保您已经安装了matplotlib库。如果还没有安装,可以使用pip进行安装:

pip install matplotlib

2. 导入matplotlib.pyplot

在Python脚本或Jupyter Notebook中,您需要导入matplotlib.pyplot模块,通常我们使用别名plt来引用它:

import matplotlib.pyplot as plt

3. 准备数据

准备您要可视化的数据。这可以是实验数据、统计数据或任何您想要展示的信息。

4. 绘制图形

使用plt中的函数来绘制您想要的图形。以下是一些常见图形的绘制方法:

  • 线图

    plt.plot(x, y, label='Line 1')  # x和y是数据点
    
  • 散点图

    plt.scatter(x, y)  # x和y是数据点
    
  • 条形图

    plt.bar(x, y)  # x是分类变量,y是对应值
    
  • 直方图

    plt.hist(data, bins=10)  # data是要统计的数据,bins是分组数量
    
  • 饼图

    plt.pie(sizes, labels=labels)  # sizes是各部分大小,labels是标签
    

5. 定制图形

您可以添加标题、轴标签、图例以及调整轴的范围等:

plt.title('My Plot')        # 添加标题
plt.xlabel('X Axis Label')  # 添加X轴标签
plt.ylabel('Y Axis Label')  # 添加Y轴标签
plt.legend()                # 添加图例
plt.xlim(0, 10)             # 设置X轴范围
plt.ylim(0, 100)            # 设置Y轴范围

6. 显示或保存图形

最后,使用plt.show()来显示图形,或者使用plt.savefig()来保存图形到文件:

plt.show()  # 显示图形
# 或者
plt.savefig('my_plot.png')  # 保存图形为PNG文件

7. (可选)使用subplots创建多个子图

如果您想在同一个窗口中显示多个图形,可以使用plt.subplots()

fig, axs = plt.subplots(nrows=2, ncols=2)  # 创建一个2x2的子图网格
# 然后可以在每个子图上进行绘制,例如:
axs[0, 0].plot(x1, y1)  # 在第一个子图上绘图
axs[0, 1].scatter(x2, y2)  # 在第二个子图上绘图
# ...以此类推

注意事项:

  • 确保您的数据格式正确,并且与所选的图形类型兼容。
  • matplotlib具有高度的可定制性,您可以通过查阅官方文档来了解更多高级功能和定制选项。
  • 在绘制复杂图形时,考虑使用面向对象的方式来操作图形和轴对象,这可以提供更精细的控制。

四、常见图形使用示例

下面我会通过具体的代码示例来介绍matplotlib库中常见图形的绘制方法。

1. 线图 (Line Plot)

线图通常用于展示数据随时间的变化趋势。

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制线图
plt.plot(x, y)
plt.title('Line Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.grid(True)
plt.show()

在这里插入图片描述

2. 散点图 (Scatter Plot)

散点图用于展示两个变量之间的关系。

# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)# 绘制散点图
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.grid(True)
plt.show()

在这里插入图片描述

3. 条形图 (Bar Chart)

条形图适用于展示分类数据的相对大小。

# 创建数据
categories = ['Category1', 'Category2', 'Category3', 'Category4']
values = [23, 45, 56, 12]
# 设置字体为支持中文的字体,比如'SimHei'(黑体),确保你的系统中安装了该字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 绘制条形图
plt.bar(categories, values, label='测试图例')
plt.title('Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.legend()
plt.show()

在这里插入图片描述

4. 直方图 (Histogram)

直方图用于展示数据分布的统计图。

# 创建数据(正态分布的随机样本)
data = np.random.rand(100)
print(data)data = np.sort(data)
print(data)
# 绘制直方图
plt.hist(data, bins=20, edgecolor='black', color='skyblue', alpha=0.7)# 定制图形
plt.title('Histogram of Data Distribution')
plt.xlabel('Value Range')
plt.ylabel('Frequency')
plt.grid(True)# 显示图形
plt.show()

在这里插入图片描述

5. 饼图 (Pie Chart)

饼图用于表示整体中各部分的比例关系。

# 创建数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]# 绘制饼图
plt.pie(sizes, labels=labels)
plt.title('Pie Chart')
plt.show()

在这里插入图片描述

6. 直方图 2d

直方图用于展示数据分布的统计图。

# 创建数据
x = np.array([1, 2, 3, 4, 2, 2, 2, 1])
y = np.array([1, 2, 3, 4, 1, 2, 3, 4])# 绘制直方图
plt.hist2d(x, y, bins=[20, 20], cmap=plt.cm.jet)
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 添加带有标签的颜色条
plt.colorbar(label='Counts')
plt.grid(True)
plt.show()

在这里插入图片描述

7. 面积图(Area Plot)

面积图是一种展示数据随时间变化趋势的图形,通常用于显示时间序列数据。

import matplotlib.pyplot as plt  
import numpy as np  # 模拟数据  
x = np.arange(1, 6)  
y1 = np.random.randint(1, 5, 5)  
y2 = np.random.randint(1, 5, 5)  # 绘制面积图  
# 绘制 y1 到 0 之间的区域
plt.fill_between(x, y1, color='blue', alpha=0.5, label='Area 1')  
# 绘制 y1 到 y2 之间的区域
plt.fill_between(x, y1, y2, color='red', alpha=0.5, label='Area 2')  plt.legend()  
plt.show()

在这里插入图片描述

8. 热力图(Heatmap)

热力图通常用于显示数据矩阵中各个元素值的大小,通过颜色来表示数值。

示例1

import matplotlib.pyplot as plt  
import numpy as np  
import seaborn as sns  # 创建一个数据矩阵  
data = np.random.rand(10, 12)  # 绘制热力图  
sns.heatmap(data, cmap='coolwarm')  
plt.show()

在这里插入图片描述
示例2

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt# 创建一个假设的数据集
data = {'Product': ['A', 'B', 'C', 'D', 'E'],'January': np.random.randint(10, 100, 5),'February': np.random.randint(10, 100, 5),'March': np.random.randint(10, 100, 5),'April': np.random.randint(10, 100, 5),'May': np.random.randint(10, 100, 5),'June': np.random.randint(10, 100, 5)
}# 将数据转换为Pandas DataFrame
df = pd.DataFrame(data)
df = df.set_index('Product')# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(df, annot=True, cmap='coolwarm', fmt='d', linewidth=0.5)# 设置图表标题和坐标轴标签
plt.title('Monthly Sales Heatmap')
plt.xlabel('Month')
plt.ylabel('Product')# 显示图表
plt.show()

在这里插入图片描述

9. 三维图形(3D Plot)

Matplotlib也支持三维图形的绘制,例如三维散点图、三维曲面图等。

import matplotlib.pyplot as plt
import numpy as np# 创建3D坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 模拟三维数据点
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)# 绘制三维散点图
ax.scatter(x, y, z, c='b', marker='o')plt.show()

在这里插入图片描述

10. 堆叠图(Stacked Plot)

堆叠图通常用于展示不同类别数据随某个变量的累积变化。

import matplotlib.pyplot as plt
import numpy as np# 模拟数据
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N)  # the x locations for the groups
width = 0.35  # the width of the bars: can also be len(x) sequence# 绘制男性数据堆叠图
p1 = plt.bar(ind, menMeans, width, label='Men')# 绘制女性数据堆叠图,注意这里的bottom参数,它使得女性数据的柱状图从男性数据的顶部开始绘制
p2 = plt.bar(ind, womenMeans, width, label='Women', bottom=menMeans)plt.ylabel('Scores')
plt.title('Scores by group and gender')
# 设置X轴刻度
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
# 设置y轴刻度
plt.yticks(np.arange(0, 81, 10))
# 显示图例
plt.legend()
plt.show()

在这里插入图片描述

这些代码示例展示了如何使用matplotlib绘制常见的图形。您可以根据需要调整数据和图形属性来定制您的图表。每个图形类型都有许多可配置的选项,例如颜色、线型、标记样式等,您可以通过查阅matplotlib的官方文档来了解更多细节。

五、常用函数

matplotlib库中,有许多常用的函数用于数据可视化。以下是一些matplotlib.pyplot模块中常用的函数:

函数描述使用示例
plot()绘制线图plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
scatter()绘制散点图plt.scatter([1, 2, 3, 4], [1, 4, 9, 16])
bar()绘制条形图plt.bar([1, 2, 3, 4], [10, 15, 7, 10])
hist()绘制直方图data = np.random.randn(1000); plt.hist(data, bins=30)
pie()绘制饼图plt.pie([10, 20, 30, 40], labels=['A', 'B', 'C', 'D'])
boxplot()绘制箱线图data = np.random.normal(100, 20, 200); plt.boxplot(data)
imshow()显示图像image = np.random.rand(10, 10); plt.imshow(image)
xlabel()设置X轴标签plt.xlabel('Time')
ylabel()设置Y轴标签plt.ylabel('Amplitude')
title()设置图形标题plt.title('Sample Plot')
xlim()设置X轴范围plt.xlim(0, 10)
ylim()设置Y轴范围plt.ylim(-1, 1)
xticks()设置X轴刻度plt.xticks([0, 1, 2, 3], ['zero', 'one', 'two', 'three'])
yticks()设置Y轴刻度plt.yticks([-1, 0, 1], ['min', 'zero', 'max'])
legend()添加图例plt.plot([1, 2, 3], label='Line 1'); plt.legend()
grid()添加网格线plt.grid(True)
show()显示图形plt.plot([1, 2, 3], [1, 4, 9]); plt.show()
savefig()保存图形plt.plot([1, 2, 3], [1, 4, 9]); plt.savefig('plot.png')

请注意,上述示例代码仅为简单演示函数的使用,实际应用中可能需要根据具体需求调整参数和设置。另外,为了使示例代码简洁明了,这里没有包含数据准备和图形细节调整的部分。在实际应用中,你通常需要先准备好数据,并根据需要调整图形的各种属性(如线型、颜色、标签等)。

参考

  • Matplotlib中文网

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

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

相关文章

联盟学习:技术原理、特点及适用场景

一、引言 随着大数据和人工智能技术的快速发展,数据成为了推动科技进步的重要资源。然而,在实际应用中,数据往往呈现出碎片化、分散化的特点,如何有效地利用这些数据成为了业界关注的焦点。联盟学习(Federated Learni…

880基础题查漏补缺

高等数学 函数极限连续 无穷大包括∞与-∞ 无穷小≠0 0无穷大0 有界函数无穷大不定 极限不存在极限不存在极限可能存在可能不存在 极限存在极限存在极限存在 等价无穷小替换的x可广义化,比如sin(ax2)~ax2 lim x n e x \dfrac{x^n}{e^x} exxn​时,e…

安卓逆向经典案例—H5appXX运维

H5app的class不一定是android.webkit.WebView 也可能是腾讯X5内核或者是uc webview 殊途同归也要去hook webview的系统函数和可调式方法setWebContentsDebuggingEnabled。突破sign算法,输出协议和加密算法的作用是什么?分析c-sign值 在加密的位置下断点 …

第三十七章 添加和使用自定义标题元素 - 自定义标头的继承

文章目录 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承自定义标头的继承示例 在 SOAPHEADERS 参数中指定支持的标头元素自定义标头的继承 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承 自定义标头的继承 如果创建此Web 服务的子类,该子类…

【vite】入门 publicDir 到高阶玩法

【vite】入门 publicDir 到高阶玩法 📌 使用方式 🧩 默认选项 publicDir默认选项为字符"public",表示静态资源默认指向public。 import { defineConfig } from vite export default defineConfig({publicDir: public })说明&am…

昇思25天学习打卡营第6天|使用静态图加速

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 背景介绍 AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。两种运行模式的详细介…

代码随想录——摆动序列(Leetcode376)

题目链接 贪心 class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length < 1){return nums.length;}// 当前一对差值int cur 0;// 前一对差值int pre 0;// 峰值个数int res 1;for(int i 0; i < nums.length - 1; i){cur nums[i 1] - nums[i];i…

黑苹果EFI详细配置说明

先上网址: https://dortania.github.io/OpenCore-Install-Guide/installer-guide/opencore-efi.html 1: 了解作用 ACPI作用: 总结: ACPI是UEFI引导方式和操作系统之间的硬件抽象接口,概述了硬件设备,如 USB 控制器、CPU 线程、嵌入式控制器、系统时钟等 硬件设备识别和驱动:…

深入理解Java中的线程池和并发编程

深入理解Java中的线程池和并发编程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将带大家深入了解Java中的线程池和并发编程。线程池是并发…

似然 与 概率

概率似然概率函数与似然函数的关系似然与机器学习的关系最大似然估计 似然与概率分别是针对不同内容的估计和近似 概率 概率&#xff1a;概率表达给定参数 θ \theta θ下样本随机向量 X x \textbf{X} {x} Xx的可能性。 概率密度函数的定义形式是 f ( x ∣ θ ) f(x|\t…

基于RAG的知识库AI代理机器人,问题思考

基于RAG的知识库AI代理机器人,问题思考 知识库内容分类 对于普通非qa问答格式的知识内容 在分段存储时,需要手动调整,保证每个分段的内容意思完整,不被分割,当然段落也不宜过长,保证内容表达的意思到不可分割为止就行 对于qa问答格式的知识内容 通常需要对问题增加格…

Mac 安装依赖后依旧报错 ModuleNotFoundError: No module named ‘Crypto‘

ModuleNotFoundError: No module named ‘Crypto’ 解决办法 pip uninstall pycryptodome pip uninstall pycrypto pip uninstall crypto pip install pycrypto

头条系统-05-延迟队列精准发布文章-概述添加任务(db和redis实现延迟任务)、取消拉取任务定时刷新(redis管道、分布式锁setNx)

文章目录 延迟任务精准发布文章1)文章定时发布2)延迟任务概述2.1)什么是延迟任务2.2)技术对比2.2.1)DelayQueue2.2.2)RabbitMQ实现延迟任务2.2.3)redis实现 3)redis实现延迟任务4)延迟任务服务实现4.1)搭建heima-leadnews-schedule模块4.2)数据库准备4.3)安装redis4.4)项目集成…

智能BI项目技术点总结

上传文件的安全性设计 文件大小&#xff1a;小于20MB 文件后缀&#xff1a;是否满足.xlsx 文件内容&#xff1a;&#xff08;成本要高一些&#xff09; 文件的合规性&#xff1a;比如敏感内容&#xff0c;建议用第三方的审核功能。 扩展点&#xff1a;接入腾讯云的图片万象数据…

SVM算法-人脸识别背后技术详解

引言 支持向量机&#xff08;SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务中。本文将详细介绍SVM算法在人脸识别任务中的应用&#xff0c;并通过代码示例来展示其背后的技术精髓。我们将分三大部分来展开&#xff0c;本部分将重点介绍SVM算法…

3个阶段和9个问题,择业和创业的核心!

从2023年下半年&#xff0c;接触了不少的创业者&#xff0c;他们对创业都是充满了热情。在很多创业者身上&#xff0c;看到的都是执行力&#xff0c;效率&#xff0c;对事业的专注。只要是说今天立即能搞定的事情&#xff0c;一定不会拖到明天。 去年佛山的张兄弟来找我的交流…

Graalvm尝鲜使用

面试时遇到大佬提点了下在性能不足的机器上传统优化JVM调优已经作用不大的背景下&#xff0c;采用graalvm进行打包成二进制文件&#xff0c;脱离java虚拟机&#xff0c;性能提升20%到100%&#xff0c;因此实操记录下来&#xff0c;方便后续使用 1、前置预装 graalvm-ce-java17…

mongoDB基本命令操作

文章目录 1. 安装(1). 启动mongodb(2). 数据库连接 2. 基本命令(1) 数据库操作(2) 集合操作(3) 文档操作1) 简单查询2) 条件查询3) 投影查询4) 文档更新5) 列值增长修改6) 删除文档7) 分页查询8) 排序查询9) 正则查询(模糊查询)10) 比较查询11) 包含查询 3. 索引(1) 执行计划 1…

Java基础的重点知识-06-String、Arrays、Math、static关键字

文章目录 String类(java.lang)static关键字Arrays类(java.uitl)Math类&#xff08;java.lang&#xff09; String类(java.lang) java.lang.String 类代表字符串。 特征&#xff1a; 字符串不变&#xff1a;字符串的值在创建后不能被更改。因为String对象是不可变的&#xff…

PIL实现图片是否可读

对图像数据进行清洗过程中&#xff0c;为了判断图像文件是否可读&#xff0c;可以调用PIL&#xff08;Pillow&#xff09;包的 Image 类。可以使用 Image 类的 open 方法&#xff0c;该方法会尝试打开图像文件并返回一个 Image 对象。如果文件不可读&#xff0c;该方法将抛出一…