Matplotlib:轮廓上没有条纹的色条
在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))
基本上看起来像我想要的:
简单的黑客就是将颜色条中的线的粗细设置为更高的值。 例如,将颜色条对象存储为cb
,并将以下几行添加到您的示例中
for line in cb.lines:
line.set_linewidth(3)
给
链接地址: http://www.djcxy.com/p/75207.html