2012-06-19 108 views
12

我有這五(5)geom_vline()在我的情節,我希望他們有不同的顏色。有沒有辦法做到這一點?ggplot2:如何有不同的顏色geom_vline()

這裏是我的代碼,

library(ggplot2) 

x <- seq(-7, 8, length = 90) 
tvalues <- dt(x,15) 

qplot(x, tvalues) + geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
    geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) + 
    geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = "red") + theme_bw() + xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) + 
    ylab(expression(bold(P(x)))) + 
    opts(title = expression(bold("Student t Distribution")), plot.title = theme_text(size = 20, colour = "darkblue"), 
     panel.border = theme_rect(size = 2, colour = "red")) 

這裏是輸出,

enter image description here

注意的五條縱中的情節線,我希望每個那些線有不同的顏色,

我試過這個

library(colorRamps) 
geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = matlab.like(5)) 

,但沒有工作,另一種嘗試

geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155, 
    0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = c("red","blue","green","yellow","orange")) 

,仍然不成功。

在此先感謝!

回答

26

所以你有點失蹤背後GGPLOT2的基本思想,這就是你總是把所有的數據到一個data.frame和每一個你在你的數據幀映射對應於可變美感。

您可以得到5條垂直線,每條線都有不同的顏色,並且有五個獨立的電話號碼geom_vline,但是卻忽略了整個包裹的重點。相反,你創建一個數據幀:

a <- c(-2.27685371,0.01661155,0.33598194,1.92426022) 
vlines <- data.frame(xint = c(a,mean(a)),grp = letters[1:5]) 

我已經明確創建分組變量grp映射到colour。然後,我們使用aes添加圖層和地圖美學對這些變量:

qplot(x, tvalues) + 
    geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) + 
    geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) + 
    geom_vline(data = vlines,aes(xintercept = xint,colour = grp), linetype = "dashed") + 
    theme_bw() + 
    xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) + 
    ylab(expression(bold(P(x)))) + 
    opts(title = expression(bold("Student t Distribution")), 
     plot.title = theme_text(size = 20, colour = "darkblue"), 
     panel.border = theme_rect(size = 2, colour = "red")) 

(顏色將是很難區分,因爲他們是虛線,和他們兩個幾乎是對彼此的頂部)。

如果從qplotggplot()過渡,並開始把你的數據轉換成數據幀,而不是載體,你會得到更多的出GGPLOT2

+0

恩,謝謝提醒:)我應該想到這一點。非常感謝!你節省了我的時間:) –

+0

非常感謝你@joran! –

+0

這是一個很好的答案,它給了我做類似的正確方向。我需要將geom_hlines添加到具有不同組的情節的平均值。我的意思是按組描述,並使用geom_hline。不同之處在於我使用「linetype = grp」具有不同的線型,並且它位於aes呼叫中,而不是像這裏所示的那樣位於外部。 – Eduardo

1

如果您只想放置一條線,則添加以下geom將以紅色和虛線在x=1處添加垂直線。

+ geom_vline(aes(xintercept=1), colour="#BB0000", linetype="dashed") 
相關問題