WedX - журнал о программировании и компьютерных науках

Python – оси matplotlib ограничивают приблизительное местоположение тикера

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

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

Есть ли способ указать, что пределы осей должны быть в определенном диапазоне, но позволить matplotlib выбрать подходящую точку?

Например, следующий код создает красивый график с автоматически установленными пределами по оси Y (0,140,0,165):

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.show()

Сюжет из первого примера кода.

После введения выброса в данные и установки пределов вручную пределы по оси Y устанавливаются чуть ниже 0,145 и чуть выше 0,160 — не так аккуратно и аккуратно.

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.ylim(0.142921640661, 0.160337332636)
plt.show()

Сюжет из второго примера кода.

Есть ли способ указать matplotlib либо игнорировать значение выброса при установке пределов, либо установить оси на «ниже 0,142921640661» и «выше 0,160337332636», но пусть он решит подходящее местоположение? Я не могу просто округлить числа вверх и вниз, так как все мои наборы данных имеют разную шкалу величин.


Ответы:


1

Вы можете сделать свой data маскированным массивом:

from matplotlib import pyplot as plt
import numpy as np

data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
data = np.ma.array(data, mask=False)
data.mask = data>0.16
plt.plot(data)
plt.show()

введите здесь описание изображения

14.05.2013
  • Это не идеальное решение, так как я хочу показать, что выбросы существуют. Я бы предпочел, чтобы он был построен как мой второй пример, но с лучшими ограничениями по осям. 15.05.2013
  • Кроме того, теперь, когда я смотрю на это, пределы по оси Y не установлены правильно. В идеале они должны быть от 0,140 до 0,165. 15.05.2013

  • 2

    unutbu на самом деле дал мне идею, которая решает проблему. Это не самое эффективное решение, поэтому, если у кого-то есть другие идеи, я внимательно слушаю.

    РЕДАКТИРОВАТЬ: я изначально маскировал данные, как сказал unutbu, но на самом деле это не правильно устанавливает оси. Я должен удалить выбросы из данных.

    После удаления выбросов из данных можно нанести оставшиеся значения и получить пределы по оси Y. Затем данные с выбросами можно снова нанести на график, но с установленными пределами из первого графика.

    from matplotlib import pyplot as plt
    
    data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
    cleanedData = remove_outliers(data) #Function defined by me elsewhere.
    plt.plot(cleanedData)
    
    ymin, ymax = plt.ylim()
    plt.clf()
    plt.plot(data)
    plt.ylim(ymin,ymax)
    plt.show()
    
    15.05.2013
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]