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()
相关推荐
soso19689 小时前
DataWorks快速入门
大数据·数据仓库·信息可视化
前端拾光者10 小时前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
请你喝好果汁6411 天前
ggplot2-scale_x_continuous()
信息可视化
敲代码不忘补水1 天前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
前端拾光者1 天前
前端数据可视化思路及实现案例
前端·数据库·信息可视化
德希智慧水利水务2 天前
河道水位流量一体化自动监测系统:航运安全的护航使者
网络·人工智能·算法·信息可视化
DataGear2 天前
DataGear 5.2.0 发布,数据可视化分析平台
javascript·信息可视化·数据分析·html·echarts·数据可视化
c无序2 天前
数据可视化复习1-Matplotlib简介属性和创建子图
信息可视化·matplotlib
DataGear2 天前
DataGear 企业版 1.3.0 发布,数据可视化分析平台
javascript·信息可视化·数据分析·html·echarts·数据可视化
YRr YRr3 天前
深入分析:固定参考框架在RViz中的作用与对数据可视化的影响 ros ubuntu20.04
信息可视化·数据挖掘·数据分析