如何通过颜色图为等高线标签着色?
How to color contour labels by a colormap?
我有一个等高线图,我使用名为 YlGn
的黄绿色地图着色
较暗区域的标签显示不佳,因为它们是黑色的。
有没有一种方法可以使标签的颜色与使用的颜色图相反?即,将 0.39 标签着色为白色,将 0.15 标签着色为深绿色,并相应地将中间标签着色。
我使用 CS3 = plt.contourf(X, Z, M, levels, cmap=plt.cm.YlGn, extend='both')
填充轮廓,CS4 = plt.contour(CS3, colors=('k',), linewidths=(1,))
线条轮廓,最后 plt.clabel(CS4, linewidths=2, fmt='%2.2f', colors='k', fontsize=14)
标签。
然而,当我尝试添加 cmap=plt.cm.YlGn_r
并将 colors='k'
删除到标签(以反转颜色)时,它什么也没做。
注意:此处使用的代码部分取自this documentation page,但进行了一些修改以适合我的数据。
以下是一些可以在 Jupyter notebook 上试用的数据:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
delta = 0.025
x = np.arange(1.0, 3.0, delta)
y = np.arange(1.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
plt.figure()
CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn_r)
CS2 = plt.contourf(X, Y, Z, color='k')
plt.clabel(CS, fontsize=10,color='k')
plt.title('Simplest default with labels')
我猜你混淆了 contour
和 contourf
的参数。将反向颜色图应用于轮廓效果很好。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import mlab
delta = 0.025
x = np.arange(1.0, 3.0, delta)
y = np.arange(1.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
plt.figure()
CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn)
plt.clabel(CS, fontsize=10)
plt.title('Simplest default with labels')
plt.show()
要对线条使用与填充相同的颜色图,然后对标签使用不同的颜色图,您需要手动定义颜色。但是使用现有级别可以帮助您非常有效地做到这一点。
CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
CS = plt.contour(CS2, cmap=plt.cm.YlGn_r)
plt.clabel(CS, fontsize=10, colors=plt.cm.Reds(CS.norm(CS.levels)))
我有一个等高线图,我使用名为 YlGn
的黄绿色地图着色
较暗区域的标签显示不佳,因为它们是黑色的。
有没有一种方法可以使标签的颜色与使用的颜色图相反?即,将 0.39 标签着色为白色,将 0.15 标签着色为深绿色,并相应地将中间标签着色。
我使用 CS3 = plt.contourf(X, Z, M, levels, cmap=plt.cm.YlGn, extend='both')
填充轮廓,CS4 = plt.contour(CS3, colors=('k',), linewidths=(1,))
线条轮廓,最后 plt.clabel(CS4, linewidths=2, fmt='%2.2f', colors='k', fontsize=14)
标签。
然而,当我尝试添加 cmap=plt.cm.YlGn_r
并将 colors='k'
删除到标签(以反转颜色)时,它什么也没做。
注意:此处使用的代码部分取自this documentation page,但进行了一些修改以适合我的数据。
以下是一些可以在 Jupyter notebook 上试用的数据:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
delta = 0.025
x = np.arange(1.0, 3.0, delta)
y = np.arange(1.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
plt.figure()
CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn_r)
CS2 = plt.contourf(X, Y, Z, color='k')
plt.clabel(CS, fontsize=10,color='k')
plt.title('Simplest default with labels')
我猜你混淆了 contour
和 contourf
的参数。将反向颜色图应用于轮廓效果很好。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import mlab
delta = 0.025
x = np.arange(1.0, 3.0, delta)
y = np.arange(1.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
plt.figure()
CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
CS = plt.contour(X, Y, Z, cmap=plt.cm.YlGn)
plt.clabel(CS, fontsize=10)
plt.title('Simplest default with labels')
plt.show()
要对线条使用与填充相同的颜色图,然后对标签使用不同的颜色图,您需要手动定义颜色。但是使用现有级别可以帮助您非常有效地做到这一点。
CS2 = plt.contourf(X, Y, Z, cmap=plt.cm.YlGn_r)
CS = plt.contour(CS2, cmap=plt.cm.YlGn_r)
plt.clabel(CS, fontsize=10, colors=plt.cm.Reds(CS.norm(CS.levels)))