在绘图矩阵中与 lapply 和列名作斗争
struggling with lapply and column names in a plot matrix
我正在努力使用 lapply()
创建直方图矩阵。以下生成九个直方图,但 x 标签是数据第一行中的值,而不是列名。我希望 x 标签是列的名称。
library(tidyverse)
library(ISLR2)
library(gridExtra)
data(College)
plothists<-function(colm) {
ggplot(College) + geom_histogram(aes(colm),binwidth=20)+xlab(label=colm)
}
plist<-lapply(College[,c(2:10)],plothists)
grid.arrange(grobs=as.list(plist),ncol=3)
如何获取列名作为 x 标签?
编辑:我接受 JPSmith 的回答,但出于我自己的目的我修改了代码如下:
library(tidyverse)
library(ISLR2)
data(College)
College |>
pivot_longer(2:10,names_to="var") |>
ggplot(aes(value)) + geom_histogram(bins=60) +
facet_wrap(~var,scales="free") +
theme(axis.text.x=element_text(angle=45,hjust=1))
我找到了一种更简单的方法,因为
library(tidyverse)
library(ISLR2)
data(College)
library(reshape2)
cmelt<-melt(College[,c(2:10)])
ggplot(cmelt,aes(value))+ geom_histogram(bins=60)+
facet_wrap(~variable,scales="free")+
theme(axis.text.x=element_text(angle=45,hjust=1))
在另一个堆栈溢出问题中!
您可以通过将数据转换为长格式并使用 ggplot 来使用当前的库实现此目的:
# transform to long
newdata <- College %>%
pivot_longer(2:10, names_to = "hist")
ggplot(newdata) +
geom_histogram(aes(value), binwidth = 20) +
facet_wrap(~hist, ncol = 3, scales = "free")
输出:
我正在努力使用 lapply()
创建直方图矩阵。以下生成九个直方图,但 x 标签是数据第一行中的值,而不是列名。我希望 x 标签是列的名称。
library(tidyverse)
library(ISLR2)
library(gridExtra)
data(College)
plothists<-function(colm) {
ggplot(College) + geom_histogram(aes(colm),binwidth=20)+xlab(label=colm)
}
plist<-lapply(College[,c(2:10)],plothists)
grid.arrange(grobs=as.list(plist),ncol=3)
如何获取列名作为 x 标签?
编辑:我接受 JPSmith 的回答,但出于我自己的目的我修改了代码如下:
library(tidyverse)
library(ISLR2)
data(College)
College |>
pivot_longer(2:10,names_to="var") |>
ggplot(aes(value)) + geom_histogram(bins=60) +
facet_wrap(~var,scales="free") +
theme(axis.text.x=element_text(angle=45,hjust=1))
我找到了一种更简单的方法,因为
library(tidyverse)
library(ISLR2)
data(College)
library(reshape2)
cmelt<-melt(College[,c(2:10)])
ggplot(cmelt,aes(value))+ geom_histogram(bins=60)+
facet_wrap(~variable,scales="free")+
theme(axis.text.x=element_text(angle=45,hjust=1))
在另一个堆栈溢出问题中!
您可以通过将数据转换为长格式并使用 ggplot 来使用当前的库实现此目的:
# transform to long
newdata <- College %>%
pivot_longer(2:10, names_to = "hist")
ggplot(newdata) +
geom_histogram(aes(value), binwidth = 20) +
facet_wrap(~hist, ncol = 3, scales = "free")
输出: