2012-07-13 148 views
5

多行我想要繪製多行,如GGPLOT2一個「類」的一部分。我可以繪製類似如下:ggplot:一種顏色/

image with 5 classes

但我的問題是,我想說明N1,N2和N3作爲一個單獨的類(灰色細線每個在圖例一個名字) 。

我的問題是,如果我在數據框中創建一個新因子以便將它們分組,我最終將從n1(右上角)的末端到n2(左下角)的開頭繪製添加連接,加在我的圖對角線:

graph with one class

這更接近我想要的東西,但有額外的對角線。如果它很重要,我使用ROCR計算這些值,然後從結果performance對象中提取x和y點,以產生這些行。

+1

如果您提供最小可重現的示例(數據+代碼),這將更容易回答。 – joran 2012-07-13 21:13:10

+0

我同意。不幸的是,我擔心重現這樣一個例子所需的代碼會佔用比實際問題更多的空間。我希望有人能夠認識到這個理論,並且之前已經看到了解決這個問題的方法。 – 2012-07-13 21:19:38

+1

我不明白沒有可重複的例子的問題,但在我看來,在第二個情節中,你可以使用與第一個情節相同的變量來指定「組」美學和顏色的新因素。 – baptiste 2012-07-13 22:31:43

回答

1

這裏有一種方法,但我不認爲你會非常喜歡它:

d1 <- data.frame(x = 1:10, 
       y = rep(1:2,each = 5), 
       grp = factor(rep(letters[1:2],each = 5),levels = letters[1:3])) 
d1 <- rbind(d1,data.frame(x = 1:2,y = c(NA,NA),grp = c('c','c'))) 

d2 <- data.frame(x = 1:15, 
       y = rep(3:5,each = 5), 
       grp = rep(1:3,each = 5)) 

ggplot() + 
    geom_line(data = d1,aes(x = x,y = y,group = grp,colour = grp)) + 
    geom_line(data = d2,aes(x = x,y = y,group = grp),colour = "blue") 

enter image description here

請注意,您的解決方案不會與其他類型的數據很好地工作。恰好在圖例中你想要合併成同一類別的三條線中的每條線都開始和結束於基本相同的位置。如果情況並非如此,最終會出現不必要的連接線。

上面的方法將更普遍地工作,但正如你所看到的並不難。如果有的話更不方便。

這種問題已經出現了很多次,可能是我忘記了一個更簡單的解決方案。但總的來說,請記住,與基本圖形相比,您無需手動構建每個圖例,而是(通常但不總是)犧牲了一些靈活性,以換取ggplot2

+0

謝謝!我會第一個承認我的解決方案不應該被普遍採用。這是一個很好的解決方案 - 在ggplot2中講授關於圖層的新東西 - 但我同意它不太理想。我想我可能會更適合這種情況的'lines',但是我已經使用ggplot2格式化了其餘的圖形,所以我現在要在一致性方面超過方便。再次感謝。 – 2012-07-13 21:43:21

0

當我試圖繪製該圖時,我已經將rbind'物品從ROCR performance對象直接轉換爲data.frame。我意識到我可以通過顛倒中產階級數據的順序來減少從右上角到左下角的旅程。即

n1 <- getPerformance(test1) 
n2 <- getPerformance(test2) 
n3 <- getPerformance(test3) 

將創建3個數據幀尋找像

type x   y 
1 n1 0 0.000000000 
2 n1 0 0.003448276 
3 n1 0 0.006896552 
4 n1 0 0.010344828 
5 n1 0 0.013793103 
6 n1 0 0.017241379 
... 
26565 n1 0.9999619 1 
26566 n1 1.0000000 1 

這裏的問題是,當我rbind N1到n2,我會N1的點(1,1)連接到N2的點( 0,0) - 創建對角線。

在我的情況下,一個(草率)解決方案是隻扭轉每隔一行的順序,以便沒有對角線。

n2_rev <- n2[nrow(n2):1,] 
ns <- rbind(n1,n2_rev,n3) 

所以現在行雲,而不是開始回往復,並在同一位置始終結束,創建如下圖:

desired graph

儘管如此,我認爲有一個更普遍處理這個問題的方法。有沒有一種方法可以將一條線添加到ggplot2圖中,例如基準R的lines()函數?