Перекрывающиеся тики при использовании пользовательских тиков

РЕДАКТИРОВАТЬ: я удалил все из кода, что в конечном итоге не нужно. Ошибка все еще сохраняется с MultipleLocator, однако не отображается с MaxNLocator.

В настоящее время я застрял с небольшой визуальной ошибкой, которая произошла, когда я обновился до matplotlib 1.4.3. Я использую Python 2.7.3 на Ubuntu 12.04. У меня есть один ряд, два столбца сюжет с двумя тепловыми картами. Оба вынуждены использовать один и тот же диапазон значений для карты цветов. Я нормализую цветовую карту так, чтобы абсолютные значения vmin и vmax были равны, но имели противоположные знаки. Когда я пытаюсь использовать теперь пользовательские тики, сгенерированные MaxNLocator или MultipleLocator, на одном или обоих краях цветовой панели отображаются два перекрывающихся тика.

Вот минимальный код для воспроизведения проблемы:

#setup
#make scripts executable when logged in per ssh (no x-window)
import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')
#other setup
import numpy as np
import matplotlib.pyplot as plt
import argparse
from matplotlib import ticker
from matplotlib.colors import Normalize
#
class MidpointNormalize(Normalize):
    def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
        self.midpoint = midpoint
        Normalize.__init__(self, vmin, vmax, clip)

    def __call__(self, value, clip=None):
        # I'm ignoring masked values and all kinds of edge cases to make a
        # simple example...
        x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
        return np.ma.masked_array(np.interp(value, x, y))
#first row first column plot
fig, axes = plt.subplots(nrows=1, ncols=2)
#plt.subplot(121)
#declare filename
data = np.random.rand(10,10)
data2 = np.random.rand(10,10)
cmapmin = -0.4
cmapmax = 0.4
cmap="jet"
norm = MidpointNormalize(midpoint=0.0, vmin=cmapmin, vmax=cmapmax)
axes[0].pcolor(data, edgecolors='k', vmin=cmapmin, vmax=cmapmax, cmap=cmap, norm=norm)
im = axes[1].pcolor(data2, edgecolors='k', vmin=cmapmin, vmax=cmapmax, cmap=cmap, norm=norm)
#give room for colorbar
fig.subplots_adjust(bottom=0.1, wspace=0.1, hspace=0.1)
cbar_ax = fig.add_axes([0.1, 0.95, 0.8, 0.04])
cb = fig.colorbar(im, cax=cbar_ax, orientation='horizontal')
#only use limited number of ticks as specified
tick_locator = ticker.MaxNLocator(nbins=8)
#set ticks every specified tickrange 
#tick_locator = ticker.MultipleLocator(base=0.1)
cb.locator = tick_locator
cb.update_ticks()
#save file
fig.savefig("example1.png")

Теперь example1.png выглядит так:используя MaxNLocator

Когда я закомментирую строку tick_locator = ticker.MaxNLocator(nbins=8) и использовать вместо tick_locator = ticker.MultipleLocator(base=0.1) изображение (example2.png) выглядит так:

используя MultipleLocator

Надеюсь, мой пересмотренный вопрос поможет вам встать на правильный путь.

Я был бы очень благодарен за любой ввод, приводящий к решению этой ошибки, так как до сих пор мой единственный другой вариант - использовать MaxNLocator с prune="both", чтобы обрезать отметки края. заранее спасибо

0 ответов

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