2015-09-26 2 views
2

Поскольку я хочу сравнить несколько распределений, я создаю гистограммы той же переменной, но для разных лет. Однако масштаб оси y изменяется, поскольку самая высокая точка частот различна с каждым годом. Я хочу создать гистограммы, в которых все оси y отображают один и тот же диапазон, даже если для этой точки нет частот.Гистограмма: Изменить масштаб оси y

Точнее, за один год пик распределения составляет 30 отсчетов, а в другом году он равен 35. На графиках 30 выглядит так же, как 35 в другом, потому что изменяется масштаб оси y.

Я пробовал ylim = (35), но это приводит только к ошибке «недопустимое значение для ylim».

Спасибо!

+1

вы должны дать нижний и верхний предел .... попробуйте 'ylim = с (0, 35)'. (Вы также можете позволить 'ggplot' выполнять некоторые из этих работ для вас ...' ggplot (yourdataframe, aes (yourvariable)) + geom_histogram() + facet_grid (. ~ Год) ' – user20650

ответ

7

Введите ?hist в свою консоль, чтобы увидеть документацию. Вы увидите, что ylim для «диапазон ... значений y». Приведен пример, показывающий, как используется ylim, hist(x, freq = FALSE, ylim = c(0, 0.2)). Там вы можете увидеть, что вам нужно дать ylim вектор, содержащий нижний предел и верхний предел.

С гистограммой вы почти всегда хотите, чтобы нижний предел был равен нулю (отказ сделать это обычно рассматривается как статистический грех). Так, как указано в комментариях выше, вы можете сделать с настройкой ylim=c(0,35).

образца с минимальным, например:

#Sets frequencies with which x and y data will appear 
yfreq <- c(1:10, 10:1) #frequencies go up to 10 and down again 
xfreq <- c(1:7, rep(7, times=6), 7:1) #frequencies go up to 7 and down again 

xdata <- rep(1:length(xfreq), times=xfreq) 
ydata <- rep(1:length(yfreq), times=yfreq) 

par(mfrow=c(2,2)) 
hist(ydata, breaks=((0:max(ydata)+1)-0.5), ylim=c(0,10), 
    main="Hist of y with ylim set") 
hist(xdata, breaks=((0:max(xdata)+1)-0.5), ylim=c(0,10), 
    main="Hist of x with ylim set") 
hist(ydata, breaks=((0:max(ydata)+1)-0.5), 
    main="Hist of y without ylim set") 
hist(xdata, breaks=((0:max(xdata)+1)-0.5), 
    main="Hist of x without ylim set") 

Histograms in R with and without setting ylim

Таким образом установка ylim соответственно делает сравнение бок о бок с гистограммой работы лучше.

На практике это удобно делать автоматически, просто обнаружив, что является самым высоким пиком в ваших наборах данных и использует это в вашем ylim. Как вы это делаете, зависит от того, строите ли вы гистограмму частот (это то, что R делает автоматически, если ваши разрывы равноудалены, если вы не указали иначе) или плотности, но один из способов заключается в создании —, но не в графике — объектов гистограммы и извлеките либо их counts, либо их density, если необходимо.

#Make histogram object but don't draw it 
yhist <- hist(ydata, breaks=((0:max(ydata)+1)-0.5), plot=FALSE) 
xhist <- hist(xdata, breaks=((0:max(xdata)+1)-0.5), plot=FALSE) 

#Find highest count, use it to set ylim of histograms of counts 
highestCount <- max(xhist$counts, yhist$counts) 
hist(ydata, breaks=((0:max(ydata)+1)-0.5), ylim=c(0,highestCount), 
    main="Hist of y with automatic ylim") 
hist(xdata, breaks=((0:max(xdata)+1)-0.5), ylim=c(0,highestCount), 
    main="Hist of x with automatic ylim") 

#Same but for densities 
highestDensity <- max(xhist$density, yhist$density) 
hist(ydata, breaks=((0:max(ydata)+1)-0.5), 
    freq=FALSE, ylim=c(0,highestDensity), 
    main="Hist of y with automatic ylim") 
hist(xdata, breaks=((0:max(xdata)+1)-0.5), 
    freq=FALSE, ylim=c(0,highestDensity), 
    main="Hist of x with automatic ylim") 

Side by side histograms in R with automatic y limits on frequency or density