2017-06-21 170 views
0

我在循环内生成一些数据,并将它们绘制为轮廓图。每个绘图应该使用相同的色彩图和指定数量的等值线。另外,第一级颜色应该是白色的。matplotlib中的轮廓不会绘制轮廓的指定数量

通过下面的代码片段生成的身影酷似我面对此刻的问题:

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

enter image description here

有9和我注意到,似乎取决于分钟没有8线级别/数据的最大值。因此,自从数据发生变化后,在我的循环中生成的图形中轮廓级别的数目不相同。我可以使用哪个色彩地图,以便第一层是白色的?我知道那里有许多关于色彩映射的问题。但他们倾向于手动生成色彩图。我只是想使用这个现有的一个,并添加白色作为第一种颜色或以某种方式修改我的脚本,以便它确实以白色开始(我认为这将是无论如何)。

回答

1

轮廓(f)中的levels自变量指定了层数。即对于等值线图,这是您获得的线数,对于contourf图,这比不同颜色区域的数量少一个。例如,如果您采用单一级别,则会显示一行和两个彩色区域。

enter image description here

为了获得白色作为第一个颜色,你需要选择实际上具有白色作为第一颜色的颜色表(注意:OrRd没有在它白色)。查看colormap reference,这样的地图将例如是反转的afmhot。当然,你也可以建立你的自定义地图,它具有白色作为第一种颜色。 从色彩地图中选择相应范围的颜色,使其从色阶之间的间隔中间取得颜色。即使是第一级,这也会导致非白色。为了克服这个问题,可以选择从给定的颜色映射中生成颜色为N+1的颜色映射,以使颜色在该间隔内保持不变,并且平均值仍然与起始颜色相同。

levels = 8 
cmap= plt.cm.get_cmap("afmhot_r", levels+1) 
plt.contourf(x, y, data, levels, cmap=cmap) 

生产:

enter image description here