2014-05-02 38 views
2

我想創建一個多面線圖。在每個子圖中,將一個y值(y1或y2)與基線進行比較。 y值和基線應該用不同的顏色來顯示,但是這種配色方案應該在每個子圖中保持一致。作爲一個圖例,我只需要2個條目:「y值」和「基線」,因爲每個子圖的標題指定要比較的y值。ggplot2:與基線的多面線圖

然而,我只有這個(示例代碼):

library(ggplot2) 
library(reshape) 

df = data.frame(c(10,20,40),c(0.1,0.2,0.3),c(0.1,0.4,0.5),c(0.05,0.1,0.2)) 
names(df)[1]="classes" 
names(df)[2]="y1" 
names(df)[3]="y2" 
names(df)[4]="baseline" 
df$classes <- factor(df$classes,levels=c(10,20,40), labels=c("10m","20m","40m")) 

dfMelted <- melt(df) 
diagram <- ggplot() 
diagram <- diagram + theme_bw(base_size=16) 
diagram <- diagram + geom_point(data=dfMelted, size=4, aes(x=factor(classes),y=value, colour=variable, shape=variable)) 
diagram <- diagram + geom_line(data=dfMelted, aes(x=factor(classes),y=value, group=variable, colour=variable)) 
diagram <- diagram + facet_wrap(~ variable, ncol=1) 
diagram 

,這是它的外觀到目前爲止: Not exactly what I want

我試圖創建組,每組包含一個Y型數據集和重複的基準數據。然後,我使用組列的方式進行分組。不幸的是,這導致使用許多不同的顏色和巨大的傳奇。有沒有更好的方法來做到這一點?

+1

是'classes'真正明確的或者是數字的,但你只需要「10米」等軸標籤? – eipi10

+0

這確實是一個範疇。該示例來自機器學習領域,其中類別表示不同的訓練集。 – Chris

回答

4

這是你想到的嗎?

df = data.frame(classes=c(10,20,40), y1=c(0.1,0.2,0.3), y2=c(0.1,0.4,0.5), 
       baseline=c(0.05,0.1,0.2)) 
df$classes <- factor(df$classes, levels=c(10,20,40), 
       labels=c("10m","20m","40m")) 

# Two melts to create a grouping variable for baseline vs. new value (y1 or y2) 
# and another grouping variable for faceting on y1/y2 
dfm=melt(df, id.var=c(1,4)) 
names(dfm)[3] = "y_value" 
dfm=melt(dfm, id.var=c(1,3)) 

ggplot(dfm, aes(x=classes, y=value, group=variable, colour=variable)) + 
    geom_point() + geom_line() + 
    theme_bw(base_size=16) + 
    facet_grid(. ~ y_value) 

enter image description here

+0

這就是我正在尋找的。我在格式化原始數據方面遇到了很大的困難,所以非常感謝您的優雅融解! – Chris

1

您可能正在尋找scale_colour_manual功能:

ggplot() + 
    geom_point(data=dfMelted, size=4, aes(x=factor(classes),y=value, colour=variable, shape=variable)) + 
    geom_line(data=dfMelted, aes(x=factor(classes),y=value, group=variable, colour=variable)) + 
    scale_colour_manual(values = c("y1" = "red","baseline" = "blue","y2" = "green")) + 
    theme_bw(base_size=16) + 
    facet_grid(variable ~.) 

導致: enter image description here

+0

謝謝,但eipi10的解決方案完成了這項工作,無需手動格式化。 – Chris