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

o7jaxewo  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(140)

目前,我有麻烦显示图表Y轴我喜欢.我想要的是,每个单独的情节显示点的宽度,取决于自己的分数.见下图,看看我有什么,我想要的.
x1c 0d1x的数据
基本上,我希望每个图都依赖于它自己的索引,即剪影,戴维斯-博尔丁等,就像第一个图(左边的卡林斯基-哈拉巴斯)所示。
这是到目前为止的数据和代码

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")


很管用。谢谢你指出来。

更新答案2

此外,感谢camille,更好的可视化是使用带有2个变量的facet_grid。因此,最终代码将是:

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

6qfn3psc

6qfn3psc1#

我遇到了这个问题,并意识到规模有轻微不同的解释:在facet_grid中,尺度可以自由地改变 * 每小平面的行/列 *,而在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")

字符串
x1c 0d1x的数据

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



当您使用带有两个变量的facet_grid时,差异更加明显。使用来自ggplot2mpg数据集,第一个图没有自由尺度,因此每行的y轴具有10到35之间的刻度线。也就是说,每行面 * 的y轴 * 是固定的。使用facet_wrap,这种缩放将针对每个面进行。

ggplot(mpg, aes(x = hwy, y = cty)) +
  geom_point() +
  facet_grid(class ~ fl)

facet_grid中设置scales = "free_y"意味着 * 每一行小平面 * 可以独立于其他行设置其y轴。因此,例如,紧凑型汽车的所有小平面都受一个y尺度的影响,但它们不受皮卡y尺度的影响。

ggplot(mpg, aes(x = hwy, y = cty)) +
  geom_point() +
  facet_grid(class ~ fl, scales = "free_y")

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

相关问题