r中箱形图中的附加轴
additional axis in box plot in r
我有以下数据:
df1 <- read.table(text = "ID Group Value time
A1 A 21 10
A2 A 79 20
A3 A 32 30
B1 B 105 40
B2 B 44 50
B3 B 58 60
C1 C 32 70
C2 C 66 80
C3 C 143 90", stringsAsFactors = FALSE, header = TRUE)
根据数据,我使用 ggboxplot
函数绘制箱线图:
library(ggpubr)
ggboxplot(data=df1,x="Group",y="Value",add = "jitter",short.panel.labs = FALSE)
我的情节是这样的:
现在我想在绘图的顶部添加一个附加轴,将绘图中的“点”根据 df1
中的 time
列重新排列,我应该做的是:
这可能吗?
如果你不依赖ggboxplot()
,有一个带底图的解决方案。
boxplot(Value ~ Group, df1, xlim=c(.4, 3.5),
xlab="Group", ylab="Value")
points(df1$time/100*3.5, df1$Value, pch=16)
axis(3, seq(0, 3.5, length.out=11), 0:10*10)
mtext("time", 3, 3)
解释
我们首先制作一个普通的箱线图,并稍微向左扩展 y 轴 xlim()
(否则从 0.5 开始)。然后我们通过将辅助 x 轴 ("time"
) 缩放到箱线图 x 轴的 [0, 3.5] 范围,用 points()
覆盖图。然后我们添加轴并标记它,最后我们为辅助 x 轴添加一个标签 mtext()
.
结果
数据
df1 <- structure(list(ID = c("A1", "A2", "A3", "B1", "B2", "B3", "C1",
"C2", "C3"), Group = c("A", "A", "A", "B", "B", "B", "C", "C",
"C"), Value = c(21L, 79L, 32L, 105L, 44L, 58L, 32L, 66L, 143L
), time = c(10L, 20L, 30L, 40L, 50L, 60L, 70L, 80L, 90L)), class = "data.frame", row.names = c(NA,
-9L))
我有以下数据:
df1 <- read.table(text = "ID Group Value time
A1 A 21 10
A2 A 79 20
A3 A 32 30
B1 B 105 40
B2 B 44 50
B3 B 58 60
C1 C 32 70
C2 C 66 80
C3 C 143 90", stringsAsFactors = FALSE, header = TRUE)
根据数据,我使用 ggboxplot
函数绘制箱线图:
library(ggpubr)
ggboxplot(data=df1,x="Group",y="Value",add = "jitter",short.panel.labs = FALSE)
我的情节是这样的:
现在我想在绘图的顶部添加一个附加轴,将绘图中的“点”根据 df1
中的 time
列重新排列,我应该做的是:
这可能吗?
如果你不依赖ggboxplot()
,有一个带底图的解决方案。
boxplot(Value ~ Group, df1, xlim=c(.4, 3.5),
xlab="Group", ylab="Value")
points(df1$time/100*3.5, df1$Value, pch=16)
axis(3, seq(0, 3.5, length.out=11), 0:10*10)
mtext("time", 3, 3)
解释
我们首先制作一个普通的箱线图,并稍微向左扩展 y 轴 xlim()
(否则从 0.5 开始)。然后我们通过将辅助 x 轴 ("time"
) 缩放到箱线图 x 轴的 [0, 3.5] 范围,用 points()
覆盖图。然后我们添加轴并标记它,最后我们为辅助 x 轴添加一个标签 mtext()
.
结果
数据
df1 <- structure(list(ID = c("A1", "A2", "A3", "B1", "B2", "B3", "C1",
"C2", "C3"), Group = c("A", "A", "A", "B", "B", "B", "C", "C",
"C"), Value = c(21L, 79L, 32L, 105L, 44L, 58L, 32L, 66L, 143L
), time = c(10L, 20L, 30L, 40L, 50L, 60L, 70L, 80L, 90L)), class = "data.frame", row.names = c(NA,
-9L))