我使用xyplot创建了一个晶格散点图,将其分为不同的类别。现在,我尝试为散点图中的每个类别创建一个hexplot。我可以对变量进行硬编码,但我希望循环执行,因为我会多次这样做,因此会产生新的类别。
我从一个看起来像这样的表开始
Name Category Value1 Value2
sample1 cat1 10 1.5
sample2 cat2 10 1.5
sample3 cat3 10 1.5
sample4 cat1 10 1.5
sample5 cat1 10 1.5
sample6 cat2 10 1.5
sample7 cat3 10 1.5
我能够使用创建数据框列表
testing <- split(Mydata, Mydata$Category)
然后我可以创建一个图
testing2 <- as.data.frame(testing[["cat1"]]) #I keep on needing to change this for each Category that I have
ggplot(testing2, aes(x = testing2[,3], y = testing2[,4])) +
geom_hex(bins = 30)
testing2看起来像这样
Name Category Value1 Value2
sample1 cat1 10 1.5
sample4 cat1 10 1.5
sample5 cat1 10 1.5
我尝试了
for(i in testing){
testing3 <- i
xtra <- ggplot(testing3, aes(x = testing3[,3], y = testing3[,4])) + geom_hex(bins = 30)
xtra
}
最后,xtra是列表中的最后一个数据框。
有人可以帮我吗?我希望能够创建图而不必每次都更改$ Category,因为我每次要执行> 50个类别。
-编辑1 根据建议,我创建了一个函数;
myFirstFun <- function(column)
{
testing2 <- as.data.frame(testing[[column]])
column <- enquo(column)
ggplot(testing2, aes_string(x ="Value1", y = "Value2", group = column)) +
geom_hex(bins = 30)
}
还有这个
myFirstFun("cat1")
产生这个;
Name Category Value1 Value2
sample1 cat1 10 1.5
sample4 cat1 10 1.5
sample5 cat1 10 1.5
但是当我尝试使用for循环时;
for(i in categorynames){###categorynames is a vector that has all my categorynames
myFirstFun(i)
}
它只会产生列表中的最后一个图形。 如何生成n个图形(n =我的类别数)? 没有我手动做
myFirstFun("cat1")
myFirstFun("cat2")
myFirstFun("cat3")
...
答案 0 :(得分:2)
您可以构建一个函数,在其中使用dplyr::filter
选择所需的Category
然后进行绘制。
要遍历每个Category
,请使用purrr::map
并将所有结果存储在列表中。在这里,您可以打印所选的图,也可以将它们全部合并成一页,或者multiple pages
library(tidyverse)
df <- read.table(text = "Name Category Value1 Value2
sample1 cat1 11 2.5
sample2 cat2 13 1.5
sample3 cat3 12 3.5
sample4 cat1 15 6.5
sample5 cat1 17 4.5
sample6 cat2 14 7.5
sample7 cat3 16 1.5",
header = TRUE, stringsAsFactors = FALSE)
cat_chart1 <- function(data, category){
df <- data %>%
filter(Category == category)
plot1 <- ggplot(df, aes(x = Value1, y = Value2)) +
geom_hex(bins = 30)
return(plot1)
}
# loop through all Categories
plot_list <- map(unique(df$Category), ~ cat_chart1(df, .x))
plot_list[[1]]
# combine all plots
library(cowplot)
plot_grid(plotlist = plot_list, ncol = 2)
由reprex package(v0.2.1.9000)于2019-04-04创建