【问题标题】:How to color contour labels by a colormap?如何通过颜色图为轮廓标签着色?
【发布时间】:2023-03-19 10:06:01
【问题描述】:

我有一个等高线图,我使用名为 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 笔记本上尝试的数据:

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')

【问题讨论】:

  • 通过提供问题的minimal reproducible example,您会更快(甚至根本没有)得到答案。 IE。一些代码可以从问题中复制和粘贴,应用必要的更改并编写答案。如果我现在必须自己创建这样的示例,我可能会完全不回答,因为复制您的案例太乏味了。
  • 好的,我现在发布示例代码
  • @ImportanceOfBeingErnest 谢谢,我添加了示例代码以便轻松应用

标签: python matplotlib colors contour contourf


【解决方案1】:

我猜你混淆了contourcontourf 的参数。将反向颜色图应用于轮廓效果很好。

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)))

【讨论】:

  • 如果可能的话,还有一个问题:这里的标签与线条的颜色相同。如果我希望标签遵循不同的颜色图怎么办?
  • 另外,如果我们想要特殊的颜色,我们可以定义一个颜色元组cols = ('w', 'w', 'y', 'y','r', 'r','b', 'g','k', 'k')[::-1],然后添加到plt.clabel(CS, fontsize=10, colors=cols)
猜你喜欢
  • 2018-03-18
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多