在matplotlib中,我想创建一个插入颜色条来显示我的轮廓图的比例,但是当我使用轮廓创建轮廓时,颜色条有白色条纹穿过它,而当我使用contourf时, colorbar具有适当的“平滑”外观:
如何从正常轮廓图上的填充轮廓中获得漂亮的光滑色条?我想也可以使用填充轮廓,其中零级别可以设置为白色,我想。
以下是生成此示例的代码:
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))
基本上看起来像我想要的那样:
答案 0 :(得分:4)
一个简单的方法是将颜色条中的线条粗细设置为更高的值。
例如。将colorbar对象存储为cb
并将以下行添加到示例中
for line in cb.lines:
line.set_linewidth(3)
给出