我正在绘制一个从MWA生成的函数z
,如下所示:
import numpy as np
import matplotlib.pyplot as plt
ylist = np.linspace(0,10,20)
xlist = np.linspace(0,10,20)
zR = [] # real part of z
zI = [] # imaginary part of z
for y in ylist:
for x in xlist:
z = 0.2*x**2 + 1j*(x*y+0.7*np.sqrt(y))
zR.append(z.real)
zI.append(z.imag)
zR = np.array(zR)
z_matrixR = zR.reshape((ylist.size, xlist.size))
zI = np.array(zI)
z_matrixI = zI.reshape((ylist.size, xlist.size))
fig = plt.figure(figsize=(8.0,6.0))
ax1 = fig.add_subplot(221)
z_contourR = ax1.contourf(xlist,ylist,z_matrixR,100)
plt.xlabel('x')
plt.ylabel('y')
plt.title('real')
#cbarR = plt.colorbar(z_contourR)
ax2 = fig.add_subplot(222)
z_contourI = ax2.contourf(xlist,ylist,z_matrixI,100)
plt.xlabel('x')
plt.ylabel('y')
plt.title('imaginary')
#cbarI = plt.colorbar(z_contourI)
plt.tight_layout()
plt.show()
我希望z
函数的实部和虚部共享相同的颜色条,但我不知道该怎么做。我查看了this和this示例,但我仍然不确定如何将其应用于我的代码。
答案 0 :(得分:2)
vmin
,vmax
和levels
是您的朋友。您可能需要3个选项:
在绘制实部和虚部时使用相同的部分
fig = plt.figure(figsize=(8.0,6.0))
ax1 = fig.add_subplot(221)
vmax=30
vmin=0
levels = np.linspace(vmin,vmax,100)
z_contourR = ax1.contourf(xlist,ylist,z_matrixR,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('real')
cbarR = plt.colorbar(z_contourR)
ax2 = fig.add_subplot(222)
z_contourI = ax2.contourf(xlist,ylist,z_matrixI,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('imaginary')
cbarI = plt.colorbar(z_contourI)
plt.tight_layout()
plt.show()
右上角是白色的,因为它超出了我指定的levels
,您可以通过为levels
和vmax
选择不同的最大值来重新输入
这会产生一个看起来很有趣的颜色条,但在某些情况下你可能会想要它
fig = plt.figure(figsize=(8.0,6.0))
ax1 = fig.add_subplot(221)
vmax=30
levels_max=100
vmin=0
levels = np.arange(vmin,levels_max,.1)
z_contourR = ax1.contourf(xlist,ylist,z_matrixR,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('real')
cbarR = plt.colorbar(z_contourR)
ax2 = fig.add_subplot(222)
z_contourI = ax2.contourf(xlist,ylist,z_matrixI,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('imaginary')
cbarI = plt.colorbar(z_contourI)
plt.tight_layout()
plt.show()
现在,如果您希望右上方填充并且颜色条看起来正确,则应在图纸之间重新定义levels
并使用第一个颜色条绘制
fig = plt.figure(figsize=(8.0,6.0))
ax1 = fig.add_subplot(221)
vmax=30
levels_max=30
vmin=0
levels = np.linspace(vmin,levels_max,100)
z_contourR = ax1.contourf(xlist,ylist,z_matrixR,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('real')
cbarR = plt.colorbar(z_contourR)
vmax=30
levels_max=100
vmin=0
levels = np.linspace(vmin,levels_max,100)
ax2 = fig.add_subplot(222)
z_contourI = ax2.contourf(xlist,ylist,z_matrixI,levels=levels,vmax=vmax,vmin=vmin)
plt.xlabel('x')
plt.ylabel('y')
plt.title('imaginary')
cbarI = plt.colorbar(z_contourR)
plt.tight_layout()
plt.show()