在ggplot中的一个图上分配的不同变量的箱图

时间:2016-01-20 22:19:52

标签: r ggplot2 boxplot

我正试图找出一种方法来绘制ggplot中基数R的以下代码:

fit <- kmeans(iris[,-5], 3)

par(mfrow=c(1,4))
for (i in 1:4) {
  boxplot(iris[,i]~fit$cluster, xlab="Cluster",
  ylab=names(iris)[i], varwidth=T)
}

我有一种预感,有一种方法可以避免在ggplot中使用循环来绘制这个,但我不知道如何。到目前为止,我只绘制了一个变量。对于所有数值变量,我将使用什么来按簇绘制箱图?

par(mfrow=c(1,1))
comp.df <- cbind(iris, fit$cluster)
names(comp.df)[6] <- "cluster"

comp.df$cluster <- as.factor(comp.df$cluster)

test <- ggplot(comp.df, aes(x = cluster, y = Sepal.Length)) + 
  geom_boxplot()

也许这是基础r更适合绘图的情况之一。

3 个答案:

答案 0 :(得分:1)

您可以将data.frame重新整形为长格式(此处使用tidyr::gather)并使用facet_grid

library(tidyr)
comp.df.long <- gather(comp.df,key,value,-Species,-cluster)
ggplot(comp.df.long, aes(x = cluster, y = value)) + 
  geom_boxplot() +
  facet_grid(.~key)

enter image description here

答案 1 :(得分:1)

这个应该有帮助

 library(reshape2)
 melted<- melt(comp.df[c(1:4,6)],id.vars="cluster")
 ggplot(melted, aes(x = cluster, y = value)) + 
     geom_boxplot()+facet_wrap(~variable)

关键元素是 facet_wrap ,类似于SQL中的group by。基本上,每个&#34;变量&#34;完成一个绘图。 melt命令将数据从宽格式转换为长格式。这意味着不同的特征不是列,而是具有值和变量列

head(melted)



cluster     variable value
1       1 Sepal.Length   5.1
2       2 Sepal.Length   4.9
3       2 Sepal.Length   4.7
4       2 Sepal.Length   4.6
5       1 Sepal.Length   5.0
6       1 Sepal.Length   5.4

enter image description here

答案 2 :(得分:1)

更长一点,更手动,但也有这种简单的方法。如果你想为每个图形使用不同的颜色或尺寸,它会更长,但它会给你更大的灵活性。

line = line.replaceAll("[^\\[({})\\]]","");
                          ^^     ^^

enter image description here