我正在使用下面的函数创建图像。因为我后来想将其集成到窗口中,所以我更改了背景颜色,因此文本在默认颜色下不可见。我想将颜色条的刻度标签更改为白色(或任何对比色)显示。
下面你可以看到我目前在做什么:
def create_image(self):
fig, ax = plt.subplots(figsize=(10, 10), facecolor=BACKGROUND_COLOR)
ax.set_aspect('equal', 'box')
values = [hexagon['value'] for hexagon in self.sensorMatrix]
cmap = plt.get_cmap(custom_colormap)
norm = colors.LogNorm(vmin=np.min([i for i in values if i != 0]), vmax=np.max(values))
for i, hexagon in enumerate(self.sensorMatrix):
hexagon_color = cmap(norm(hexagon['value']))
hexagon_edge = hexagon['edge']
hexagon_coords = self.coordinates[i]
hexagon_polygon = plt.Polygon(hexagon_coords, edgecolor=hexagon_edge, facecolor=hexagon_color, linewidth=1)
ax.add_patch(hexagon_polygon)
ax.set_xlim(-2, 3 * self.row_length + 3)
ax.set_ylim(-2, 3 * self.row_length + 3)
ax.axis('off')
divider = make_axes_locatable(ax)
cax = divider.append_axes('right', size='5%', pad=0.05)
sm = cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
cbar = plt.colorbar(sm, cax=cax, orientation='vertical')
cbar.set_label('ADC value', color=WHITE, rotation=270, labelpad=10)
cbar.ax.tick_params(colors=WHITE)
cbar.outline.set_edgecolor(WHITE)
plt.show()
由于某种原因,
cbar.ax.tick_params(colors=WHITE)
不会改变刻度标签的颜色,尽管所有其他编辑都有效。
“WHITE”刚刚在其他地方定义为#FFF,所以它应该可以工作。我也尝试过“白色”。我尝试过寻找轴或刻度标签的其他参数/方法,包括在循环中迭代刻度,但没有任何效果。
除了刻度线之外,函数中的所有其他颜色变化都有效。
看起来
plt.colorbar()
正在向生成的颜色条添加次要刻度,而不是主要刻度。我认为主要刻度是默认值,因为我发现次要刻度通常是关闭的,尽管在这种情况下这是错误的。
@JohanC 提供了解决方案
cbar.ax.tick_params(which='both', color='white', labelcolor='white')
。看来 LogNorm 可能是罪魁祸首(仍然不确定这里如何确定刻度以及主要刻度是否在不同范围内可见)
这是我目前拥有的颜色条段:
cbar = plt.colorbar(sm, cax=cax, orientation='vertical')
cbar.set_label('ADC value', color=WHITE, rotation=270, labelpad=10)
cbar.ax.tick_params(which='minor', color=WHITE, labelcolor='white')
cbar.set_ticks([])