在matplotlib中为色条添加白色背景

8
我希望能通过添加白色背景使我的色条更加明显。由于色条位于图片内部,有时很难读取。以下是没有白色背景的代码:
import matplotlib.pyplot as plt
import numpy as np

a=np.random.rand(10,10)

fig=plt.figure()
ax=fig.add_axes([0,0,1,1]) #fill the entire axis
im=ax.imshow(a)
cbaxes=fig.add_axes([0.8,0.1,0.03,0.8]) #add axis for colorbar, define size
cb=fig.colorbar(im,cax=cbaxes) #make colorbar
#cb.outline.set_color('white') #this does not work
fig.show()
3个回答

10

这里有一个创建背景的解决方案:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

a=np.random.rand(10,10)

fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
im=ax.imshow(a)

cbbox = inset_axes(ax, '15%', '90%', loc = 7)
[cbbox.spines[k].set_visible(False) for k in cbbox.spines]
cbbox.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
cbbox.set_facecolor([1,1,1,0.7])

cbaxes = inset_axes(cbbox, '30%', '95%', loc = 6)

cb=fig.colorbar(im,cax=cbaxes) #make colorbar

fig.show()

在此输入图片描述


7
colorbar 是一个 patch,因此您需要将边缘颜色设置为白色。之所以 set_color 不起作用是因为它同时设置了面和边缘的颜色为白色。
cb.outline.set_edgecolor('white')
cb.outline.set_linewidth(2)

如果您希望标签也是白色的,您需要设置这些标记参数。
cbaxes.tick_params(axis='both', colors='white')

enter image description here


@WesleyKitlasten 很高兴听到这个消息。如果您认为它可以帮助其他有同样问题的人,请考虑将其标记为答案。 - Suever

1
请注意,自从@Hagne发布他们的答案以来,用于关闭刻度标记的API已更改。
现在,您需要传递False,而不是off。 这让我困惑了一段时间,因为API没有抱怨-只是没起作用。
cbbox.tick_params(
    axis = 'both',
    left = False,
    top = False,
    right = False,
    bottom = False,
    labelleft = False,
    labeltop = False,
    labelright = False,
    labelbottom = False
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接