Пользовательская настройка масштаба оси Matplotlib

Я рисую из фрейма данных pandas с такими командами, как

fig1 = plt.hist(dataset_1[dataset_1>-1.0],bins=bins,alpha=0.75,label=label1,normed=True) 

и графики содержат несколько гистограмм на одном холсте. Поскольку каждая гистограмма нормирована на собственный интеграл (следовательно, гистограммы имеют одинаковую площадь, поскольку цель гистограмм — проиллюстрировать форму наборов данных, а не их относительные размеры), числа на оси y не имеют смысла. На данный момент я подавляю маркировку оси Y, используя

axes.set_ylabel("(Normalised to unity)")

axes.get_yaxis().set_ticks([])

Есть ли способ настроить масштабирование оси Y таким образом, чтобы «1» соответствовало максимальному значению на любой гистограмме? Это будет отображать вертикальную шкалу, чтобы направлять взгляд и с помощью которой можно судить об относительных значениях различных ячеек. По сути, я имею в виду повторную нормализацию максимального отображаемого значения y без влияния на масштабирование гистограмм (т.е. отделение масштаба оси от того, что оно представляет).


person Gavin Kirby    schedule 25.01.2018    source источник


Ответы (1)


У вас есть два варианта:

Отрисовка гистограммы, регулировка галочки по оси Y.

Вы можете установить галочку y на место максимума и затем пометить его 1.

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt

a = np.random.rayleigh(scale=3, size=2000)

hist, edges,_ = plt.hist(a, ec="k")
plt.yticks([0,hist.max()], [0,1])

plt.show()

Нормализация гистограммы, рисование в масштабе.

Вы можете нормализовать гистограмму по своему усмотрению, сначала вычислив гистограмму, разделив ее на максимум, а затем построив ее гистограмму.

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt

a = np.random.rayleigh(scale=3, size=2000)

hist, edges = np.histogram(a)
hist = hist/float(hist.max())

plt.bar(edges[1:], hist, width=np.diff(edges)[0], align="edge", ec="k")
plt.yticks([0,1])

plt.show()

Вывод в обоих случаях будет одинаковым:

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

person ImportanceOfBeingErnest    schedule 25.01.2018
comment
Нет, синтаксис не идентичен. Также см. этот ответ здесь. - person ImportanceOfBeingErnest; 31.01.2018