Как я могу установить метки галочек на моей цветовой панели в другой цвет?

Я создаю изображение, используя функцию ниже. Поскольку позже я хочу интегрировать его в окно, я меняю цвет фона, и в результате текст не отображается с цветом по умолчанию. Я хочу изменить метки галочек на моей цветовой панели, чтобы они отображались белым (или любым контрастным цветом).

Ниже вы можете увидеть, чем я сейчас занимаюсь:

 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) не меняет цвет галочек, хотя все остальные изменения работают.

«БЕЛЫЙ» в другом месте определяется как #FFF, поэтому он должен работать. Я также пробовал с «белым». Я пробовал искать другие аргументы/методы для осей или меток тиков, включая перебор тиков в цикле, но ничего не помогло.

Вот пример сгенерированного изображения

Любое другое изменение цвета в функции работает, кроме изменения цвета галочек.

Пробовали cbar.ax.tick_params(which='both', color='white', labelcolor='white')? При логарифмической норме неизвестного диапазона, возможно, будут видны только незначительные тики. Обратите внимание, что ваш код не воспроизводим, поэтому трудно угадать, что именно происходит. Поскольку шестиугольники не важны для цветовой панели, вы можете удалить много кода и создать настоящий минимальный воспроизводимый пример.

JohanC 01.05.2024 22:16

в примере кода есть неопределенные переменные. для вопроса требуется достаточный код для минимально воспроизводимого примера

darren 02.05.2024 00:04

@JohanC Действительно cbar.ax.tick_params(which='both', color='white', labelcolor='white'), похоже, решил проблему. Кажется, что нацеливание на второстепенные галочки решает проблему. У меня сложилось впечатление, что на цветовой полосе по умолчанию отображаются основные тики, что я и пробовал в своих подходах, хотя кажется, что вместо этого отображаются второстепенные тики.

gunk 07.05.2024 19:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, что 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([])

Трудно понять, что происходит, не зная диапазона значений. В общем, если отображаются только второстепенные тики, диапазон чрезвычайно ограничен (внутри диапазона нет степени 10), и имеет смысл не использовать норму журнала.

JohanC 07.05.2024 20:14

Диапазон возможных значений обычно находится в пределах от 0 до 2048, однако эффективный диапазон ранее не известен (зависит от эксперимента). В данном конкретном случае у меня очень маленький диапазон. Я буду иметь это в виду.

gunk 07.05.2024 21:28

Другие вопросы по теме