簡體   English   中英

使用帶有顏色和線型的 geom_line 時如何避免之字形 plot

[英]How to avoid zig-zag plot when using geom_line with color and linetype

我有一個相對較大的數據集,可以在這里分享。

我正在嘗試 plot 對應於 x = G 上 y 值的所有行(不僅僅是一個:例如平均值或中位數),數據按 I 和 P 分組; 因此變量 I 的水平以不同的顏色出現,而變量 P 的水平以不同的線型出現。

我遇到的問題是我得到的圖形是沿 x 軸的之字形折線圖。 顯然,目的是為每個數據組合設置一條線,避免曲折。 我讀過這個問題可能與數據的分組方式有關。 我嘗試了幾種使用group進行數據分組的組合,但我無法解決問題。

我使用的代碼如下:

#Selecting colours
colours<-brewer.pal(n = 11, name = "Spectral")[c(9,11,1)]    

#Creating plot
data %>%
      ggplot(aes(x = G, y = y, color = I, linetype=P)) +
      geom_line(aes(linetype=P,color=I),size=0.2)+
      scale_linetype_manual(values=c("solid", "dashed")) +
      scale_color_manual(values=colours) +
      scale_x_continuous(breaks = seq(0,100, by=25), limits=c(0,100)) +
      scale_y_continuous(breaks = seq(0,1, by=0.25), limits=c(0,1)) +
      labs(x = "Time", y = "Value") +
      theme_classic() 

正如他們在其他論壇中所建議的那樣,我還嘗試在ggplot(aes())中添加group=interaction(I, P) ,但未成功。

遵循@JonSpring 的觀點:

dd2 <- (filter(dd,G %in% c(16,17))
    %>% group_by(P,I,G)
    %>% summarise(n=length(unique(y)))
)

表明對於G/I/P的每種組合,您有許多不同的y值:

# A tibble: 12 x 4
# Groups:   P, I [6]
   P             I         G     n
   <chr>         <chr> <dbl> <int>
 1 heterogeneity I005     16    34
 2 heterogeneity I005     17    37
 3 heterogeneity I010     16    34
... [etc.]

如果您願意,解決此問題的一種方法是使用stat_summary()讓 R 將每組中的y值折疊到它們的平均值:

(dd %>%
 ggplot(aes(x = G, y = y, color = I, linetype=P)) +
 stat_summary(fun=mean, geom="line",
              aes(linetype=P,color=I,group=interaction(I,P)),size=0.2) +
 scale_linetype_manual(values=c("solid", "dashed")) +
 scale_color_manual(values=colours) +
 labs(x = "Time", y = "Value") +
 theme_classic()
)

您也可以在調用ggplot之前使用group_by() + summarise()自己執行此操作。

每個 I/P 組合一行的時間序列

提供的數據集中沒有足夠的信息來識別各個行。 如果我們願意假設給定 I/G/P 組中值的順序是適當的索引變量,那么我們可以這樣做:

## add index variable
dd3 <- dd %>% group_by(P,I,G) %>% mutate(index=seq(n()))
(dd3 %>%
 ggplot(aes(x = G, y = y, color = I, linetype=P)) +
 geom_line(aes(group=interaction(index,I,P)), size=0.2) +
 scale_linetype_manual(values=c("solid", "dashed")) +
 scale_color_manual(values=colours) +
 labs(x = "Time", y = "Value") +
 theme_classic()
)

具有 600 條不同曲線的時間序列

如果這不是您的想法,那么您需要提供更多信息...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM