簡體   English   中英

每個組/ ggplot2等價於類型=“ o”的線前的繪圖點

[英]plot points in front of lines for each group/ggplot2 equivalent of type=“o”

假設我想繪制一個包含點和線的圖形,其中點出現在每組中相應線的前面 特別是,我希望用紅色填充點繪制組1,其中的點通過線連接,但是要用(僅)藍線繪制組2,但是我希望將組2繪制組1 之上 。例如,在基本圖形中:

set.seed(101)
dd <- data.frame(x=rep(1:10,2),
         y=rep(1:10,2),
                 f=factor(rep(1:2,each=10)))
dd$y[11:20] <-     dd$y[11:20] + rnorm(10)
d1 <- subset(dd,f=="1")
d2 <- subset(dd,f=="2")

par(cex=1.5)
plot(y~x,data=d1,bg="red",pch=21,type="o")
lines(y~x,data=d2,col="blue",lwd=2)
legend("bottomright",c("group 1","group 2"),
       col=c("black","blue"),
       pch=c(21,NA),
       pt.bg=c("red",NA),
       lty=1,
       lwd=c(1,2))

在此處輸入圖片說明

(我的真實數據要復雜一些。)我ggplot2ggplot2干凈地做到這ggplot2

如果我在線條之前畫點,則第1組的點會被同一組中的線覆蓋:

 library(ggplot2); theme_set(theme_bw())
 g0 <- ggplot(dd,aes(x,y,fill=f,colour=f,shape=f))+
     scale_fill_manual(values=c("red",NA))+
     scale_colour_manual(values=c("black","blue")) +
     scale_shape_manual(values=c(21,NA))
 g0 + geom_point()+  geom_line()
 ggsave("order2.png",width=3,height=3)

在此處輸入圖片說明

如果我在點之前畫線,則第2組的線會被第1組的點覆蓋:

 g0 + geom_line()+  geom_point()
 ggsave("order3.png",width=3,height=3)

在此處輸入圖片說明

所需的順序是(第1組線),(第1組點),(第2組線)。 我可以通過手動覆蓋再次geoms,每次一個組做到這一點,但這是丑陋的方式

 g0 +  geom_line() + geom_point()+ 
     geom_point(data=d1)+
     geom_line(data=d2,show.legend=FALSE)
 ggsave("order4.png",width=3,height=3)

我認為對此的“最佳”解決方案是編寫一個可以geom_linepoint工作的低級geom_linepoint 我已經研究了一下,這並不完全是瑣碎的事 ……誰能提出更清潔,更簡單的解決方案?

在此處輸入圖片說明

這是“低技術含量” 1解決方案。 下面是為給定分組變量的每個級別依次添加線層和點層的函數。

linepoint = function(data, group.var, lsize=1.2, psize=4) {
  lapply(split(data, data[,group.var]), function(dg) {
    list(geom_line(data=dg, size=lsize),
         geom_point(data=dg, size=psize)) 
  })
}

ggplot(dd, aes(x,y, fill=f, colour=f,shape=f))+
  scale_fill_manual(values=c("red",NA))+
  scale_colour_manual(values=c("black","blue")) +
  scale_shape_manual(values=c(21,NA)) +
  linepoint(dd, "f")

在此處輸入圖片說明


1個 “低技術含量”與編寫一個新的幾何圖形相比。 @baptiste(現在已刪除)的答案確實創建了一個新的幾何圖形,似乎已經完成了工作,因此我不確定他為什么刪除了它。

暫無
暫無

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

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