7

在 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))

这基本上看起来像我想要的:

克鲁格轮廓

4

1 回答 1

4

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

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

在此处输入图像描述

于 2013-11-09T22:35:04.470 回答