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

【Python】数据处理:Matplotlib绘图

Matplotlib是Python强大的数据可视化工具库,类似于MATLAB语言。Mat-lotlib提供了一整套与MATLAB相似的命令API,十分适合进行交互式制图,而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
Matplotlib是神经生物学家John D.Hunter于2007年创建的,其函数设计参考了MATLAB。

折线图

基础折线图

import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)  # 绘制折线图
plt.show()  # 显示图表

在这里插入图片描述

折线图样式

plt.plot() 函数常见参数及其缩写

  1. x, y:
    • 折线图的 X 轴和 Y 轴数据。
  2. color (c):
    • 折线的颜色。
    • 可以是颜色名称(如 'red')、颜色缩写(如 'r')或者 RGB 十六进制值(如 '#FF5733')。
  3. linestyle (ls):
    • 折线的线型。
    • 可选值包括 '-'(实线,默认)、'--'(虚线)、':'(点线)、'-.'(点划线)。
  4. linewidth (lw):
    • 折线的宽度。
    • 数值型,表示折线的粗细,默认值是 1。
  5. marker:
    • 数据点的标记样式。
    • 可选值包括 'o'(圆圈)、'^'(三角形)、's'(正方形)、'*'(星号)等。
  6. markersize (ms):
    • 数据点的大小。
    • 数值型,表示数据点的直径大小。
  7. markerfacecolor (mfc) / markeredgecolor (mec):
    • 数据点标记的填充颜色和边缘颜色。
  8. label:
    • 折线的标签,用于图例的显示。
  9. alpha:
    • 折线的透明度。
    • 可以是 0 到 1 之间的值,0 表示完全透明,1 表示完全不透明

以下是Matplotlib中常用的颜色、线型和标记样式参数的表格展示:

颜色参数

颜色名称颜色代码
蓝色'b'
绿色'g'
红色'r'
青色'c'
洋红色'm'
黄色'y'
黑色'k'
白色'w'
颜色名称颜色代码
----------------
蓝色'blue'
绿色'green'
红色'red'
青色'cyan'
洋红色'magenta'
黄色'yellow'
黑色'black'
白色'white'
灰色'gray'
橙色'orange'
粉色'pink'
紫色'purple'
棕色'brown'

线型参数

线型说明线型代码
实线'-'
虚线'--'
点线':'
点划线'-.'

标记样式参数

