在 matplotlib 中,我希望创建一个插入颜色条来显示等高线图的比例,但是当我使用轮廓创建轮廓时,颜色条有贯穿它的白色条纹,而当我使用 contourf 时,颜色条有适当的“光滑”外观:
如何从我的正常轮廓图上的填充轮廓中获得漂亮的平滑颜色条?我想我也可以使用填充轮廓,其中零级可以设置为白色。
这是生成此示例的代码:
from numpy import linspace, outer, exp
from matplotlib.pyplot import figure, gca, clf, subplots_adjust, subplot
from matplotlib.pyplot import contour, contourf, colorbar, xlim, ylim, title
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
# Make some data to plot - 2D gaussians
x = linspace(0, 5, 100)
y = linspace(0, 5, 100)
g1 = exp(-((x-0.75)/0.2)**2)
g2 = exp(-((y-4.25)/0.1)**2)
g3 = exp(-((x-3.5)/0.15)**2)
g4 = exp(-((y-1.75)/0.05)**2)
z = outer(g1, g2) + outer(g3, g4)
figure(1, figsize=(13,6.5))
clf()
# Create a contour and a contourf
for ii in range(0, 2):
subplot(1, 2, ii+1)
if ii == 0:
ca = contour(x, y, z, 125)
title('Contour')
else:
ca = contourf(x, y, z, 125)
title('Filled Contour')
xlim(0, 5)
ylim(0, 5)
# Make the axis labels
yt = text(-0.35, 2.55, 'y (units)', rotation='vertical', size=14);
xt = text(2.45, -0.4, 'x (units)', rotation='horizontal', size=14)
# Add color bar
ains = inset_axes(gca(), width='5%', height='60%', loc=2)
colorbar(ca, cax=ains, orientation='vertical', ticks=[round(xx*10.0)/10.0 for xx in linspace(0, 1)])
if ii ==1:
ains.tick_params(axis='y', colors='#CCCCCC')
subplots_adjust(left=0.05, bottom=0.09, right=0.98, top=0.94, wspace=0.12, hspace=0.2)
show()
编辑:我现在意识到在较低的分辨率下,白色条纹行为很难与一些光透明度区分开来。这是一个只有 30 条等高线的示例,这使得问题更加明显:
编辑 2:虽然我仍然有兴趣弄清楚如何在一般情况下执行此操作(例如是否有负值),但在我的具体情况下,我已经确定我可以通过简单地有效地创建看起来像我想要的东西将填充轮廓的级别设置为从零级以上开始:
ca = contourf(x, y, z, levels=linspace(0.05, 1, 125))
这基本上看起来像我想要的: