轮廓未绘制指定数量的轮廓

DaP*_*hil 5 python matplotlib contour colormap contourf

我在循环中生成一些数据,并喜欢将它们绘制为等高线图。每个图应使用相同的颜色图和指定数量的等高线级别。另外,第一级颜色应该是白色。

以下代码片段生成的图类似于我目前面临的问题:

import numpy as np
import matplotlib.pyplot as plt

x = y = np.linspace(-3, 3, 200)
data = 1800*np.exp(-(x[newaxis, :].T**2 + y**2))

plt.figure(1000)
plt.clf()

plt.contourf(x, y, data, 8, cmap=plt.cm.OrRd)
plt.axes().set_aspect("equal")
plt.colorbar()
plt.contour(x, y, data, 8, colors='k')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我注意到有 9 个而不是 8 个轮廓级别似乎取决于数据的最小/最大值。因此,由于数据发生变化,我在循环中生成的图形中轮廓级别的数量并不相同。我可以使用哪种颜色图使第一级为白色?我知道有无数关于色彩图的问题。但他们倾向于手动生成色彩图。我只想使用这个现有的,然后添加白色作为第一种颜色,或者以某种方式修改我的脚本,以便它确实以白色开头(我认为无论如何都会如此)。

Imp*_*est 5

levels中的参数指定级别数。即,对于等高线图,这是您获得的线数,对于等高线图,这是比不同颜色区域的数量少一的数。例如,如果您选择一个级别,您会得到一条线和两个彩色区域。.contourf.contour

在此输入图像描述

要将白色作为第一颜色,您需要选择一个实际上以白色作为第一颜色的颜色图(请注意,OrRd其中没有白色)。查看颜色图参考,这样的图可能是相反的afmhot。当然,您也可以构建以白色作为第一颜色的自定义地图。选择颜色图中相应范围的颜色,以便它采用来自级别之间间隔中间的颜色。即使对于第一级,这也会导致非白色。为了克服这个问题,可以选择使用给定颜色图中的颜色生成颜色图N+1,使得颜色在整个间隔内保持不变,并且平均值仍然与起始颜色相同。

levels = 8
cmap= plt.cm.get_cmap("afmhot_r", levels+1)
plt.contourf(x, y, data, levels, cmap=cmap)
Run Code Online (Sandbox Code Playgroud)

产生:

在此输入图像描述