2015-08-09 218 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)