如何检索列表(数据框)中的元素名称以将其用作绘图的标题?
How to retrieve name of element in list (data frame) to use it as a title of the plot?
这么简单,不用多说 - 是否可以只检索列表中元素的名称并将其用作情节的主要标题?
让我解释一下 - 示例:
让我们创建一个随机 df:
a <- c(1,2,3,4)
b <- runif(4)
c <- runif(4)
d <- runif(4)
e <- runif(4)
f <- runif(4)
df <- data.frame(a,b,c,d,e,f)
head(df)
a b c d e f
1 1 0.9694204 0.9869154 0.5386678 0.39331278 0.15054698
2 2 0.8949330 0.9910894 0.1009689 0.03632476 0.15523628
3 3 0.4930752 0.7179144 0.6957262 0.36579883 0.32006026
4 4 0.4850141 0.5539939 0.3196953 0.14348259 0.05292068
然后我想创建一个包含特定列的数据框列表(基于上面的内容)来绘制图表。换句话说,我想绘制图,其中 df (a) 的第一列将是图上的 x 轴,b、c、d、e 列将代表图上 y 轴上的值。是的,会有 5 个地块 - 这就是重点!
所以我的想法是编写一些简单的函数,它能够根据上面创建的列表创建一个 df 列表:
my_fun <- function(x){
a <- df[1]
b <- x
aname <- "x_label"
bname <- "y_label"
df <- data.frame(a,b)
names(df) <- c(aname,bname)
return(df)
}
运行 所有(指定的)列:
df_s <- apply(df[,2:6], 2, function(x) my_fun(x))
所以我现在有:
class(df_s)
[1] "list"
str(df_s)
List of 5
$ b:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.969 0.895 0.493 0.485
$ c:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.987 0.991 0.718 0.554
$ d:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.539 0.101 0.696 0.32
$ e:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.3933 0.0363 0.3658 0.1435
$ f:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.1505 0.1552 0.3201 0.0529
我想要的东西,但问题是。 我想为列表中的每个 df 创建一个图...因此我想要 5 个图,主标题分别为 b、c、d、e、f 轴标签是同名剧情不...所以我试了:
lapply(df_s, function(x) plot(x[2] ~ x[1], data = x, main = ???))
应该用什么代替问号?我尝试了 main = names(df_s)[x]
但是它没有用...
我认为以下作品。但是,我认为最好使用 ggplot2
而不是 plot
函数(除非您将绘图保存在 lapply
内)。
lapply(1 : length(df_s), function(x)
plot(df_s[[x]][,2] ~ df_s[[x]][,1],
xlab = names(df_s[[x]])[1],
ylab = names(df_s[[x]])[1],
main = names(df_s[x])))
使用 ggplot2
plot_lst <- lapply(seq_along(df_s), function(i) {
ggplot(df_s[[i]], aes(x=x_label, y=y_label)) +
geom_point() +
theme(plot.title = element_text(hjust = 0.5)) +
ggtitle(names(df_s)[i]) })
这么简单,不用多说 - 是否可以只检索列表中元素的名称并将其用作情节的主要标题?
让我解释一下 - 示例:
让我们创建一个随机 df:
a <- c(1,2,3,4)
b <- runif(4)
c <- runif(4)
d <- runif(4)
e <- runif(4)
f <- runif(4)
df <- data.frame(a,b,c,d,e,f)
head(df)
a b c d e f
1 1 0.9694204 0.9869154 0.5386678 0.39331278 0.15054698
2 2 0.8949330 0.9910894 0.1009689 0.03632476 0.15523628
3 3 0.4930752 0.7179144 0.6957262 0.36579883 0.32006026
4 4 0.4850141 0.5539939 0.3196953 0.14348259 0.05292068
然后我想创建一个包含特定列的数据框列表(基于上面的内容)来绘制图表。换句话说,我想绘制图,其中 df (a) 的第一列将是图上的 x 轴,b、c、d、e 列将代表图上 y 轴上的值。是的,会有 5 个地块 - 这就是重点!
所以我的想法是编写一些简单的函数,它能够根据上面创建的列表创建一个 df 列表:
my_fun <- function(x){
a <- df[1]
b <- x
aname <- "x_label"
bname <- "y_label"
df <- data.frame(a,b)
names(df) <- c(aname,bname)
return(df)
}
运行 所有(指定的)列:
df_s <- apply(df[,2:6], 2, function(x) my_fun(x))
所以我现在有:
class(df_s)
[1] "list"
str(df_s)
List of 5
$ b:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.969 0.895 0.493 0.485
$ c:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.987 0.991 0.718 0.554
$ d:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.539 0.101 0.696 0.32
$ e:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.3933 0.0363 0.3658 0.1435
$ f:'data.frame': 4 obs. of 2 variables:
..$ x_label: num [1:4] 1 2 3 4
..$ y_label: num [1:4] 0.1505 0.1552 0.3201 0.0529
我想要的东西,但问题是。 我想为列表中的每个 df 创建一个图...因此我想要 5 个图,主标题分别为 b、c、d、e、f 轴标签是同名剧情不...所以我试了:
lapply(df_s, function(x) plot(x[2] ~ x[1], data = x, main = ???))
应该用什么代替问号?我尝试了 main = names(df_s)[x]
但是它没有用...
我认为以下作品。但是,我认为最好使用 ggplot2
而不是 plot
函数(除非您将绘图保存在 lapply
内)。
lapply(1 : length(df_s), function(x)
plot(df_s[[x]][,2] ~ df_s[[x]][,1],
xlab = names(df_s[[x]])[1],
ylab = names(df_s[[x]])[1],
main = names(df_s[x])))
使用 ggplot2
plot_lst <- lapply(seq_along(df_s), function(i) {
ggplot(df_s[[i]], aes(x=x_label, y=y_label)) +
geom_point() +
theme(plot.title = element_text(hjust = 0.5)) +
ggtitle(names(df_s)[i]) })