如何将 if 语句参数传递给 scale_y_continuous()?
How to pass a if statement argument to scale_y_continuous()?
我正在尝试将参数传递给 scale_y_continuous(),但不幸的是。我最后一次使用 noquote() 的尝试如下。我的直觉告诉我这是可行的,但经过多次尝试后我还没有弄明白。
我想要完成的是:
如果 y 变量(每组)的最大值 < 10,则将 y 轴限制固定为 c(0,10)。否则固定在 c(0,20)。另一种选择:否则让 y 轴自由缩放,即
scale_y_continuous(pretty.breaks, 10) 之类的。
希望我的示例代码足够清晰。实际代码将处理数千个 id,因此需要一定程度的健壮性。
提前致谢!
data1 <-
structure(list(group = c("AA", "AA", "AA", "AA", "AA", "AA",
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "BB", "BB",
"BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB",
"BB", "BB", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC",
"CC", "CC", "CC", "CC", "CC", "CC"), variable = c(11.453027,
10.600175, 9.886923, 8.942422, 11.585849, 10.604372, 8.813456,
9.388578, 9.403585, 10.078807, 10.170484, 10.31884, 10.307227,
10.720575, 10.974219, 0.7718116, 1.5862548, 0.5691476, 1.3747248,
1.6671187, 1.5524076, -0.3567432, 0.6318082, 0.681686, 1.9085089,
0.4098754, 0.2254707, 0.3161615, 0.2456526, 2.66832, 7.776831,
8.316334, 8.200448, 7.70843, 8.026592, 7.647327, 11.008817, 7.953072,
8.611409, 9.021719, 8.794007, 8.282669, 9.230021, 9.580956, 6.784829
), xval = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 13L, 14L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L, 13L, 14L, 15L)), class = "data.frame", row.names = c(NA,
-45L), .Names = c("group", "variable", "xval"))
示例代码:
if(max(data1$variable) < 10) my.scale <- noquote("limits=c(0,10), breaks=seq(0,10, 1)") else my.scale <- noquote("limits=c(0,20), breaks=seq(0,20, 1")
lapply(split(data1,data1$group), function(gg) {
p1 <- ggplot(gg,aes(x = xval, y = variable)) + geom_point() +
geom_line() + theme_bw() +
scale_y_continuous(my.scale)
p1
}
)
p1 <- ggplot(gg,aes(x = xval, y = variable)) + geom_point() +
geom_line() + theme_bw()
if(max(data1$variable) < 10){
p1 <- p1 + scale_y_continuous(limits=c(0,10), breaks=seq(0,10, 1))
}
根据需要添加条件...
我正在尝试将参数传递给 scale_y_continuous(),但不幸的是。我最后一次使用 noquote() 的尝试如下。我的直觉告诉我这是可行的,但经过多次尝试后我还没有弄明白。
我想要完成的是:
如果 y 变量(每组)的最大值 < 10,则将 y 轴限制固定为 c(0,10)。否则固定在 c(0,20)。另一种选择:否则让 y 轴自由缩放,即 scale_y_continuous(pretty.breaks, 10) 之类的。
希望我的示例代码足够清晰。实际代码将处理数千个 id,因此需要一定程度的健壮性。
提前致谢!
data1 <-
structure(list(group = c("AA", "AA", "AA", "AA", "AA", "AA",
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "BB", "BB",
"BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB", "BB",
"BB", "BB", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC", "CC",
"CC", "CC", "CC", "CC", "CC", "CC"), variable = c(11.453027,
10.600175, 9.886923, 8.942422, 11.585849, 10.604372, 8.813456,
9.388578, 9.403585, 10.078807, 10.170484, 10.31884, 10.307227,
10.720575, 10.974219, 0.7718116, 1.5862548, 0.5691476, 1.3747248,
1.6671187, 1.5524076, -0.3567432, 0.6318082, 0.681686, 1.9085089,
0.4098754, 0.2254707, 0.3161615, 0.2456526, 2.66832, 7.776831,
8.316334, 8.200448, 7.70843, 8.026592, 7.647327, 11.008817, 7.953072,
8.611409, 9.021719, 8.794007, 8.282669, 9.230021, 9.580956, 6.784829
), xval = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 13L, 14L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
11L, 12L, 13L, 14L, 15L)), class = "data.frame", row.names = c(NA,
-45L), .Names = c("group", "variable", "xval"))
示例代码:
if(max(data1$variable) < 10) my.scale <- noquote("limits=c(0,10), breaks=seq(0,10, 1)") else my.scale <- noquote("limits=c(0,20), breaks=seq(0,20, 1")
lapply(split(data1,data1$group), function(gg) {
p1 <- ggplot(gg,aes(x = xval, y = variable)) + geom_point() +
geom_line() + theme_bw() +
scale_y_continuous(my.scale)
p1
}
)
p1 <- ggplot(gg,aes(x = xval, y = variable)) + geom_point() +
geom_line() + theme_bw()
if(max(data1$variable) < 10){
p1 <- p1 + scale_y_continuous(limits=c(0,10), breaks=seq(0,10, 1))
}
根据需要添加条件...