繁体   English   中英

在Contourf图中为一个级别使用不同的cmap /颜色

[英]Using a different cmap/color for one level in a contourf plot

我正在尝试使用一些xyz值来做一个matplotlib contourf图。 基本上, z值将定义绘图的颜色。 但是,我现在所在的一个区域(即对我而言重要的区域)与其余区域相比很小(请参见图),因此实际上很难看到此特定区域(一些小黑点) )。 所以我在想,是否有可能用另一种颜色获得第一个lvl(或最后一个级别,因为在这种情况下它是负值),或者用细白线或其他东西勾勒出轮廓,这样才能真正看到较小的重要点?

我正在使用以下代码进行绘图:

import matplotlib.pyplot as plt
from matplotlib import rcParams
import matplotlib.colors as colors
import numpy as np

nx = 41
ny = 67

x = np.linspace(0.01, 1, nx)
y = np.linspace(0.01, 2, ny)
x_bc = x[:, np.newaxis]
y_bc = y[np.newaxis, :]

z = x_bc*y_bc

max_value = np.amax(z)
cmapp = plt.get_cmap('Greys')

level_intervals = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 8, 1.92, 0]
level_list = [max_value-i for i in level_intervals]

col_bar = plt.contourf(x, y, z.T, level_list, cmap=cmapp)
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar(col_bar, cmap=cmapp)

plt.show()

很抱歉没有提供任何真实数据,但是我无法复制下面的绘图所用的数据(实际上,在几乎黑色的内部(奇怪的句子)里面有少量/几乎是黑色的点)。以及如何创建z数据的方法与上面相同,但是在从图中获取数据之前,已经进行了许多计算。

在此处输入图片说明

根据下面的评论进行编辑:您可以将轮廓限制在所需的区域/范围内。 例如,我修改了上面示例代码中的x,y和z数据,以绘制更多轮廓线。 然后,我只选择幅度最高的等高线levels = sorted(level_list)[-5:] (这里的最后5条线)以红色突出显示。 尝试将其用于实际数据,并查看感兴趣区域中的点是否可见。 我只在我在您的代码中修改过的行下面编写。

fig = plt.figure(figsize=(8, 6))
nx = 67
ny = 77

# Modified your actual values to get some more contour lines
x = np.linspace(1, 16, nx)
y = np.linspace(1, 15, ny)
z = x_bc*y_bc*0.2

col_bar = plt.contourf(x, y, z.T, level_list, cmap=cmapp)
plt.contour(col_bar, levels = sorted(level_list)[-5:], colors=('r',),linestyles=('-',),linewidths=(3,))

产量

在此处输入图片说明

您可以基于现有的颜色表创建自定义颜色图,并将其中一种颜色替换为例如红色。
然后,您可以使用BoundaryNorm为指定级别使用新颜色图中的颜色。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

d = np.linspace(-3,3)
x,y = np.meshgrid(d,d)
data = -585.22 + 94*np.exp(-(x**2+y**2))
levels = np.linspace(-585.22, -485.22, 13)
norm = matplotlib.colors.BoundaryNorm(levels,len(levels))

colors = list(plt.cm.Greys(np.linspace(0,1,len(levels)-1)))
colors[-1] = "red"
cmap = matplotlib.colors.ListedColormap(colors,"", len(colors))

im = plt.contourf(data, levels, cmap=cmap, norm=norm)

plt.colorbar(ticks=levels)

plt.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM