matplotlilb画图

matplotlib

matplotlib 是 Python 中一个强大而灵活的绘图库,广泛用于数据可视化 。它允许创建多种类型的图表,包括线图、散点图、柱状图、饼图、直方图 等。matplotlib 的基础是 pyplot 模块,它为绘图提供了简单的接口。这里详细讲解一下 matplotlib 的使用方法及其核心概念:

1. 基础结构和模块

matplotlib 的核心模块是pyplot,通常以plt缩写来使用:

python 复制代码
import matplotlib.pyplot as plt

matplotlib 中常用的集中图表类型方法介绍:

2. 线图

线图通常用于展示数据的连续变化,比如时间序列数据等。plot 函数适合绘制线图。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

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

# 绘制线图
plt.plot(x, y, color='b', linestyle='-', linewidth=2)
plt.title("Line Plot - Sine Wave")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.show()

3. 散点图

散点图适合显示两个变量之间的关系,例如,展示变量之间是否存在关联。scatter 函数用于创建散点图。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.random.rand(50)
y = np.random.rand(50)

# 绘制散点图
plt.scatter(x, y, color='r', marker='o')
plt.title("Scatter Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.show()

4. 柱状图

柱状图用于比较不同类别之间的数值大小,特别适合表示分类数据。bar 函数可以创建柱状图。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 数据
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 2]

# 绘制柱状图
plt.bar(categories, values, color='g')
plt.title("Bar Chart")
plt.xlabel("Categories")
plt.ylabel("Values")
plt.show()

5. 饼图

饼图用于显示部分与整体的比例关系。pie 函数适合创建饼图。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 数据
sizes = [30, 20, 25, 25]
labels = ['A', 'B', 'C', 'D']
colors = ['gold', 'lightblue', 'lightgreen', 'pink']

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

6. 直方图

直方图展示数据分布情况,特别适合连续数据的频率分布。hist 函数用于创建直方图。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
data = np.random.randn(1000)  # 正态分布数据

# 绘制直方图
plt.hist(data, bins=30, color='purple', edgecolor='black')
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

除了上面的之外,还有以下类型的图表可以使用mappltlilb进行绘制:

7. 箱线图

箱线图用于显示数据的分布情况,包括中位数、四分位数及异常值,非常适合比较不同组的数据。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
data = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 绘制箱线图
plt.boxplot(data, vert=True, patch_artist=True, labels=['Group 1', 'Group 2', 'Group 3'])
plt.title("Box Plot")
plt.ylabel("Value")
plt.show()

8. 雷达图(Radar Chart)

雷达图用于显示多变量数据,特别适合比较不同对象的特征。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
labels = np.array(['A', 'B', 'C', 'D', 'E'])
values = np.array([4, 3, 2, 5, 4])

# 绘制雷达图
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()

values = np.concatenate((values,[values[0]]))  # 闭合图形
angles += angles[:1]  # 闭合图形

plt.polar(angles, values, marker='o')
plt.title("Radar Chart")
plt.xticks(angles[:-1], labels)
plt.show()

9. 条形图(Horizontal Bar Chart)

条形图是柱状图的横向版本,适合显示较长的类别名称。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 数据
categories = ['Category A', 'Category B', 'Category C']
values = [10, 20, 15]

# 绘制条形图
plt.barh(categories, values, color='orange')
plt.title("Horizontal Bar Chart")
plt.xlabel("Values")
plt.ylabel("Categories")
plt.show()

10. 面积图(Area Plot)

