Python matplotlib contourf 图
Python matplotlib contourf plot
我有一个关于 matplotlib 和 contourf 的问题。
我正在使用带有 python3.7 的最新版本的 matplotlib。基本上我必须矩阵我想在相同的等高线图上绘制但使用不同的颜色图。一个重要的方面是,例如,如果我们有零矩阵 A 和矩阵 B,形状为 (10,10),那么矩阵 A 不同于零的位置就是矩阵 B 非零的位置,反之亦然。
换句话说,我想用不同的颜色绘制两个不同的蒙版。
谢谢你的时间。
已编辑:
我这里加个例子
import numpy
import matplotlib.pyplot as plt
matrixA=numpy.random.randn(10,10).reshape(100,)
matrixB=numpy.random.randn(10,10).reshape(100,)
mask=numpy.random.uniform(10,10)
mask=mask.reshape(100,)
indexA=numpy.where(mask[mask>0.5])[0]
indexB=numpy.where(mask[mask<=0.5])[0]
matrixA_masked=numpy.zeros(100,)
matrixB_masked=numpy.zeros(100,)
matrixA_masked[indexA]=matrixA[indexA]
matrixB_masked[indexB]=matrixB[indexB]
matrixA_masked=matrixA_masked.reshape(100,100)
matrixB_masked=matrixB_masked.reshape(100,100)
x=numpy.linspace(0,10,1)
X,Y = numpy.meshgrid(x,x)
plt.contourf(X,Y,matrixA_masked,colormap='gray')
plt.contourf(X,Y,matrixB_masked,colormap='winter')
plt.show()
我想要的是能够使用出现在同一图中的不同颜色图。因此,例如在图中,将有一个部分分配给具有轮廓颜色的矩阵A(和0,其中矩阵B发生),以及具有不同颜色图的矩阵B。
在其他作品中,contourf 图的每个部分对应一个矩阵。我正在绘制机器学习模型的决策面。
我在您的代码中发现了一些错误,所以我创建了自己的数据集。
要在一个图上有两个颜色图,您需要打开一个图形并定义轴:
import numpy
import matplotlib.pyplot as plt
matrixA=numpy.linspace(1,20,100)
matrixA[matrixA >= 10] = numpy.nan
matrixA_2 = numpy.reshape(matrixA,[50,2])
matrixB=numpy.linspace(1,20,100)
matrixB[matrixB <= 10] = numpy.nan
matrixB_2 = numpy.reshape(matrixB,[50,2])
fig,ax = plt.subplots()
a = ax.contourf(matrixA_2,cmap='copper',alpha=0.5,zorder=0)
fig.colorbar(a,ax=ax,orientation='vertical')
b=ax.contourf(matrixB_2,cmap='cool',alpha=0.5,zorder=1)
fig.colorbar(b,ax=ax,orientation='horizontal')
plt.show()
您还会看到我更改了 alpha
和 zorder
希望对您有所帮助。
我有一个关于 matplotlib 和 contourf 的问题。
我正在使用带有 python3.7 的最新版本的 matplotlib。基本上我必须矩阵我想在相同的等高线图上绘制但使用不同的颜色图。一个重要的方面是,例如,如果我们有零矩阵 A 和矩阵 B,形状为 (10,10),那么矩阵 A 不同于零的位置就是矩阵 B 非零的位置,反之亦然。
换句话说,我想用不同的颜色绘制两个不同的蒙版。
谢谢你的时间。
已编辑:
我这里加个例子
import numpy
import matplotlib.pyplot as plt
matrixA=numpy.random.randn(10,10).reshape(100,)
matrixB=numpy.random.randn(10,10).reshape(100,)
mask=numpy.random.uniform(10,10)
mask=mask.reshape(100,)
indexA=numpy.where(mask[mask>0.5])[0]
indexB=numpy.where(mask[mask<=0.5])[0]
matrixA_masked=numpy.zeros(100,)
matrixB_masked=numpy.zeros(100,)
matrixA_masked[indexA]=matrixA[indexA]
matrixB_masked[indexB]=matrixB[indexB]
matrixA_masked=matrixA_masked.reshape(100,100)
matrixB_masked=matrixB_masked.reshape(100,100)
x=numpy.linspace(0,10,1)
X,Y = numpy.meshgrid(x,x)
plt.contourf(X,Y,matrixA_masked,colormap='gray')
plt.contourf(X,Y,matrixB_masked,colormap='winter')
plt.show()
我想要的是能够使用出现在同一图中的不同颜色图。因此,例如在图中,将有一个部分分配给具有轮廓颜色的矩阵A(和0,其中矩阵B发生),以及具有不同颜色图的矩阵B。
在其他作品中,contourf 图的每个部分对应一个矩阵。我正在绘制机器学习模型的决策面。
我在您的代码中发现了一些错误,所以我创建了自己的数据集。 要在一个图上有两个颜色图,您需要打开一个图形并定义轴:
import numpy
import matplotlib.pyplot as plt
matrixA=numpy.linspace(1,20,100)
matrixA[matrixA >= 10] = numpy.nan
matrixA_2 = numpy.reshape(matrixA,[50,2])
matrixB=numpy.linspace(1,20,100)
matrixB[matrixB <= 10] = numpy.nan
matrixB_2 = numpy.reshape(matrixB,[50,2])
fig,ax = plt.subplots()
a = ax.contourf(matrixA_2,cmap='copper',alpha=0.5,zorder=0)
fig.colorbar(a,ax=ax,orientation='vertical')
b=ax.contourf(matrixB_2,cmap='cool',alpha=0.5,zorder=1)
fig.colorbar(b,ax=ax,orientation='horizontal')
plt.show()
您还会看到我更改了 alpha
和 zorder
希望对您有所帮助。