Подтвердить что ты не робот

Изменить масштаб осей x в matplotlib

Я создал этот график, используя Matlab

enter image description here

Используя matplotlib, x-axies рисует большие числа, такие как 100000, 200000, 300000. Я хотел бы иметь что-то вроде 1, 2, 3 и 10 ^ 5, чтобы указать, что это фактически 100000, 200000, 300000.

Есть ли простой способ создать такой масштаб в matplotlib?

4b9b3361

Ответ 1

Попробуйте использовать matplotlib.pyplot.ticklabel_format:

import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))

Это относится к научной нотации (т.е. a x 10^b) к вашим метокам x-axis

Ответ 2

Это не столько ответ на ваш первоначальный вопрос, сколько один из вопросов, которые у вас были в теле вашего вопроса.

Маленькая преамбула, так что мое имя не кажется странным:

import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )

Как уже упоминалось, вы можете использовать ticklabel_format, чтобы указать, что matplotlib должен использовать научную нотацию для больших или малых значений:

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')

Вы можете повлиять на то, как это отображается с помощью флагов в rcParams (из matplotlib import rcParams) или путем установки их непосредственно. Я не нашел более элегантный способ изменения между "1е" и "x10 ^" научной нотацией, чем:

ax.xaxis.major.formatter._useMathText = True

Это должно дать вам больше Matlab-esc и, возможно, лучший внешний вид. Я думаю, что следующее должно сделать то же самое:

rc('text', usetex=True)

Ответ 3

Скалярный форматтер поддерживает сбор экспонентов. Документы выглядят следующим образом:

class matplotlib.ticker.ScalarFormatter(useOffset = True, useMathText = False, useLocale = Нет) Основы: matplotlib.ticker.Formatter

Расположение тиков - это простой старый номер. Если useOffset == True и данные диапазон намного меньше среднего значения данных, тогда смещение будет определяется так, что метки тика имеют смысл. научный нотация используется для данных < 10 ^ -n или data >= 10 ^ m, где n и m являются ограничения мощности, установленные с помощью set_powerlimits ((n, m)). По умолчанию для они управляются параметром axes.formatter.limits rc.

Ваша техника будет:

xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3))  # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)

Чтобы отобразить экспоненту в формате x10^5, создайте экземпляр ScalarFormatter с помощью useMathText=True.

After Image

Вы также можете использовать:

xfmt.set_useOffset(10000)

Чтобы получить такой результат:

enter image description here

Ответ 4

Я нахожу простое решение

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))