2015-11-12 2 views
2

Итак, я довольно новый программист на языке python и застрял на этой второстепенной проблеме дольше, чем должен быть. I have this plot, и, как вы видите, только избранные значения отображаются как научная нотация.Настройка пользовательских imshow тиков будет выглядеть как научная нотация

Я хотел бы, чтобы все значения появляются в научной нотации (т.е. 1E1, 1E2 ... и так далее) Вот одна из попыток (многих), которые я пробовал:

fig2 = plt.figure(2) 
ax = plt.gca() 

plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0)) 
plt.xlabel('gamma') 
plt.ylabel('C') 
plt.imshow(scores, interpolation='nearest', cmap=plt.cm.hot, 
      norm=MidpointNormalize(vmin=0.2, midpoint=0.7)) 
plt.colorbar()   
ax.set_yticks(range(len(C_range))) 
ax.set_yticklabels(C_range) 
ax.set_xticks(range(len(gamma_range))) 
ax.set_xticklabels((gamma_range), rotation=45) 

plt.title('Validation accuracy') 
plt.tight_layout() 
fig2.show() 

линии # 3 в коде выше, кажется, ничего не делает, поэтому я думал, что смогу переместить его после части «set_xticks», так как я предполагаю, что эти строки перезаписывают команду ticklabel_format. Так усталым следующее:

fig2 = plt.figure(2) 
ax = plt.gca() 

plt.xlabel('gamma') 
plt.ylabel('C') 

plt.imshow(scores, interpolation='nearest', cmap=plt.cm.hot, 
      norm=MidpointNormalize(vmin=0.2, midpoint=0.7)) 
plt.colorbar()   
ax.set_yticks(range(len(C_range))) 
ax.set_yticklabels(C_range) 
ax.set_xticks(range(len(gamma_range))) 
ax.set_xticklabels((gamma_range), rotation=45) 
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0)) 
plt.title('Validation accuracy') 
plt.tight_layout() 
fig2.show() 

Какие результаты в:

AttributeError: This method only works with the ScalarFormatter.

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

Не могли бы вы объяснить, что именно здесь происходит? Изменяет ли ax.set_yticks форматтер? Я явно не выбрал форматировщик, это то, что мне нужно сделать? И как я могу заставить это сделать то, что я ищу?

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

+0

Я также играть arounf с MPL тикер библиотеки, например: 'mtick.ScalarFormatter. set_scientific (mtick.ScalarFormatter(), True) mtick.ScalarFormatter.set_powerlimits (mtick.ScalarFormatter(), (0,0)) ' , но он, кажется, ничего не делает. Мне трудно докучать документы на ScalarFormatter. –

ответ

0

Итак, я нашел работу для своих нужд, хотя именно поэтому xticks/yticks перезаписывает форматтер вне меня. Если кто-то захотел прояснить это для меня, я все уши, так как меня интересует, как это работает.

Я просто изменил мои C_range и gamma_range массивы списками строк и передать их в xticks/yticks

fmt_C = ['%.0e' % i for i in C_range.tolist()] 
fmt_gamma = ['%.0e' % i for i in gamma_range.tolist()] 

plt.xticks(np.arange(len(gamma_range)), fmt_gamma, rotation=45) 
plt.yticks(np.arange(len(C_range)), fmt_C) 
Смежные вопросы