R 让镶嵌面网格中的每个绘图都有自己的Y轴值

R 让镶嵌面网格中的每个绘图都有自己的Y轴值,r,ggplot2,R,Ggplot2,目前,我很难按照自己的喜好显示图表Y轴。我想要的是,每个单独的绘图显示的点宽度取决于它自己的分数。请参见下图,了解我拥有什么以及我想要什么 基本上,我希望每个图都依赖于它自己的索引,即剪影、戴维斯·博尔丁等,就像第一张图(左侧的卡林斯基·哈拉巴斯)所示 这是到目前为止的数据和代码 algorithms <- as.factor(c(rep("kmeans", 4), rep("pam", 4), rep("cmeans", 4))) index <- as.factor(c(rep

目前,我很难按照自己的喜好显示图表Y轴。我想要的是,每个单独的绘图显示的点宽度取决于它自己的分数。请参见下图,了解我拥有什么以及我想要什么

基本上,我希望每个图都依赖于它自己的索引,即剪影、戴维斯·博尔丁等,就像第一张图(左侧的卡林斯基·哈拉巴斯)所示

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

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...
成功了。谢谢你指出这一点

更新答案2 此外,多亏了camille,更好的可视化方法是使用带有2个变量的
facet\u grid
。因此,最终代码将为:

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

我遇到了这个问题,并且意识到尺度有稍微不同的解释:在
facet\u grid
中,尺度可以在每行/每列facet中自由更改,而在
facet\u wrap
中,尺度可以在每一个facet中自由更改,因为行或列没有硬性的含义。把它想象成
grid
执行宏观级别的缩放,而
wrap
执行微观级别的缩放

facet\u grid
的一个优点是可以快速地将一个变量的所有值放在一行或一列中,从而很容易看到发生了什么。但是您可以在
facet\u wrap
中模拟这一点,方法是将facet设置在一行或一列上,就像下面我使用
nrow=1
所做的那样

库(tidyverse)

算法尝试使用
facet\u wrap
facet\u网格(.~index,scales=“free\u y”)
?首先,两者之间有很好的解释。因为ggplot2备忘单并没有真正说明这一点。我必须说,将
nrow=1
position=“jitter”
结合使用并不能提高图表的阅读能力。例如,在我的数据集中,几个点具有相同的结果。因此,不清楚哪个点属于哪个集群。有趣的是,你提到的最后一个选项非常简洁。事实上,它把它想象得很好。我将更新我的答案(再次)并接受提供的答案。
ggplot(indices, aes(clusters, score)) + 
geom_point() + facet_grid(index ~ algorithms, scales = "free_y") + 
theme_bw() + labs(y="Score per index", x="Clusters")