2015-06-04 4 views
1

Если я сюжет логарифмическая шкала графика, Matplotlib дает мне хорошо выглядящий записей из 10 , 10 ...Как изменить формат метки оси в Matplotlib

Для удобочитаемости I однако предпочли бы форму 1e5, 1e6, ...

Могу ли я напрямую настроить свойства оси таким образом?

Я довольно некрасиво хак бы:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(1, 40, 100); 
y = np.linspace(1, 5, 100); 

# Actually plot the exponential values 
plt.plot(x, 10**y) 
ax = plt.gca() 
ax.set_yscale('log') 

# Rewrite the y labels 
y_labels = ax.get_yticks() 
ax.set_yticklabels(['1e%i' % np.round(np.log(y)/np.log(10)) for y in y_labels]) 

plt.show() 

enter image description here

Но, конечно же, должно быть лучше.

+0

Там, наверное, каким-то образом с помощью [ 'ticker'] (http://matplotlib.org /api/ticker_api.html) и 'FormatStrFormatter' – tom

ответ

4

Вы используете ticker.FormatStrFormatter('%0.0e'). Это форматирует каждое число с форматом %0.0e строки, которая представляет поплавки с использованием экспоненциального обозначения:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker as ticker 

x = np.linspace(1, 40, 100) 
y = np.linspace(1, 5, 100) 

# Actually plot the exponential values 
fig, ax = plt.subplots() 
ax.plot(x, 10**y) 
ax.set_yscale('log') 

# Rewrite the y labels 
y_labels = ax.get_yticks() 
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%0.0e')) 

plt.show() 

дающий

enter image description here

+0

Отлично, именно то, что я искал. Вам не удалось определить способ форматирования '1e + 04' на' 1e4'? –

+0

К сожалению, для управления этим [вам нужно будет написать пользовательскую функцию] (http://stackoverflow.com/q/9910972/190597). Если вы хотите пойти по этому пути, обратите внимание, что вы можете использовать 'ticker.FuncFormatter'. – unutbu

+0

Ну да, вот что я подумал. Но, в любом случае, спасибо за помощь. –

Смежные вопросы