首页 > 解决方案 > 我的 cmap 不会在 0 左右分开,到底出了什么问题?

问题描述

我正在尝试用一种颜色表示正值和一种颜色表示负值的配色方案绘制等高线图。我尝试使用Colorplot 中区分正值和负值的答案,但无济于事。我在下面附上了一段代码,使用这段代码,cmap 不会在 0 处分隔红色和蓝色,而是在 -40 处。究竟是什么问题?

import numpy as np
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator

Vr=1438.7228 #some constants
Va=626.8932
dr=3.11
da=1.55

def func(x,y):
    repulsive = Vr*np.log( ((y+x)**2 + dr**2)/((y-x)**2 + dr**2) )
    attractive = Va*np.log( ((y+x)**2 + da**2)/((y-x)**2 + da**2) )
    return (1.0/(4.0*x*y))*(repulsive-attractive)

x = np.linspace(1e-4,10,100) 
y = np.linspace(1e-4,10,100)

X, Y = np.meshgrid(x, y)

Z = func(X,Y)

levels = MaxNLocator(nbins=15).tick_values(Z.min(), Z.max())
cmap = plt.get_cmap('RdBu')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)

sc = plt.contourf(X, Y, Z, norm=norm, cmap=cmap)
plt.colorbar(sc)
plt.show()

标签: python-3.xmatplotlibcontour

解决方案


推荐阅读