Как добавить вручную или автоматически отсутствующую метку y на оси y, которая не является равномерной по отношению к другим регулярным интервалам - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий рисунок:

colormap with starting value not showing on y-axis

Я сделал это следующим скриптом Python:

# Colormap plot
im = ax.imshow(np.log10(np.abs(matrixCl_der_transposed)), extent = [1e-8, 1e-1, 10, 5000], origin='lower',\
               aspect = 'auto', interpolation = 'none', cmap = 'viridis')

# Increase space between x-axis and x-label
ax.tick_params(axis = 'x', which = 'major', pad = 15) 

# Add lower multipole l = 10
y_label_list = ['10', '1000', '2000', '3000', '4000', '5000']
ax.set_yticks = [10, 1000, 2000, 3000, 4000, 5000]
ax.set_yticklabels(y_label_list)

# Log scal for step
plt.xscale('log')

# Title 
plt.title('$\log_{10}|(C_{l}\')|$ of '+paramLatexArray[idParam]+' at $z$ = '+\
           str(zrange[idRedshift]), fontsize = 24, pad = 25) 

# Lebels on axis
plt.xlabel('step', fontsize = 20) 
plt.ylabel('$l$ multipole', fontsize = 20) 
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.grid()


# Color bar 
clb = plt.colorbar(im)
clb.ax.set_title('$\log_{10}|(C_{l}\')|$', fontsize = 20, pad = 12) 
clb.ax.tick_params(labelsize = 16) 
tick_locator = ticker.MaxNLocator(nbins=15)
clb.locator = tick_locator
clb.update_ticks()

Как вывидите, я попытался явно добавить нижнее значение (начало координат, равное 10) оси Y, выполнив:

# Add lower multipole l = 10
y_label_list = ['10', '1000', '2000', '3000', '4000', '5000']
ax.set_yticks = [10, 1000, 2000, 3000, 4000, 5000]
ax.set_yticklabels(y_label_list)

Но, к сожалению, это нижнее значение не отображается слеванижняя часть сюжета. Значения 1000, 2000, 3000, 4000 и 5000 показываются, но не для значения 10.

Причиной этой проблемы является опция extent = [1e-8, 1e-1, 10, 5000] из imshow?

Я не знаю, что делать, чтобы автоматически добавить это более низкое значение, если бы у кого-то было решение, это было бы неплохо.

С уважением

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

Как прокомментировано, вы уничтожили метод set_yticks, присвоив ему список, а не вызывая его. Также помните, что позиции тиков не должны быть строками.

y_label_list = [10, 1000, 2000, 3000, 4000, 5000]
ax.set_yticks(y_label_list)
ax.set_yticklabels(y_label_list)
0 голосов
/ 14 ноября 2019

Как прокомментировал @ImportanceOfBeingErnest, set_yticks - это функция, а не свойство. Вы должны вызвать его и передать ему список меток, например:

y_label_list = ['10', '1000', '2000', '3000', '4000', '5000']
ax.set_yticks(y_label_list)

Документация

...