我有2列的数据集如下点的颜色:在GGPLOT2更改内的for循环
# loading some libraries
library(data.table)
library(ggplot2)
library(grid)
library(gridExtra)
# generating the data
set.seed(2017)
dt = data.table(x = rnorm(500), y = rnorm(500, 1, 0.5))
我运行多个k均值使用图2和3中心kmeans()
功能如下:
# cluster the data
n_k = 2:3
for (i in seq_along(n_k)) {
assign(paste0("cl_", n_k[ i ]),
kmeans(dt[ , .(x, y) ], centers = n_k[ i ]))
dt[ , (paste0("cl_", n_k[ i ])) :=
as.factor(get(paste0("cl_", n_k[ i ]))$cluster) ][]
}
所以,现在我已经添加列cl_2
和cl_3
到我的数据集dt
。我想用这两列作为我在ggplot2
生成的两个图中的颜色集。到目前为止,我再次把所有的东西都放在for循环中来构建这两个地块。不起作用的只是颜色规格。例如,它忽略列cl_2
并只考虑cl_3
。这里是情节生成:
# building plots
for (i in seq_along(n_k)) {
assign(paste0("p_", n_k[ i ]),
ggplot(data = dt,
aes(x = x, y = y,
color = get(paste0("cl_", n_k[ i ])))) +
geom_point() +
ggtitle(paste0("kmeans with ", n_k[ i ], " centers")))
}
我描绘出这些如下:
grid.arrange(p_2, p_3, ncol = 2)
令我百思不解的是,如果我手动建立了两个地块,按预期一切正常而已。例如,执行以下操作会产生正确的结果:
p_2 = ggplot(data = dt, aes(x = x, y = y,
color = get(paste0("cl_", n_k[ 1 ])))) +
geom_point()
p_3 = ggplot(data = dt, aes(x = x, y = y,
color = get(paste0("cl_", n_k[ 2 ])))) +
geom_point()
任何提示我做错了什么?
看看'?aes_'。这使您可以通过给定为字符串 –
@GregordeCillia良好的通话名称中使用的列,但它没有工作... – contefranz
是我不好,我的意思是'aes_string'。 'aes_'也可以,但是语法有点不同。 –