标记说明标记代码
'.'
圆圈'o'
叉号'x'
加号'+'
星号'*'
方块's'
三角形'^'
倒三角形'v'
左三角形'<'
右三角形'>'
六边形1'h'
六边形2'H'
五角形'p'
垂直线`’
水平线'_'

添加标题和标签

可以为图表添加标题、X轴和Y轴的标签。

plt.plot(x, y)
plt.title('Simple Line Plot')  # 标题
plt.xlabel('X Axis Label')     # X轴标签
plt.ylabel('Y Axis Label')     # Y轴标签
plt.show()

在这里插入图片描述

添加网格线

可以添加网格线以便于读取数据。

plt.plot(x, y)
plt.grid(True)  # 添加网格线
plt.show()

plt.grid()常用参数:

  • which:指定网格线类型,可以是 'major'(主要刻度)或者 'minor'(次要刻度)
  • axis:指定在哪个轴上添加网格线,可以是 'both'(默认,同时添加X和Y轴的网格线)、'x'(只在X轴上添加)、'y'(只在Y轴上添加)。

在这里插入图片描述

设置坐标轴范围

可以设置X轴和Y轴的显示范围。

plt.plot(x, y)
plt.xlim(0, 5)  # X轴范围
plt.ylim(0, 20) # Y轴范围
plt.show()

在这里插入图片描述

设置刻度和刻度标签

可以设置刻度的值和标签。

plt.plot(x, y)
plt.xticks([1, 2, 3, 4], ['one', 'two', 'three', 'four'])  # 设置X轴刻度标签
plt.yticks([1, 4, 9, 16], ['one', 'four', 'nine', 'sixteen'])  # 设置Y轴刻度标签
plt.show()

在这里插入图片描述

保存图表

可以将图表保存为图像文件。

plt.plot(x, y)
plt.savefig('line_plot.png')  # 保存为PNG文件

多子图绘制

可以在同一个图中绘制多个子图。

# 创建一个2x1的子图
plt.subplot(2, 1, 1)
plt.plot(x, y)
plt.title('First Subplot')plt.subplot(2, 1, 2)
plt.plot(x, y)
plt.title('Second Subplot')plt.tight_layout()  # 自动调整子图之间的间距
plt.show()

在这里插入图片描述

散点图

基础散点图

import matplotlib.pyplot as plt  
# 数据
x = [1, 2, 3, 4, 5]  
y = [2, 3, 5, 7, 11]  
plt.scatter(x, y)  # 绘制散点图  
plt.show()

在这里插入图片描述

散点图样式

  1. x, y:
    • 必需的参数,分别是散点图的 X 轴和 Y 轴数据。
  2. s:
    • 散点的大小。
    • 可以是单个数值表示所有散点的大小,也可以是一个数组,指定每个散点的大小。
    • 示例: plt.scatter(x, y, s=100)plt.scatter(x, y, s=sizes),其中 sizes 是一个与数据长度相同的数组。
  3. c:
    • 散点的颜色。
    • 可以是颜色名称(如 'red')、颜色缩写(如 'r')或者 RGB 十六进制值(如 '#FF5733')。
    • 示例: plt.scatter(x, y, c='blue')
  4. marker:
    • 散点的标记样式。
    • 可选值包括 'o'(圆圈,默认)、'^'(三角形)、's'(正方形)、'*'(星号)等。
    • 示例: plt.scatter(x, y, marker='o')
  5. alpha:
    • 散点的透明度。
    • 可以是 0 到 1 之间的值,0 表示完全透明,1 表示完全不透明。
    • 示例: plt.scatter(x, y, alpha=0.5)
  6. linewidths (lw) 和 edgecolors (ec):
    • 控制散点边缘的线宽和颜色。
    • linewidths 可以设置边缘的线宽,edgecolors 可以设置边缘的颜色。
    • 示例: plt.scatter(x, y, lw=2, ec='black')
  7. label:
    • 散点图的标签,用于图例的显示。
# 生成随机数据
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
sizes = np.random.rand(50) * 100  # 随机生成散点的大小
colors = np.random.rand(50)  # 随机生成散点的颜色plt.scatter(x, y, s=sizes, c=colors, alpha=0.7, marker='o', label='Random Data')  # 绘制散点图# 添加标题和标签
plt.title('Scatter Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')plt.legend()  # 添加图例
plt.show()  # 显示图形

在这里插入图片描述

三维折线图

import matplotlib.pyplot as plt
import numpy as np# 创建一个 Figure 对象和 3D Axes 对象
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')# 生成曲线上的数据
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)# 绘制曲线
ax.plot(x, y, z, label='3D Spiral Curve')# 添加标题和标签
ax.set_title('3D Spiral Curve Plot')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')ax.legend()  # 添加图例
plt.show()  # 显示图形

在这里插入图片描述

三维曲面图

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))# 创建一个 Figure 对象和 3D Axes 对象
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')# 绘制三维曲面图
ax.plot_surface(x, y, z, cmap='viridis')# 添加标题和标签
ax.set_title('3D Surface Plot')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')# 显示图形
plt.show()

在这里插入图片描述

柱状图

import matplotlib.pyplot as plt
import numpy as np# 数据
categories = ['A', 'B', 'C', 'D']
values = [7, 13, 5, 17]# 创建柱状图
plt.figure(figsize=(8, 6))
plt.bar(categories, values, color='skyblue')# 添加标题和标签
plt.title('Simple Bar Plot')
plt.xlabel('Categories')
plt.ylabel('Values')# 显示图形
plt.show()

在这里插入图片描述

直方图

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')# 添加标题和标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')# 显示图形
plt.show()

在这里插入图片描述

饼图

import matplotlib.pyplot as plt# 数据
sizes = [25, 30, 20, 15, 10]  # 每一部分的大小
labels = ['A', 'B', 'C', 'D', 'E']  # 每一部分的标签# 创建饼图
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)# 添加标题
plt.title('Simple Pie Chart')# 显示图形
plt.show()

在这里插入图片描述

等高线图

import matplotlib.pyplot as plt
import numpy as np# 生成数据
x = np.linspace(-3.0, 3.0, 100)
y = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 创建填充等高线图
plt.figure(figsize=(8, 6))
plt.contourf(X, Y, Z, levels=20, cmap='RdGy')# 添加颜色栏
plt.colorbar(label='Value')# 添加标题和标签
plt.title('Filled Contour Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')# 显示图形
plt.show()

在这里插入图片描述

箱线图

import matplotlib.pyplot as plt
import numpy as np# 生成随机数据
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]# 创建箱线图
plt.figure(figsize=(8, 6))
plt.boxplot(data)# 添加标题和标签
plt.title('Box Plot')
plt.xticks([1, 2, 3], ['Data 1', 'Data 2', 'Data 3'])
plt.ylabel('Value')# 显示图形
plt.show()

在这里插入图片描述

热图

import matplotlib.pyplot as plt
import numpy as np# 生成随机数据
data = np.random.rand(10, 12)# 创建热图
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='hot', interpolation='nearest')# 添加颜色栏
plt.colorbar()# 添加标题和标签
plt.title('Heatmap')
plt.xlabel('X axis')
plt.ylabel('Y axis')# 显示图形
plt.show()

在这里插入图片描述

误差图

import matplotlib.pyplot as plt
import numpy as np# 数据
x = np.linspace(0, 10, 10)
y = np.sin(x)
yerr = 0.2  # 统一的误差范围# 创建误差图
plt.figure(figsize=(8, 6))
plt.errorbar(x, y, yerr=yerr, fmt='o', label='Data with Error Bars')# 添加标题和标签
plt.title('Error Bar Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.legend()# 显示图形
plt.show()

在这里插入图片描述

相关文章:

  • mysql和redis的双写一致性问题
  • Qt | QDataStream 类(数据流)
  • 敏捷=996/007?现实是……
  • 【通过新能源汽车的智慧数字底盘技术看计算机的相关技术堆栈?以后是软硬结合的全能程序员的天下,取代全栈(前后端都会的全栈程序员)】
  • 怎么做才能推动产业园区的数字化转型和升级
  • 独孤思维:每天做着自己不喜欢的工作,你不难受吗
  • uniapp面试题
  • 【docker hub镜像源失效】2024年6月6日 docker 国内镜像源失效
  • RestTemplate远程请求的艺术
  • echarts写某个市地图
  • 如何进行LLM大模型推理优化
  • [大模型]Qwen2-7B-Instruct 接入 LangChain 搭建知识库助手
  • CSS实现经典打字小游戏《生死时速》
  • 【Windows】配置Flutter开发环境
  • ArrayList和LinkedList的区别!!!
  • 收藏网友的 源程序下载网
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【comparator, comparable】小总结
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Android框架之Volley
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • gops —— Go 程序诊断分析工具
  • HomeBrew常规使用教程
  • IP路由与转发
  • mysql 数据库四种事务隔离级别
  • Python 基础起步 (十) 什么叫函数?
  • springboot_database项目介绍
  • 从0到1:PostCSS 插件开发最佳实践
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 讲清楚之javascript作用域
  • 聚簇索引和非聚簇索引
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数组的操作
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 最简单的无缝轮播
  • 国内开源镜像站点
  • ​flutter 代码混淆
  • #ifdef 的技巧用法
  • #pragma once与条件编译
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (9)STL算法之逆转旋转
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)基于IDEA的JAVA基础1
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)memcache、redis缓存
  • (转)重识new
  • .net mvc 获取url中controller和action
  • .Net 应用中使用dot trace进行性能诊断
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .Net中wcf服务生成及调用
  • @Valid和@NotNull字段校验使用