Я создаю изображение, используя функцию ниже. Поскольку позже я хочу интегрировать его в окно, я меняю цвет фона, и в результате текст не отображается с цветом по умолчанию. Я хочу изменить метки галочек на моей цветовой панели, чтобы они отображались белым (или любым контрастным цветом).
Ниже вы можете увидеть, чем я сейчас занимаюсь:
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, поэтому он должен работать. Я также пробовал с «белым». Я пробовал искать другие аргументы/методы для осей или меток тиков, включая перебор тиков в цикле, но ничего не помогло.
Вот пример сгенерированного изображения
Любое другое изменение цвета в функции работает, кроме изменения цвета галочек.
в примере кода есть неопределенные переменные. для вопроса требуется достаточный код для минимально воспроизводимого примера
@JohanC Действительно cbar.ax.tick_params(which='both', color='white', labelcolor='white')
, похоже, решил проблему. Кажется, что нацеливание на второстепенные галочки решает проблему. У меня сложилось впечатление, что на цветовой полосе по умолчанию отображаются основные тики, что я и пробовал в своих подходах, хотя кажется, что вместо этого отображаются второстепенные тики.
Похоже, что 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), и имеет смысл не использовать норму журнала.
Диапазон возможных значений обычно находится в пределах от 0 до 2048, однако эффективный диапазон ранее не известен (зависит от эксперимента). В данном конкретном случае у меня очень маленький диапазон. Я буду иметь это в виду.
Пробовали
cbar.ax.tick_params(which='both', color='white', labelcolor='white')
? При логарифмической норме неизвестного диапазона, возможно, будут видны только незначительные тики. Обратите внимание, что ваш код не воспроизводим, поэтому трудно угадать, что именно происходит. Поскольку шестиугольники не важны для цветовой панели, вы можете удалить много кода и создать настоящий минимальный воспроизводимый пример.