因此,我正在为一些学校作业创建电场的等高线图,其变化非常极端(1e-6至1e + 8),我想以对数刻度显示等高线。问题在于,既有正电场又有负电场,并且Matplotlib.Ticker.LogLocator破坏了负值,我希望所有值都绘制在连续的颜色图上。我找不到任何简单的方法来设置代码来进行半对数缩放,而其他解决方案也让我望而却步。
到目前为止,这是我的代码:
def plotEField2D(data_in, ax, fig, field='Ey', xlim=100, ylim=100, num_levels=20,
contours=False, num_lines=10):
electric_data = data_in.electric
ax.set_xlim(-xlim, xlim)
ax.set_ylim(-ylim, ylim)
ax.set_title('2D ' + field + ' Contour')
ax.set_xlabel('x (nm)')
ax.set_ylabel('y (nm)')
e_data = pd.pivot_table(electric_data[['x','y', field]],
values=field, index='y', columns='x')
e_data = e_data.interpolate().fillna(0)
mymin = np.min(e_data.values)
mymax = np.max(e_data.values)
e = ax.contourf(e_data.columns, e_data.index, e_data.values, num_levels,
cmap=plt.cm.coolwarm, locator=matplotlib.ticker.LogLocator(),
norm=matplotlib.colors.SymLogNorm(linthresh=1000, linscale=0.1, vmin=mymin,
vmax=mymax), vmin=mymin, vmax=mymax)
fig.colorbar(e, ax=ax, format='%.0e', extend='both')
if contours:
e = ax.contour(e_data.columns, e_data.index, e_data.values,
num_lines, colors='k', linewidths=1)
我正在尝试在Contourf图中实现SymLogNorm,但是,正如您在图像中看到的那样,即使我传入了SymLogNorm参数,contourf也正在筛选出小于0的值。我对SymLogNorm不太熟悉,所以我希望它是我所缺少的基本知识。
为什么SymLogNorm不创建像this example那样延伸到负数的颜色渐变?我检查过mymin和mymax分别是负数和正数,所以我知道不是那样。
感谢您的帮助!