面积图用于显示随时间变化的总量,强调数值的累积。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制面积图
plt.fill_between(x, y1, color='skyblue', alpha=0.5, label='Sine')
plt.fill_between(x, y2, color='lightgreen', alpha=0.5, label='Cosine')
plt.title("Area Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.legend()
plt.show()

11. 曲线图(Step Plot)

曲线图显示数据的阶梯变化,适合显示离散变化或不连续数据。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.arange(10)
y = np.random.rand(10)

# 绘制曲线图
plt.step(x, y, where='mid', label='Step Plot', color='orange')
plt.title("Step Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.legend()
plt.show()

14. 概率分布图(Probability Distribution Function, PDF)

用于展示概率分布的形状,通常与正态分布等一起使用。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
data = np.random.randn(1000)

# 绘制概率分布图
plt.hist(data, bins=30, density=True, alpha=0.5, color='g', label='Histogram')
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = (1 / (np.sqrt(2 * np.pi))) * np.exp(-0.5 * (x**2))  # 正态分布函数
plt.plot(x, p, 'k', linewidth=2, label='PDF')
plt.title("Probability Distribution")
plt.xlabel("Value")
plt.ylabel("Probability")
plt.legend()
plt.show()

15. 极坐标图(Polar Plot)

极坐标图用于展示数据在极坐标系中的分布。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
theta = np.linspace(0, 2 * np.pi, 100)
r = np.abs(np.sin(2 * theta))  # 半径

# 绘制极坐标图
plt.polar(theta, r, color='purple')
plt.title("Polar Plot")
plt.show()

16. 瀑布图(Waterfall Chart)

瀑布图用于展示数据的逐步累加,常用于财务数据的可视化。

python 复制代码
import matplotlib.pyplot as plt

# 数据
categories = ['Start', 'Increase', 'Decrease', 'Increase', 'End']
values = [100, 30, -20, 50, 0]

# 计算累计值
cumulative = [sum(values[:i+1]) for i in range(len(values))]

# 绘制瀑布图
plt.bar(categories, cumulative, color=['blue', 'green', 'red', 'green', 'blue'])
plt.title("Waterfall Chart")
plt.ylabel("Values")
plt.show()

17. 轨迹图(Trajectory Plot)

轨迹图展示对象在空间中的运动轨迹,常用于物理和工程领域。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
t = np.linspace(0, 10, 100)
x = np.sin(t)
y = np.cos(t)

# 绘制轨迹图
plt.plot(x, y, label='Trajectory', color='orange')
plt.title("Trajectory Plot")
plt.xlabel("X Coordinate")
plt.ylabel("Y Coordinate")
plt.axis('equal')  # 保持比例
plt.legend()
plt.show()

18. 网格图(Grid Plot)

网格图展示多个变量的散点图或其他图表的组合,通常用于展示高维数据。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

# 绘制网格图
fig, axs = plt.subplots(1, 3, figsize=(15, 5))

axs[0].scatter(x, y)
axs[0].set_title('Scatter Plot')
axs[1].hist(x, bins=10)
axs[1].set_title('Histogram')
axs[2].bar(range(10), z[:10])
axs[2].set_title('Bar Chart')

plt.show()

19. 频率多边形图(Frequency Polygon)

频率多边形图展示数据的分布,类似于直方图但用线连接各个顶点。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
data = np.random.randn(1000)

# 绘制频率多边形图
plt.hist(data, bins=30, density=True, alpha=0.5, color='g', edgecolor='black')
plt.plot(np.sort(data), np.arange(1, len(data)+1) / len(data), color='red', linewidth=2, label='Frequency Polygon')
plt.title("Frequency Polygon")
plt.xlabel("Value")
plt.ylabel("Density")
plt.legend()
plt.show()

20. 堆叠图(Stacked Plot)

堆叠图用于展示各部分对整体的贡献,适合展示多个数据系列的堆叠效果。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np


# 数据
categories = ['A', 'B', 'C']
values1 = [3, 2, 5]
values2 = [2, 3, 1]

# 绘制堆叠图
plt.bar(categories, values1, color='blue', label='Series 1')
plt.bar(categories, values2, bottom=values1, color='orange', label='Series 2')
plt.title("Stacked Bar Chart")
plt.ylabel("Values")
plt.legend()
plt.show()

21. 条形折线图(Bar Line Plot)

条形折线图同时展示条形图和折线图,适合展示不同数据的对比。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 数据
categories = ['A', 'B', 'C']
values1 = [3, 5, 2]
values2 = [4, 2, 5]

# 绘制条形折线图
plt.bar(categories, values1, color='blue', label='Bar Values')
plt.plot(categories, values2, color='red', marker='o', label='Line Values')
plt.title("Bar and Line Plot")
plt.ylabel("Values")
plt.legend()
plt.show()
相关推荐
工业HMI实战笔记16 小时前
皮革加工HMI:制革鞣制的化工参数界面
信息可视化·设计规范·设计语言
IT研究室1 天前
最新大数据毕业设计选题推荐-基于大数据的Medicaid GLP-1药物利用与支出数据可视化分析-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·课程设计
雨晨源码(同名B站)1 天前
深度学习毕业设计选题推荐:基于卷积神经网络的无人机影像建筑裂缝裂纹检测分类与分割系统(LeNet-5 二分类模型、GCN-Res50分割模型)
深度学习·信息可视化·分类·cnn·毕业设计·无人机·课程设计
龙亘川1 天前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
新中地GIS开发老师2 天前
资源与环境(地理信息工程)这个专业怎么样
考研·信息可视化·资源与环境
小咕聊编程4 天前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
总要学点什么4 天前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
瓶瓶持续学习中4 天前
空间智能与物理AI:国内厂商如何与英伟达协同发展
大数据·人工智能·信息可视化·架构
Elastic 中国社区官方博客4 天前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索
DataGear5 天前
DataGear 6.1.1 发布,数据可视化分析平台
javascript·信息可视化·数据分析·echarts·数据可视化