Python 填充matplotlib等高线图

Python 填充matplotlib等高线图,python,numpy,matplotlib,contour,Python,Numpy,Matplotlib,Contour,使用以下代码,我获得了以下等高线图: fig, ax = plt.subplots() x = np.arange(431) y = np.arange(225) Y, X = np.meshgrid(y, x) values = df["Appearance_percentage"].values values2d = np.reshape(values, (431, 225)) ax.set_ylim(225, 0) plt.style.use('seaborn-whi

使用以下代码,我获得了以下等高线图:

fig, ax = plt.subplots()
x = np.arange(431)
y = np.arange(225)
Y, X = np.meshgrid(y, x)
values = df["Appearance_percentage"].values
values2d = np.reshape(values, (431, 225))
ax.set_ylim(225, 0)

plt.style.use('seaborn-white')
ax.set_title('Mapa contour de probabilitat de trobar núvols')
plt.contour(X, Y, values2d, 30, cmap='RdGy')
plt.colorbar()
plt.savefig("contourmap.png")

我想知道我是否可以填充线之间的区域,这样在颜色栏中就没有空白,地图就更吸引人了


我试着做了
df[“外观百分比”\u轮廓图”]=round(df[“外观百分比”])
,然后
values=df[“外观百分比”\u轮廓图”]。
,我仍然得到了相同的带有大量白色区域的地图。

只要用
plt.contourf
替换
plt.contourf,其中“f”末尾的意思是“填充”

以下是一个例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = np.arange(100)
Y, X = np.meshgrid(y, x)
values = np.outer(x, y)

fig, ax = plt.subplots()
plt.contourf(X, Y, values, 30, cmap='RdGy')
plt.colorbar()

您可能还希望通过以下方式强调轮廓线:

x = np.arange(100)
y = np.arange(100)
Y, X = np.meshgrid(y, x)
values = np.outer(x, y)

fig, ax = plt.subplots()
c1 = plt.contourf(X, Y, values, 30, cmap='RdGy')
c2 = plt.contour(X, Y, values, 30, cmap='Greys')
plt.colorbar(c1)

只需将
plt.contour
替换为
plt.contourf
,其中末尾的“f”表示“填充”

以下是一个例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = np.arange(100)
Y, X = np.meshgrid(y, x)
values = np.outer(x, y)

fig, ax = plt.subplots()
plt.contourf(X, Y, values, 30, cmap='RdGy')
plt.colorbar()

您可能还希望通过以下方式强调轮廓线:

x = np.arange(100)
y = np.arange(100)
Y, X = np.meshgrid(y, x)
values = np.outer(x, y)

fig, ax = plt.subplots()
c1 = plt.contourf(X, Y, values, 30, cmap='RdGy')
c2 = plt.contour(X, Y, values, 30, cmap='Greys')
plt.colorbar(c1)
plt.contour()
创建一个连接所有具有相等插值的位置的曲线。因此,它搜索外观为6%的位置,并用一条线连接这些位置。如果设置
levels=30
,将绘制30条这样的线
plt.contour()
花了大量精力创建一个显示每行值的颜色条。如果不需要这样的颜色条,可以使用相同的值创建自定义颜色条

您可以按如下方式创建自定义颜色栏:

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.cm导入ScalarMapable
图,ax=plt.子批次()
x=np.arange(431)
y=np.arange(225)
Y、 X=np.网格网格(Y,X)
value=np.random.randn(431225).cumsum(axis=0).cumsum(axis=1).ravel()
values-=values.min()
值2d=np.重塑(值(431225))
ax.set_ylim(225,0)
plt.style.use('seaborn-white'))
ax.set_title('Mapa contour de probabilitat de trobar núvols')
plt.轮廓(X,Y,值2d,30,cmap='RdGy')
sm=scalarMapable(norm=plt.Normalize(values.min(),values.max()),cmap='RdGy')
打印颜色条(sm)
plt.show()

PS:请不要对值进行四舍五入(如在
df[“外观百分比”\u轮廓图]]=四舍五入(df[“外观百分比”])
),因为这会引入人为的不精确性。

plt.contour()
创建一个用相等插值连接所有位置的连接。因此,它搜索外观为6%的位置,并用一条线连接这些位置。如果设置
levels=30
,将绘制30条这样的线
plt.contour()
花了大量精力创建一个显示每行值的颜色条。如果不需要这样的颜色条,可以使用相同的值创建自定义颜色条

您可以按如下方式创建自定义颜色栏:

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.cm导入ScalarMapable
图,ax=plt.子批次()
x=np.arange(431)
y=np.arange(225)
Y、 X=np.网格网格(Y,X)
value=np.random.randn(431225).cumsum(axis=0).cumsum(axis=1).ravel()
values-=values.min()
值2d=np.重塑(值(431225))
ax.set_ylim(225,0)
plt.style.use('seaborn-white'))
ax.set_title('Mapa contour de probabilitat de trobar núvols')
plt.轮廓(X,Y,值2d,30,cmap='RdGy')
sm=scalarMapable(norm=plt.Normalize(values.min(),values.max()),cmap='RdGy')
打印颜色条(sm)
plt.show()


PS:请不要对值进行四舍五入(如
df[“外观百分比”\u轮廓图])=四舍五入(df[“外观百分比”)
),因为这会引入人为误差。

感谢您的帮助。例如,我如何将轮廓线的颜色定义为黑色?将
cmap
参数替换为
colors
并将您需要的颜色传递给它,例如,黑色的字母“k:
plt.contour(…,colors='k')
。对不起,Max,我的最后一个问题是是否可以控制轮廓线的厚度。。。非常抱歉给您带来不便,请使用
线宽
参数。有关更多信息,请查看。谢谢您的帮助。例如,我如何将轮廓线的颜色定义为黑色?将
cmap
参数替换为
colors
并将您需要的颜色传递给它,例如,黑色的字母“k:
plt.contour(…,colors='k')
。对不起,Max,我的最后一个问题是是否可以控制轮廓线的厚度。。。非常抱歉给您带来不便,请使用
线宽
参数。欲了解更多信息,请查看。