#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))
решает проблему. Однако это ничего не объясняет.