Python 从Matplotlib中的三维数据生成离散热图

Python 从Matplotlib中的三维数据生成离散热图,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,所以我想这样做: 但我不希望我的颜色轴是连续的 我的输入数据的格式如下: x = [0, 0, 0, ... , 20, 20, 20, ..., 39, 39, 39] y = [0, 1, 2, ..., 0, 1, 2... , 37, 38, 39] z = [0, 1, 0, ..., 1, 1, 0, ..., 1, 0 ,0] 换句话说,我的z值要么是0,要么是1,并且从不介于两者之间 我尝试: import numpy import matplotlib.pyplot

所以我想这样做:

但我不希望我的颜色轴是连续的


我的输入数据的格式如下:

x = [0, 0, 0, ... , 20, 20, 20, ..., 39, 39, 39]
y = [0, 1, 2, ..., 0, 1, 2... , 37, 38, 39]
z = [0, 1, 0, ..., 1, 1, 0, ..., 1, 0 ,0]
换句话说,我的z值要么是0,要么是1,并且从不介于两者之间

我尝试:

 import numpy
 import matplotlib.pyplot as plt

 #===Load Data===#
 data = numpy.loadtxt("class_map.dat");

 #===Get Array Sizes===#
 max_x_size = int(numpy.sqrt(len(data[:,0])));
 max_y_size = int(numpy.sqrt(len(data[:,1])));

 #===Reshape Into Square Grid===#
 x = data[:,0]; xx = numpy.reshape(x, (max_x_size, max_x_size));
 y = data[:,1]; yy = numpy.reshape(y, (max_y_size, max_y_size));
 z = data[:,2]; zz = numpy.reshape(z, (max_x_size, max_y_size));

 #===Plot===#
 plt.subplot(111)
 plt.contourf(xx,yy,zz)
 plt.colorbar()
 plt.show();
但我得到的是:

看起来contourf给了我一个连续函数。我希望它只是显示z变量中已经存在的值,而不是为其拟合函数。我该怎么做


编辑:此外,如果可能的话,我希望将离散值(0或1)设置为灰度。

您可以使用
levels
参数,例如
levels=[0,0.5,1]

import numpy as np
import matplotlib.pyplot as plt

#===Load Data===#
x,y  = np.meshgrid(np.arange(20),np.arange(20) )
data = np.random.randint(0,2, size=(20,20))

#===Plot===#
plt.subplot(111)
plt.contourf(x,y,data, levels=[0,0.5,1])
plt.colorbar()
plt.show()

另一种选择可能是使用
imshow()


您可以使用
levels
参数,例如
levels=[0,0.5,1]

import numpy as np
import matplotlib.pyplot as plt

#===Load Data===#
x,y  = np.meshgrid(np.arange(20),np.arange(20) )
data = np.random.randint(0,2, size=(20,20))

#===Plot===#
plt.subplot(111)
plt.contourf(x,y,data, levels=[0,0.5,1])
plt.colorbar()
plt.show()

另一种选择可能是使用
imshow()