如何用这些数据绘制散点图?

0 投票
1 回答
1368 浏览
提问于 2025-04-18 05:28

我正在尝试在matplotlib中将3D数据以2D的方式展示。

我有一些数据文件,比如:

a_1.dat
a_2.dat
a_3.dat

b_1.dat
b_2.dat
b_3.dat

从每个数据文件中,我可以提取出字母、数字,以及与字母-数字组合相关的一个参数。

我想制作一个散点图,其中一个轴表示字母的范围,另一个轴表示数字的范围,而散点则代表与每个字母-数字组合相关的参数的大小。我希望这个图是2D的,并带有某种颜色条,而不是3D图。

目前,我可以制作一堆2D的numpy数组,每个2D数组看起来像这样:

[a 1 val_a1
 a 2 val_a2
 a 3 val_a3]

[b 1 val_b1
 b 2 val_b2
 b 3 val_b3]
  • 第一个问题:这是存储我想要制作的图的数据的最佳方式吗?

  • 第二个问题:我该如何使用python制作这个图(我对matplotlib pyplot最熟悉)?

1 个回答

1

要判断你存储数据的方法是否正确,首先要考虑你是怎么使用这些数据的。如果你只是想用它来绘图,那么为了简单起见,你可以直接使用三个一维数组。不过,如果你想要更紧凑的结构,可以考虑使用一个二维数组,并且使用自定义数据类型

考虑到这一点,你可以轻松创建一个二维散点图,使用不同的颜色,而每种颜色的具体值是由每对(字母,数字)相关联的值决定的。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm

# You might note that in this simple case using numpy for creating array
# was actually unnecessary as simple lists would suffice
letters = np.array(['a', 'a', 'a', 'b', 'b', 'b'])
numbers = np.array([1, 2, 3, 1, 2, 3])
values = np.array([1, 2, 3, 1.5, 3.5, 4.5])

items = len(letters)

# x and y should be numbers, so we first feed it some integers
# Parameter c defines color values and cmap defines color mappings
plt.scatter(xrange(items), numbers, c=values, cmap=cm.jet)

# Now that data is created, we can re-set xticks
plt.xticks(xrange(items), letters)

代码结果

希望这些信息能帮助你有个好的开始。

撰写回答