我有三列数据文件。第一列和第二列分别是 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
您正在附加到
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)
heatmap
(您可以纯粹使用Matplotlib完成),但Seaborn界面更简单。
digitize
来识别来自 z
的垃圾箱,并将您的 colors
索引为数组以将垃圾箱映射到颜色:
bins = [0, 9, 25, np.inf]
plt.scatter(x, y, c=np.array(colors)[np.digitize(z, bins)-1])
输出: