结合 NumPy 和 Matplotlib 进行数据可视化的十种创意

开发 后端 数据可视化
本文我们可以看到 NumPy 和 Matplotlib 在数据可视化中的强大能力,无论是简单的正弦波形还是复杂的等高线图,都能轻松实现。

大家好!今天我们要聊的是如何使用 NumPy 和 Matplotlib 来进行数据可视化。这两个库是 Python 中处理数值数据和绘图的强大工具。NumPy 让我们可以高效地处理数组数据,而 Matplotlib 则提供了丰富的图表绘制功能。

1. 基础数据类型可视化

首先,让我们从最基础的数据类型开始。NumPy 可以创建各种类型的数组。Matplotlib 可以将这些数组转化为直观的图表。

import numpy as np
import matplotlib.pyplot as plt

# 创建一个简单的数组
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 使用 Matplotlib 绘制图形
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.show()

这段代码生成了一个简单的正弦波形图。np.linspace 函数用于生成等差数列,np.sin 用于计算正弦值。plt.plot 函数绘制曲线,plt.title, plt.xlabel, plt.ylabel 设置图表标题和轴标签。

2. 多重数据系列可视化

接下来,让我们尝试同时绘制多个数据系列。这在比较不同数据集时非常有用。

# 创建两个不同的数据系列
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制两个数据系列
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.legend()  # 显示图例
plt.show()

这里,我们增加了 plt.legend() 函数,它会根据 label 参数自动添加图例。这样就可以区分不同的数据系列了。

3. 散点图可视化

散点图非常适合显示离散数据之间的关系。例如,我们可以用它来表示两个变量之间的相关性。

# 创建随机数据
x = np.random.randn(100)
y = np.random.randn(100)

# 绘制散点图
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

np.random.randn 生成标准正态分布的随机数。plt.scatter 用于绘制散点图。

4. 直方图可视化

直方图可以用来展示数据的分布情况。这对于分析数据频率非常有帮助。

# 创建随机数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=30, alpha=0.7)
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

plt.hist 用于绘制直方图,bins 参数指定直方图的柱子数量,alpha 参数设置透明度。

5. 等高线图可视化

等高线图适用于展示二维函数的等值线。这在地理信息系统中很常见。

# 创建网格数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

# 绘制等高线图
plt.contourf(X, Y, Z, 20, cmap='viridis')
plt.colorbar()
plt.title('Contour Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

np.meshgrid 用于创建网格数据,plt.contourf 绘制等高线图,cmap 参数设置颜色映射。

6. 热力图可视化

热力图常用于展示二维数据矩阵,非常适合展示数据的相关性或密度。

# 创建一个随机的二维数据矩阵
data = np.random.rand(10, 10)

# 绘制热力图
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.title('Heatmap')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

plt.imshow 用于绘制热力图,cmap 参数设置颜色映射,interpolation 参数设置插值方法。

7. 饼图可视化

饼图用于展示各个部分占总体的比例,非常适合展示分类数据。

# 创建分类数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
plt.title('Pie Chart')
plt.show()

plt.pie 用于绘制饼图,autopct 参数用于显示百分比,startangle 参数设置起始角度。

8. 箱线图可视化

箱线图用于展示数据的分布情况,特别是四分位数和异常值。

# 创建随机数据
data = np.random.randn(100)

# 绘制箱线图
plt.boxplot(data)
plt.title('Box Plot')
plt.ylabel('Value')
plt.show()

plt.boxplot 用于绘制箱线图,它可以清晰地展示数据的中位数、四分位数和异常值。

9. 三维可视化

Matplotlib 还支持三维可视化,这对于展示多维数据非常有用。

from mpl_toolkits.mplot3d import Axes3D

# 创建三维数据
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))

# 创建三维图形
fig = plt.figure()
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()

mpl_toolkits.mplot3d 模块提供了三维绘图功能,plot_surface 用于绘制三维表面图。

10. 动态可视化

动态可视化可以展示数据随时间的变化,非常适合展示时间序列数据。

import matplotlib.animation as animation

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建图形对象
fig, ax = plt.subplots()
line, = ax.plot(x, y)

# 更新函数
def update(frame):
    line.set_ydata(np.sin(x + frame / 10.0))
    return line,

# 创建动画
ani = animation.FuncAnimation(fig, update, frames=100, interval=50)
plt.title('Dynamic Sine Wave')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.show()

matplotlib.animation 模块提供了动画功能,FuncAnimation 用于创建动画,update 函数定义每一帧的更新逻辑。

实战案例:股票价格走势分析

假设我们有一个包含某股票每日收盘价的数据集,我们想要分析其价格走势并预测未来趋势。

import pandas as pd
import yfinance as yf

# 下载股票数据
ticker = 'AAPL'
data = yf.download(ticker, start='2022-01-01', end='2023-01-01')

# 绘制股票价格走势图
plt.figure(figsize=(12, 6))
plt.plot(data['Close'], label='Close Price')
plt.title(f'{ticker} Stock Price')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.legend()
plt.show()

# 计算移动平均线
data['MA50'] = data['Close'].rolling(window=50).mean()
data['MA200'] = data['Close'].rolling(window=200).mean()

# 绘制移动平均线
plt.figure(figsize=(12, 6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['MA50'], label='50-Day MA')
plt.plot(data['MA200'], label='200-Day MA')
plt.title(f'{ticker} Stock Price with Moving Averages')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.legend()
plt.show()

在这个案例中,我们使用 yfinance 库下载了苹果公司(AAPL)的股票数据,并绘制了收盘价走势图。接着,我们计算了 50 日和 200 日的移动平均线,并将其与收盘价一起绘制,以便观察价格趋势。

通过上述示例,我们已经看到了 NumPy 和 Matplotlib 在数据可视化中的强大能力。无论是简单的正弦波形还是复杂的等高线图,都能轻松实现。希望这些基础示例能够帮助大家更好地理解和应用这两个库。下一期我们继续探索更多有趣的应用!

责任编辑:赵宁宁 来源: 小白PythonAI编程
相关推荐

2024-07-01 08:51:19

可视化数据分析漏斗

2019-04-29 09:00:00

数据可视化JavaScript图表库

2020-12-17 09:40:01

Matplotlib数据可视化命令

2022-04-01 15:02:56

前端工具开发

2023-02-15 08:24:12

数据分析数据可视化

2021-11-09 08:15:18

Grafana 数据可视化运维

2018-05-07 14:50:27

可视化数据散点图

2018-03-15 09:57:00

PythonMatplotlib数据可视化

2017-07-12 16:07:49

大数据数据可视化

2020-08-14 10:45:26

Pandas可视化数据预处理

2020-03-11 14:39:26

数据可视化地图可视化地理信息

2022-06-29 09:54:17

Python数据可视化Altair

2022-07-11 13:30:08

Pandas数据编码代码

2022-04-20 15:10:55

pandas编码函数

2017-10-14 13:54:26

数据可视化数据信息可视化

2017-12-11 16:25:25

2022-07-13 15:54:14

Matplotlib图表

2016-11-18 09:42:49

可视化数据分析优选算法

2016-12-04 09:06:33

算法可视化数据分析

2015-09-21 09:27:25

数据可视化错误
点赞
收藏

51CTO技术栈公众号