Незначительные галочки отображаются неправильно

#python #matplotlib #label #colorbar

Вопрос:

Со следующим кодом я получаю цветовую панель с минимальным значением 1 (значение 0 прозрачно из mincnt=1 -за hexbin() метода). Незначительные галочки отображаются корректно.

 import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

# Create figure
fig = plt.figure(figsize=(3, 2))

# Data
vals_x = np.random.standard_normal(10000)
vals_y = np.random.standard_normal(10000)

# Plot data
ax = plt.subplot(111)
h = ax.hexbin(vals_x, vals_y, gridsize=40, extent=(-2, 2,-2, 2), 
              mincnt=1, cmap=cm.viridis_r, edgecolors='k', lw=0.025)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)

# Show colorbar
axin = ax.inset_axes([0.02, 0.57, 0.03, 0.4])
cbar = plt.colorbar(h, cax=axin)
cbar.ax.tick_params(which='major', size=6, width=0.5)
cbar.ax.tick_params(which='minor', size=3, width=0.3)
ticks = cbar.get_ticks()
if False:
    ticks = np.insert(ticks, 0, 1) # add 1
cbar.set_ticks(ticks)
cbar.minorticks_on()
 

введите описание изображения здесь

Однако, если я добавлю «1» в качестве первого основного тика (переключившись False на True в приведенном выше коде), второстепенные тики больше не отображаются должным образом.
введите описание изображения здесь

Есть идеи, как это исправить? Спасибо!

Ответ №1:

Импорт мультиплексора с from matplotlib.ticker import MultipleLocator помощью и добавление cbar.ax.yaxis.set_minor_locator(MultipleLocator(ticks[1]/5)) решает проблему. Однако это ничего не объясняет.