Matplotlib, поэтому ось журнала имеет только незначительные метки меток в указанных точках. Также измените размер меток на шкале цветов

Я пытаюсь создать график, но я просто хочу, чтобы метки отображались, как показано, где шкала журнала отображается, как указано выше. Я хочу, чтобы отображалась только второстепенная метка для 50, 500 и 2000. Есть ли способ указать второстепенные метки для отображения? Я пытался немного понять это, но не нашел хорошего решения. Все, о чем я могу думать, - это получить minorticklabels () и установить размер шрифта равным 0. Это показано под первым фрагментом кода. Я надеялся, что есть более чистое решение.

Другая вещь - это изменение размера меток на шкале цветов, чего я не понял. Если кто-нибудь знает способ сделать это, дайте мне знать, потому что я не вижу на панели цветов метод, который бы легко это делал.

Первый код:

fig = figure(figto)
ax = fig.add_subplot(111)
actShape = activationTrace.shape
semitones = arange(actShape[1])
freqArray = arange(actShape[0])
X,Y = meshgrid(self.testFreqArray,self.testFreqArray)
Z = sum(activationTrace[:,:,beg:end],axis=2)
surf = ax.contourf(X,Y,Z, 8, cmap=cm.jet)
ax.set_position([0.12,0.15,.8,.8])
ax.set_ylabel('Log Frequency (Hz)')
ax.set_xlabel('Log Frequency (Hz)')
ax.set_xscale('log')
ax.set_yscale('log')
ax.xaxis.set_minor_formatter(FormatStrFormatter('%d'))
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.tick_params(axis='both',reset=False,which='both',length=8,width=2)
self.plotSetAxisLabels(ax,22)
self.plotSetAxisTickLabels(ax,18)
cbar = fig.colorbar(surf, shrink=0.5, aspect=20, fraction=.12,pad=.02)
cbar.set_label('Activation',size=18)
return ax, cbar

enter image description here

Второй код:

fig = figure(figto)
ax = fig.add_subplot(111)
actShape = activationTrace.shape
semitones = arange(actShape[1])
freqArray = arange(actShape[0])
X,Y = meshgrid(self.testFreqArray,self.testFreqArray)
Z = sum(activationTrace[:,:,beg:end],axis=2)
surf = ax.contourf(X,Y,Z, 8, cmap=cm.jet)
ax.set_position([0.12,0.15,.8,.8])
ax.set_ylabel('Log Frequency (Hz)')
ax.set_xlabel('Log Frequency (Hz)')
ax.set_xscale('log')
ax.set_yscale('log')
ax.xaxis.set_minor_formatter(FormatStrFormatter('%d'))
ax.yaxis.set_minor_formatter(FormatStrFormatter('%d'))
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.tick_params(axis='both',reset=False,which='both',length=8,width=2)
self.plotSetAxisLabels(ax,22)
self.plotSetAxisTickLabels(ax,18)
cbar = fig.colorbar(surf, shrink=0.5, aspect=20, fraction=.12,pad=.02)
cbar.set_label('Activation',size=18)
count = 0
for i in ax.xaxis.get_minorticklabels():
    if (count%4 == 0):
        i.set_fontsize(12)
    else:
        i.set_fontsize(0)
    count+=1
for i in ax.yaxis.get_minorticklabels():
    if (count%4 == 0):
        i.set_fontsize(12)
    else:
        i.set_fontsize(0)
    count+=1
return ax, cbar

enter image description here

Для шкалы цветов: Еще один быстрый вопрос, если вы не возражаете, потому что пытаетесь понять это, но не совсем уверены. Я хочу использовать научную нотацию, которую я могу получить с помощью ScalarFormatter. Как установить количество десятичных знаков и множитель ?? Я бы хотел, чтобы это было как 8x10 ^ 8 или .8x10 ^ 9, чтобы сэкономить место, вместо того, чтобы помещать все эти нули. Я полагаю, что есть несколько способов сделать это внутри объекта axes, но как вы думаете, лучший способ. Я не могу понять, как изменить обозначение при переходе на ScalarFormatter.

Для диаграммы: Кроме того, в моих данных есть точки, начинающиеся с 46, а затем при последовательных умножениях этого числа, умноженного на 2 ^ (1/12), поэтому 46,49,50,55,58,61 ... 3132. Все они округлые, но близки к 2 ^ (1/12). Я решил, что лучше разместить основные тикеры рядом с этими числами. Это лучший способ использовать фиксированное средство форматирования и использовать тикер каждые 15 или около того в freqArray. Затем используйте второстепенный тикер на каждой второй частоте. Могу ли я сделать это и по-прежнему поддерживать ось журнала ??

18
задан Serenity 26 July 2016 в 10:12
поделиться