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


Я создал этот сюжет с помощью Matlab

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

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

4 60

4 ответа:

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

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

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

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

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

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 rcParams) или путем устанавливать их сразу. Я не нашел более элегантного способа изменения между " 1e " и "x10^" научной нотацией, чем:

ax.xaxis.major.formatter._useMathText = True

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

rc('text', usetex=True)

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

класс matplotlib.Тикер.ScalarFormatter(useOffset=True, useMathText=False, useLocale=None) базы: matplotlib.Тикер.Форматер

ТИК расположение-это простой старый номер. Если useOffset= = True и данные диапазон намного меньше среднего значения данных, тогда смещение будет определяется таким образом, что метки тиков имеют смысл. Научный обозначение используется для данных = 10^m, где n и m - ограничения мощности задаются с помощью set_powerlimits ((n,m)). Значения по умолчанию для они находятся под контролем оси.форматер.ограничивает параметр 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

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

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