我認為這個問題足夠復雜,一個代碼示例會有所幫助:
library(ggplot2)
df <- data.frame(
Group = c("A", "A", "A", "A", "B", "B"),
Subgroup = c("A.1", "A.2", "A.1", "A.2", "B.1", "B.2"),
Value = c(10, 7, 8, 9, 11, 12),
Pair = c(1, 1, 2, 2, 3, 3)
)
dodge <- position_dodge(width = 0.9)
ggplot(data = df, mapping = aes(x = Group, y = Value, fill = Subgroup))
geom_bar(stat = "summary", fun = "mean", position = dodge)
geom_point(position = dodge)
geom_line(color = "red", mapping = aes(group = Pair), position = dodge)
關鍵是要有一個包含組和子組的條形圖(成功),將各個點繪制在每個條形上方的中心(成功),并用線連接成對樣本(失敗)。結果并不太遠,但顯然不是讓點互相避開然后畫線,而是ggplot2畫垂直線然后讓它們互相避開。
實際的:

預期的:

uj5u.com熱心網友回復:
可能更容易面對Group并完全放棄位置調整。下面還使用標簽、面板間距等來盡可能地模仿原始情節的外觀。
library(ggplot2)
ggplot(df, aes(x = Subgroup, y = Value, fill = Subgroup))
geom_bar(stat = "summary", fun = "mean", width = 1)
geom_point()
geom_line(aes(group = Pair), color = "red", )
facet_wrap(vars(Group), scales = "free_x", strip.position = "bottom")
labs(x = "Group")
theme(
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
strip.background = element_blank(),
panel.spacing = unit(0, units = "line")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/440272.html
