【Python】数据处理:Matplotlib绘图

Matplotlib是Python强大的数据可视化工具库,类似于MATLAB语言。Mat-lotlib提供了一整套与MATLAB相似的命令API,十分适合进行交互式制图,而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

Matplotlib是神经生物学家John D.Hunter于2007年创建的,其函数设计参考了MATLAB。

折线图

基础折线图

python 复制代码
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轴的标签。

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

添加网格线

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

python 复制代码
plt.plot(x, y)
plt.grid(True)  # 添加网格线
plt.show()

plt.grid()常用参数:

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

设置坐标轴范围

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

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

设置刻度和刻度标签

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

python 复制代码
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()

保存图表

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

python 复制代码
plt.plot(x, y)
plt.savefig('line_plot.png')  # 保存为PNG文件

多子图绘制

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

python 复制代码
# 创建一个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()

散点图

基础散点图

python 复制代码
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:
    • 散点图的标签,用于图例的显示。
python 复制代码
# 生成随机数据
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()  # 显示图形

三维折线图

python 复制代码
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()  # 显示图形

三维曲面图

python 复制代码
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()

柱状图

python 复制代码
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()

直方图

python 复制代码
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()

饼图

python 复制代码
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()

等高线图

python 复制代码
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()

箱线图

python 复制代码
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()

热图

python 复制代码
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()

误差图

python 复制代码
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()
相关推荐
yufei-coder几秒前
C#基础语法
开发语言·c#·.net
长天一色1 分钟前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
_.Switch12 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
醉颜凉15 分钟前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
NiNg_1_23421 分钟前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
带带老表学爬虫29 分钟前
java数据类型转换和注释
java·开发语言
Hoper.J32 分钟前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
qianbo_insist32 分钟前
simple c++ 无锁队列
开发语言·c++
BigYe程普43 分钟前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
彭于晏68944 分钟前
Android广播
android·java·开发语言