Установить пределы оси в Matplotlib, но в них автоматически масштабировать - PullRequest
0 голосов
/ 04 февраля 2019

Можно ли установить максимальное и минимальное значения оси в matplotlib, но затем автоматически масштабировать, когда значения намного меньше этих пределов?

Например, я хочу, чтобы график процентного изменения былограничен от -100 до 100, но многие из моих графиков будут, скажем, от -5 до 5. Когда я использую ax.set_ylim(-100, 100), этот график очень неясен.

Полагаю, я мог бы использовать что-то вроде ax.set_ylim(max((-100, data-n)), min((100, data+n))), но есть ли более встроенный способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Если вы хотите отбросить экстремальные выбросы, вы можете использовать функцию numpy quantile, чтобы найти, скажем, первые 0,001% данных и последние 99,999%.

near_min = np.quantile(in_data, 0.0001)
near_max = np.quantile(in_data, 0.9999)
ax.set_ylim(near_min, near_max)

Вынужно будет настроить квантиль в зависимости от объема данных, которые вы перетаскиваете.Возможно, вы захотите включить некоторые проверки того, является ли разница между near_min и true min значимой?

0 голосов
/ 04 февраля 2019

Как указано в ImportanceOfBeingErnest , эта функция не поддерживается.В конце я просто использовал свою оригинальную идею, но масштабировал ее по значению max и min, чтобы создать впечатление автомасштабирования.

ax.set_ylim(max((-100, data_min+data_min*0.1)), min((100, data_max+data_max*0.1)))

Где для моего случая верно, что

data_min <= 0, data_max >= 0
0 голосов
/ 04 февраля 2019

Почему бы просто не устанавливать пределы оси на основе диапазона данных при каждом обновлении графика?

ax.set_ylim(min(data), max(data))

Или проверить, находится ли диапазон данных ниже некоторого порога, а затем установить пределы оси.

if min(abs(data)) < thresh:
    ax.set_ylim(min(data), max(data))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...