這是一個棘手的問題,而我基本上同時提出了兩個問題,使其變得更加棘手。但它們是相關的(如果不是在理論上,也是在實踐中)。
問題是
。基本上,我想使用一個腳本和一個資料框架來創建一個帶有箭頭的分面圖:
我想使用一個腳本和一個資料框架來創建一個帶有箭頭的分面圖。 <箭頭
目標是使用箭頭來表示治療的劑量,這可能會改變個人或治療佇列的劑量。
示例資料集
下面是我可能需要用箭頭繪制的那種資料的例子:df_3 <- tibble()
ID = rep(1。 2,每個= 10),
TIME = rep(1。 10, times = 2),
DV = c(runif(10)。 runif(10) * 5)
)
一個我不想要的情節的例子
下面的代碼生成了一個我所處位置的例子,但不是我想要的位置:ggplot(data =df_3, aes(x = TIME, y = DV))
geom_line()
facet_wrap(~ID。 天平= "free_y")
注釋("segment",
x = c(0. 5, 1.5, 2. 5)。 xend = c(0。 1, 2)。 y = 0. 05, yend = 0,
箭頭=箭頭(長度 = 單位(0. 20, "cm")。 型別= "closed"))
注意,箭頭只能被設定到一系列的位置(添加這些位置很繁瑣,因為我需要對x和xend變數進行調整,以獲得我想要的角度),而且,由于y軸不同,每一組的角度也不同。
例如,假設我想讓個體1在0、1和2的時間段出現箭頭,但個體2在2、4和6的時間段出現箭頭。
我想我需要將箭頭的位置添加到資料集中,但我擔心這將迫使ggplot為每個單獨的情節繪制箭頭,從而產生模糊的/黑暗的箭頭。
我愿意接受任何和所有的建議或想法。我很感謝你的時間。
uj5u.com熱心網友回復:
你遇到的問題是,箭頭完全是在資料空間中定義的,這可能會使視覺空間中的角度出現偏差。解決這個問題的一個方法是撰寫你自己的 geom,按照你喜歡的方式來繪制它,但是對于一個看起來如此簡單的任務來說,這似乎是一種多余的做法。
這似乎是 Paul Murrell 的 gggrid 包的一個不錯的使用案例。其中一個可能性是創建一個函式,該函式接收原始資料和轉換后的資料(稱為coords),并輸出所需的圖形物件。
# devtools::install_github("pmur002/gggrid")
library(ggplot2)
library(gggrid)
#> 載入所需的包:grid。
df_3 <- data.frame()
ID = rep(1。 2,每個= 10),
TIME = rep(1。 10, times = 2),
DV = c(runif(10)。 runif(10) * 5)
)
箭頭 < - function(data, coords) {>
偏移量<-單位(4, "mm")
segmentsGrob()
x0 = unit(coords$x。 "npc") offset,
x1 = unit(coords$x。 "npc"),
y0 = unit(coords$y。 "npc") offset,
y1 = unit(coords$y。 "npc"),
arrow = arrow(length = unit(0。 2, "cm")。 型別 = "closed"),
gp = gpar(fill = "black">)
)
}。
ggplot(data = df_3。 aes(x = TIME, y = DV))
geom_line()
facet_wrap(~ID。 天平= "free_y")
grid_panel(data = data. frame(TIME = c(0。 5, 1. 5, 2. 5)。 DV = 0),
grob = arrows)

很好的一點是,這不是一個靜態的注釋,如annotation_custom(),它只是沿著面重復。在下面的例子中,我們可以看到,第二個箭頭被發送到第二個面板。
ggplot(data = df_3。 aes(x = TIME, y = DV))
geom_line()
facet_wrap(~ID。 天平= "free_y")
grid_panel(data = data. frame(TIME = c(0。 5, 1.5, 2. 5),
DV = 0。 ID = c(1。 2。 1)) # < - facet var
grob = arrows)

創建于2021-09-21,由reprex包(v2.0.1)
uj5u.com熱心網友回復:
不確定我是否完全理解你想要實作的目標,但有一個選項可以添加你的箭頭,那就是使用annotation_custom而不是annotate。
set.seed(123)
library(tibble)
df_3 <- tibble()
ID = rep(1。 2,每個= 10),
TIME = rep(1。 10,次 = 2),
DV = c(runif(10)。 runif(10) * 5)
)
library(grid)
library(ggplot2)
段<- segmentsGrob(x0 = unit(. 05, "npc")。 y0 = unit(. 05, "npc"),
x1 = unit(0。 "npc")。 y1 = unit(0。 "npc"),
箭頭=箭頭(角度= 45。 length = unit(0. 2, "cm")。 型別= "closed")。 gp = gpar(fill= "black"))
ggplot(data = df_3。 aes(x = TIME, y = DV))
geom_line()
scale_x_continuous(limits = c(0。 NA))
scale_y_continuous(limits = c(0。 NA))
facet_wrap(~ID。 天平= "free_y")
lapply(0: 2, function(xmin) {
annotation_custom(grob = segment, xmin = xmin, ymin = 0。 xmax = max(df_3$) operator">$TIME) xmin)
})

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/330193.html
標籤:
上一篇:如何使AR成為你庫中的默認工件

