如何将颜色条的刻度标签设置为不同的颜色?

问题描述 投票:0回答:1

我正在使用下面的函数创建图像。因为我后来想将其集成到窗口中,所以我更改了背景颜色,因此文本在默认颜色下不可见。我想将颜色条的刻度标签更改为白色(或任何对比色)显示。

下面你可以看到我目前在做什么:

 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,所以它应该可以工作。我也尝试过“白色”。我尝试过寻找轴或刻度标签的其他参数/方法,包括在循环中迭代刻度,但没有任何效果。

这是生成图像的示例

除了刻度线之外,函数中的所有其他颜色变化都有效。

python matplotlib plot colorbar
1个回答
0
投票

看起来

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([])
© www.soinside.com 2019 - 2024. All rights reserved.