Python Matplotlib:轮廓上的颜色栏,不带条纹

Python Matplotlib:轮廓上的颜色栏,不带条纹,python,matplotlib,Python,Matplotlib,在matplotlib中,我希望创建一个插入颜色栏来显示轮廓图的比例,但当我使用轮廓创建轮廓时,颜色栏上有白色条纹,而当我使用轮廓F时,颜色栏具有适当的“平滑”外观: 如何从我的正常等高线图上的填充等高线中获得漂亮平滑的色条?我想,我也可以用一个填充轮廓,在那里零级可以设置为白色 下面是生成此示例的代码: from numpy import linspace, outer, exp from matplotlib.pyplot import figure, gca, clf, subplots

在matplotlib中,我希望创建一个插入颜色栏来显示轮廓图的比例,但当我使用轮廓创建轮廓时,颜色栏上有白色条纹,而当我使用轮廓F时,颜色栏具有适当的“平滑”外观:

如何从我的正常等高线图上的填充等高线中获得漂亮平滑的色条?我想,我也可以用一个填充轮廓,在那里零级可以设置为白色

下面是生成此示例的代码:

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,1125))

这基本上就是我想要的:


一个简单的技巧是将颜色栏中线条的厚度设置为更高的值。 例如,将colorbar对象存储为
cb
,并在示例中添加以下行

for line in cb.lines: 
   line.set_linewidth(3)
给予

还有问题吗?如果你解决了这个问题,你能回答并结束这个问题吗?我通过做一些看起来像我想要的东西来解决我的具体问题,但一般问题仍然存在。如果我的数据有任何负值,或者如果我想看到实际的轮廓线,那么我的解决方案将不起作用,因此,虽然这对我来说并不紧迫,但它仍然是一个问题,需要一个真正的解决方案。
轮廓
的颜色栏工作的方式是在颜色栏中为每条线绘制一条线。改变这一点需要重新编写
colorbar
如何处理等高线图。