2017-08-21 61 views
0

我跟隨此鏈接example,因爲我有類似的情況,我試圖在同一圖中繪製兩個數據幀。我只想更改其中一個數據框的線型,該數據框在圖中起作用,但無法在圖例中正確顯示。ggplot2在圖例中錯誤地顯示線型

示例數據集:

set.seed(456) 
n <- 20 
dfr <- data.frame(
    id=rep(1:n, 2), 
    group=rep(c("1","2"), each=n), value=c(rnorm(n), rnorm(n, sd=1.1)) 
) 

df_95ci <- data.frame(y_values=c(-1,1)*qnorm(0.95)) 
df_99ci <- data.frame(y_values=c(-1,1)*qnorm(0.99)) 

require(ggplot2) 

代碼:

ggplot(data=dfr, mapping=aes(x=id, y=value)) + 
    geom_line(mapping=aes(colour=group)) + 
    geom_hline(data= df_95ci, mapping=aes(yintercept=y_values, size= "95% CI"), colour = "orange", linetype="dotdash") + 
    geom_hline(data= df_99ci, mapping=aes(yintercept=y_values, size= "99% CI"), colour = "darkred", linetype="dotted") + 
    scale_color_hue("Group") + 
    scale_size_manual(
    "CI horizontal line", values=rep(1,4), 
    guide=guide_legend(override.aes = list(colour=c("orange", "darkred"))) 
) + 
    scale_linetype_identity(guide="legend") 

Output

正如你可以看到我有兩行不同的線型,但他們是傳說中的相同。

+0

簡單的解決辦法就是進行標記,你做了'大小=以同樣的方式'的審美觀裏面,添加一個'scale_linetype_manual'你做的大小以同樣的方式。 – Brian

回答

1

你想要這個嗎?

ggplot(data=dfr, mapping=aes(x=id, y=value)) + 
    geom_line(mapping=aes(colour=group)) + 
    geom_hline(data= df_95ci, mapping=aes(yintercept=y_values, linetype= "95% CI"), 
       colour = "orange", size = 1) + 
    geom_hline(data= df_99ci, mapping=aes(yintercept=y_values, linetype= "99% CI"), 
       colour = "darkred", size = 1) + 
    scale_linetype_manual(
     "CI horizontal line", values=c("95% CI" = 4, "99% CI" = 3), 
     guide=guide_legend(override.aes = list(colour=c("orange", "darkred"))) 
    ) 

enter image description here

+0

謝謝你的工作。我自己的圖形/代碼稍微複雜一些,在「WHO 2007增長參考」(http://i.imgur.com/RYR3Xex.png)中未顯示的線型存在一些困難,但我設法使其工作從這裏採取一些靈感(https://stackoverflow.com/questions/20378276/legend-does-not-show-line-type-in​​-ggplot2-density-plot)。 對於其他人:如果在幾何圖形中有一個alpha參數,則在調整圖例時,alpha值是一個討厭的東西。最好先禁用它,看看是否導致消失的線型/其他圖例指標。 –

+0

@VYu對你有好處! –