2015-08-09 2 views
1

Я использую набор данных алмазов, который поставляется с ggplot2 и создаёт гистограммы ценового поля. Вы можете загрузить набор данных с помощьюРисование вертикальных пиковых линий в гистограмме с использованием qplot() в R

install.packages(ggplot2) 
data(diamonds) 

Я пытаюсь проанализировать пиковые значения в гистограмме, который я создал, используя эту строку

qplot(price, data = diamonds, geom = "histogram", col = 'blues') 

enter image description here

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

+0

Я думаю, вам нужно определить, что вы подразумеваете под «пиковой» линией. где строка (строки) будет в этом примере? – hrbrmstr

+0

Горизонтальная линия? вертикальная линия? другая линия? Независимо от того, простой ответ будет состоять в том, чтобы преобразовать ваши данные в то, что вы хотите построить, а затем заговорить, а не полагаться на ggplot (который представляет собой пакет построения, который просто выполняет некоторые базовые преобразования) для вашего формирования данных. – Gregor

+0

Я просто хочу построить вертикальную линию везде, где есть пиковое значение (соответствующее оси y). @ Грегор, не могли бы вы привести мне пример, это будет очень полезно. – python

ответ

2

Ручной способ: вы можете извлечь информацию о гистограмме с помощью ggplot_build. Затем найдите максимальное значение y и x-местоположение соответствующего столбца в гистограмме.

library(ggplot2) 
data(diamonds) 

## The plot as you have it 
q <- qplot(price, data = diamonds, geom = "histogram", col = 'blues') 

## Get the histogram info/the location of the highest peak 
stuff <- ggplot_build(q)[[1]][[1]] 

## x-location of maxium 
x <- mean(unlist(stuff[which.max(stuff$ymax), c("xmin", "xmax")])) 

## draw plot with line 
q + geom_vline(xintercept=x, col="steelblue", lty=2, lwd=2) 

enter image description here

Y-значение в этом месте является

## Get the y-value 
max(stuff$ymax) 
# [1] 13256 

Другим вариант использование stat_bin, должен дать те же результаты, что и выше, но это более неясные из-за скрытые переменными.

q + stat_bin(aes(xend=ifelse(..count..==max(..count..), ..x.., NA)), geom="vline", 
      color="steelblue", lwd=2, lty=2)