在R中编写绘图函数时,我不想修改全局环境,所以我包含了类似的东西
op <- par()
on.exit(par(op))
Run Code Online (Sandbox Code Playgroud)
但这并不令人满意,因为它会发出警告信息(例如"In par(op) : graphical parameter "cin" cannot be set"),但更重要的是,它与多面板图不兼容.例如,如果我有一个像这样的简单函数
pfun <- function(x) {
op <- par()
on.exit(par(op))
par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
plot(x,
xaxt = "n",
yaxt = "n",
col = "deeppink",
cex = 2,
pch = 22,
bg = "deeppink",
col.lab = "deeppink")
axis(1, col = "deeppink")
axis(2, col = "deeppink")
}
Run Code Online (Sandbox Code Playgroud)
它可以很好地用于单个绘图(除了警告之外),但是与多面板图不兼容,例如
par(mfrow = c(2, 2))
pfun(1:10)
pfun(10:1) # overwrites the first plot rather than plotting in …Run Code Online (Sandbox Code Playgroud) 我有一个函数我要传递...给plot,所以用户可以添加其他参数.对于其中一些可选参数,我想设置默认值,而不将它们声明为函数中的形式参数.这是一个简单的例子
simpleFun <- function(a, b,...) {
args <- as.list(match.call())
if(is.null(args$xlim)) args$xlim <- quote(c(-6, 6))
plot(a, b, xlim = eval(args$xlim))
}
Run Code Online (Sandbox Code Playgroud)
然后我可以运行simpleFun(rnorm(10), rnorm(10), xlim = c(-1, 1))或simpleFun(rnorm(10), rnorm(10))与xlim将c(-1, 1)在第一实施例(通过用户定义的)和c(-6, 6)在第二个(不是由用户定义).当然,问题...是现在无处可去.我想更明确地指出它
simpleFun2 <- function(a, b,...) {
args <- as.list(match.call())
if(is.null(args$xlim)) args$xlim <- quote(c(-6, 6))
plot(a, b, xlim = eval(args$xlim), ...)
}
Run Code Online (Sandbox Code Playgroud)
所以任何额外的参数都可以传递给plot,但是然后调用simpleFun(rnorm(10), rnorm(10), xlim = c(-1, 1))将无法工作,因为将xlim提供两个参数plot.
所以,基本上,我想知道是否有办法为传递的任何参数设置默认值 …
使用ggforce软件包的开发版,我可以如下创建Sankey图(来自文档)
data <- reshape2::melt(Titanic)
data <- gather_set_data(data, 1:4)
ggplot(data, aes(x, id = id, split = y, value = value)) +
geom_parallel_sets(aes(fill = Sex), alpha = 0.3, axis.width = 0.1) +
geom_parallel_sets_axes(axis.width = 0.1) +
geom_parallel_sets_labels(colour = 'white')
Run Code Online (Sandbox Code Playgroud)
我正在努力使y轴变量以默认方式以外的任何其他方式排序,默认方式似乎是反向字母。例如,更改图,使其显示在图Adult的顶部附近,Child下方。
我尝试过在应用之前重新调整因子gather_set_data,以及y在应用之后重新调整变量gather_set_data,但似乎都不起作用。我也尝试过将它们定义为字符并以不同顺序排序,但这似乎也不起作用。
任何帮助,将不胜感激。
我最近开始对表使用huxtable R包,这让我印象深刻。但是,我似乎无法弄清楚的一件事是如何在单元格中获得换行符。这是我尝试过的
library(tidyverse)
library(huxtable)
cars <- mtcars %>%
mutate(car = rownames(.),
car = str_replace(car, " ", "\n")) %>%
slice(1:5) %>%
select(car, cyl, hp)
cars
# A tibble: 5 x 3
car cyl hp
<chr> <dbl> <dbl>
1 "Mazda\nRX4" 6.00 110
2 "Mazda\nRX4 Wag" 6.00 110
3 "Datsun\n710" 4.00 93.0
4 "Hornet\n4 Drive" 6.00 110
5 "Hornet\nSportabout" 8.00 175
ht <- as_hux(cars, add_colnames = TRUE)
escape_contents(ht) <- TRUE
ht
Run Code Online (Sandbox Code Playgroud)
但这最终没有换行,如下面的屏幕截图所示
该escape_contents部分似乎没有什么不同。
我不确定自己想要的东西是否可行,但是我知道它在其他软件包中(例如DT::datatable)。如果可能的话,我真的很想使用huxtable,因为我喜欢软件包的设计和灵活性。
任何想法都会很棒。
编辑: …