在 matplotlib 中以矩阵的形式绘制三列

问题描述 投票:0回答:2

我有三列数据文件。第一列和第二列分别是 x 轴和 y 轴。我想以矩阵的形式为绘图提供颜色,如示例图所示(具有不同的灰色阴影)。

我尝试了以下代码,但没有正确读取 z 列的值。

import numpy as np
import matplotlib.pyplot as plt


db=np.loadtxt('text.txt')
x=db[:,0]
y=db[:,1]
z=db[:,2]


colors = ['#5BFF00','#99CCFF','#FF5700']

for i in z:
    if i < 9:
        colors.append(1)
    if 9 < i < 25:
        colors.append(2)
    else:
        colors.append(3)

plt.scatter(x, y, c=colors)
plt.show()

我的数据文件的一部分

1   2   5.02
1   3   18.011
1   4   0.31
1   5   24.14
python-3.x matplotlib matrix plot scatter-plot
2个回答
0
投票

您正在附加到

colors
列表,我认为该列表包含您想要在绘图上使用的三种不同颜色。相反,有一个新列表来包含要绘制的颜色,例如:

colors = ['#5BFF00','#99CCFF','#FF5700']

c = []  # colours to use in the plot

for i in z:
    if i < 9:
        c.append(colors[0])
    if 9 < i < 25:
        c.append(colors[1])
    else:
        c.append(colors[1])

plt.scatter(x, y, c=c)

这不会有您想要的矩阵形式,您应该尝试使用seaborn

heatmap
(您可以纯粹使用Matplotlib完成),但Seaborn界面更简单。


0
投票

不要循环,因为您的垃圾箱是连续的,只需使用

digitize
来识别来自
z
的垃圾箱,并将您的
colors
索引为数组以将垃圾箱映射到颜色:

bins = [0, 9, 25, np.inf]
plt.scatter(x, y, c=np.array(colors)[np.digitize(z, bins)-1])

输出:

© www.soinside.com 2019 - 2024. All rights reserved.