让facet_grid中的每个图都有自己的Y轴值

时间:2018-08-03 13:56:59

标签: r ggplot2

目前,我无法按照自己的喜好显示图表Y轴。我想要的是每个单独的图都显示点宽度,该点宽度取决于其自己的分数。请看下面的图片,看看我有什么和想要什么。

enter image description here

基本上,我希望每个图都取决于其自己的索引,即Silhouette,Davies-Bouldin等。就像第一个图形(左侧的Carlinski-Harabasz)显示的一样。

这是到目前为止的数据和代码

algorithms <- as.factor(c(rep("kmeans", 4), rep("pam", 4), rep("cmeans", 4)))
index <- as.factor(c(rep("Silhouette", 12), rep("Carlinski-Harabasz", 12)
, rep("Davies-Bouldin",12)))
score <- c(0.12,0.08,0.07,0.05,0.1,0.07,0.09,0.08,0.13,0.11,0.1,0.1,142,106,84,74,128,
99,91,81,156,123,105,95,2.23,2.31,2.25,2.13,2.55,2.12,2.23,2.08,2.23,2.12,2.17,1.97)
clusters <- as.factor(rep(3:6,9))
indices <- data.frame(algorithms, index, score, clusters)

#Some ggplot code
ggplot(indices, aes(clusters, score)) + 
geom_point(aes(size = score, color = algorithms)) + 
facet_grid(.~index, scales = "free_y") 
#I thought the scales function in facet grid might do the trick...

据我了解,我必须围绕Y轴比例尺工作。但是,这对我来说非常棘手。

更新的答案

ggplot(indices, aes(clusters, score)) + 
geom_point(aes(size = score, color = algorithms)) + 
facet_wrap(~index, scales = "free_y")

成功了。感谢您指出。

更新后的答案第二个

此外,由于有了camille,更好的可视化效果是将facet_grid与2个变量一起使用。因此,最终代码将是:

ggplot(indices, aes(clusters, score)) + 
geom_point() + facet_grid(index ~ algorithms, scales = "free_y") + 
theme_bw() + labs(y="Score per index", x="Clusters")

1 个答案:

答案 0 :(得分:2)

我遇到了这个问题,并意识到比例尺的解释略有不同:在facet_grid中,比例尺可以自由更改每行/列构面,而对于{{ 1}},由于没有给行或列以硬性和快速性的含义,因此可以自由更改每个方面的比例。可以像facet_wrap进行宏级缩放而grid进行微观级一样。

wrap的一个优点是快速将一个变量的所有值放在一行或一列中,从而很容易看到正在发生的事情。但是您可以在facet_grid中模仿这一点,方法是将面设置在单个行或列上,就像我下面在facet_wrap中所做的那样。

nrow = 1

library(tidyverse)

algorithms <- as.factor(c(rep("kmeans", 4), rep("pam", 4), rep("cmeans", 4)))
index <- as.factor(c(rep("Silhouette", 12), rep("Carlinski-Harabasz", 12)
                     , rep("Davies-Bouldin",12)))
score <- c(0.12,0.08,0.07,0.05,0.1,0.07,0.09,0.08,0.13,0.11,0.1,0.1,142,106,84,74,128,
           99,91,81,156,123,105,95,2.23,2.31,2.25,2.13,2.55,2.12,2.23,2.08,2.23,2.12,2.17,1.97)
clusters <- as.factor(rep(3:6,9))
indices <- data.frame(algorithms, index, score, clusters)


ggplot(indices, aes(clusters, score)) + 
  geom_point(aes(size = score, color = algorithms)) + 
  facet_grid(. ~ index, scales = "free_y") 

ggplot(indices, aes(clusters, score)) + geom_point(aes(size = score, color = algorithms)) + facet_wrap(~ index, scales = "free_y", nrow = 1) 与两个变量一起使用时,区别更加明显。使用facet_grid中的mpg数据集,该第一个图没有自由比例,因此每行的y轴的刻度线在10到35之间。即,的y轴每行刻面都是固定的。使用ggplot2,这种缩放将在每个方面进行。

facet_wrap

ggplot(mpg, aes(x = hwy, y = cty)) + geom_point() + facet_grid(class ~ fl) 中设置scales = "free_y"意味着每行构面可以独立于其他行设置其y轴。因此,例如,紧凑型汽车的所有方面都受一个y尺度的约束,但不受皮卡y尺度的影响。

facet_grid

reprex package(v0.2.0)于2018-08-03创建。