Matplotlib从图中提取数据

在数据可视化领域,Matplotlib是Python中最常用的绘图库之一。既然它被用于数据可视化,那么从图中提取数据也是Matplotlib的一个重要应用场景。在本文中,我们将介绍如何使用Matplotlib从图中提取数据并利用这些数据进行进一步的处理。

一个简单实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt

# 生成500个0~1之间的随机数作为x轴数据
x = np.random.rand(500)
# 生成与x轴数据数量相同的随机数作为y轴数据
y = np.random.rand(500)

# 绘制散点图
plt.scatter(x, y)

# 设置横轴标签和纵轴标签
plt.xlabel("x")
plt.ylabel("y")

# 设置图表的标题
plt.title("Scatter Plot")

# 显示图表
plt.show()

上述代码通过numpy库生成了5000~1之间的随机数,并将这些随机数分别作为x轴y轴的数据,最终绘制出了一个散点图。其中,plt.scatter()函数是用于绘制散点图的函数,plt.xlabel()plt.ylabel()函数是用于设置横轴标签和纵轴标签的函数,plt.title()函数是用于设置图表标题的函数。

如何从Matplotlib图中提取数据

在Matplotlib中,要提取图中的数据,最常见的方式是获取图中的Artist对象,然后从这些对象中获取数据。Artist是所有绘图元素的基类,包括坐标轴、文字、点、线等。因此,从Artist对象中获取数据可以获取到图表中所有的信息。

获取散点图的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt

# 生成500个0~1之间的随机数作为x轴数据
x = np.random.rand(500)
# 生成与x轴数据数量相同的随机数作为y轴数据
y = np.random.rand(500)

# 绘制散点图
plt.scatter(x, y)

# 获取散点图的Artist对象
scatter_plot = plt.gca().collections[0]

# 打印每个散点的x轴坐标和y轴坐标
for i in range(len(scatter_plot._offsets)):
print("x: ", scatter_plot._offsets[i][0], "y: ", scatter_plot._offsets[i][1])

上述代码中,plt.gca()函数返回当前的Axes对象,我们通过对这个对象调用collections属性获取到了散点图的Artist对象。获取到这个对象后,我们可以从_offsets属性中获取到每个散点的坐标信息。上述代码中使用了一个for循环打印出了每个散点的x轴坐标和y轴坐标。

获取拆线图数据

折线图是绘制曲线最常见的方式之一。在Matplotlib中,使用plt.plot()函数可以方便地绘制折线图。为了演示从折线图中获取数据的方法,我们来生成一个简单的折线图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt

# 生成0~10之间的100个数作为x轴数据
x = np.linspace(0, 10, 100)
# 生成sin函数在0~10之间的值作为y轴数据
y = np.sin(x)

# 绘制折线图
plt.plot(x, y)

# 设置横轴标签和纵轴标签
plt.xlabel("x")
plt.ylabel("y")

# 设置图表的标题
plt.title("Line Plot")

# 显示图表
plt.show()

在得到了折线图之后,我们可以通过如下代码从折线图中获取数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt

# 生成0~10之间的100个数作为x轴数据
x = np.linspace(0, 10, 100)
# 生成sin函数在0~10之间的值作为y轴数据
y = np.sin(x)

# 绘制折线图
plt.plot(x, y)

# 获取折线的Artist对象
line_plot = plt.gca().lines[0]

# 打印每个点的x轴坐标和y轴坐标
for i in range(len(line_plot.get_xdata())):
print("x: ", line_plot.get_xdata()[i], "y: ", line_plot.get_ydata()[i])

在上述代码中,plt.gca()函数获取到当前的Axes对象,我们通过对这个对象调用lines属性获取到了折线图的Artist对象。获取到这个对象后,我们可以通过get_xdata()get_ydata()方法获取到折线图上每个点的x轴坐标和y轴坐标。上述代码中使用了一个for循环将获取到的x轴坐标和y轴坐标打印出来。

取柱状图数据

柱状图是绘制分布最常见的方式之一。在Matplotlib中,使用plt.bar()函数可以方便地绘制柱状图。为了演示从柱状图中获取数据的方法,我们来生成一个简单的柱状图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt

# 生成5个0~1之间的随机数作为x轴数据
x = np.random.rand(5)
# 生成5个0~1之间的随机数作为y轴数据
y = np.random.rand(5)

# 绘制柱状图
plt.bar(x, y)

# 设置横轴标签和纵轴标签
plt.xlabel("x")
plt.ylabel("y")

# 设置图表的标题
plt.title("Bar Plot")

# 显示图表
plt.show()

在得到了柱状图之后,我们可以通过如下代码从柱状图中获取数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt

# 生成5个0~1之间的随机数作为x轴数据
x = np.random.rand(5)
# 生成5个0~1之间的随机数作为y轴数据
y = np.random.rand(5)

# 绘制柱状图
plt.bar(x, y)

# 获取柱状图的Artist对象
bar_plot = plt.gca().patches

# 打印每个柱子的x轴坐标和y轴坐标
for i in range(len(bar_plot)):
print("x: ", bar_plot[i].get_x(), "y: ", bar_plot[i].get_height())

在上述代码中,plt.gca()函数获取到当前的Axes对象,我们通过对这个对象调用patches属性获取到了柱状图的Artist对象。获取到这个对象后,我们可以通过get_x()get_height()方法获取到柱状图的每个柱子的x轴坐标和y轴坐标。上述代码中使用了一个for循环将获取到的x轴坐标和y轴坐标打印出来。

总结

本文介绍了如何使用Matplotlib从图中提取数据的方法,包括散点图、折线图和柱状图的例子。通过这些例子,我们可以发现从Matplotlib图中获取数据的办法都是类似的,都是获取到图中的Artist对象,然后从这些对象中获取需要的数据。在实际使用中,我们还可以通过定制Artist对象来控制绘图过程,更好地实现我们的数据可视化需求。