使用facet_wrap

时间:2019-05-25 00:14:39

标签: r

使用ISLR的Carseats数据集,我想在一张图中绘制所有其他变量与“ Sales”的关系。为此,我使用了tidyr,到目前为止,tidyr的效果很好,但是由于刻度线太多,因此x轴在图形中不可读。有没有一种方法可以标准化每个图中有多少刻度线或进行一些分隔以使其易于阅读?

library(ISLR)
library(tidyr)
library(ggplot2)

Carseats %>%
  gather(-Sales, key="var", value="value") %>%
  ggplot(aes(x=value, y=Sales)) +
  geom_point() +
  facet_wrap(~var, scales="free_x") +
  theme_bw()

我只希望x轴可读。

1 个答案:

答案 0 :(得分:1)

ggplot的构面选项旨在显示一个数据集的各个子集,并跨构面进行通用映射。因此,您的请求是一项有用的EDA任务,但实际上不是ggplot旨在轻松容纳的任务。挑战在于,这里的x轴不仅跨越小平面之间的不同范围(无概率),而且x轴是分类变量和连续变量的混合(陡峭!)。

我建议绘制两个图,一个用分类的x轴(例如ShelveLoc,Urban和US),另一个用连续的x轴。然后,如有必要,您可以使用cowplotpatchwork将它们组合成一个绘图对象。

具有连续x轴的图:

Carseats %>%
  select(-c("ShelveLoc", "Urban", "US")) %>%
  gather(-Sales, key="var", value="value") %>%
  ggplot(aes(x=value, y=Sales)) +
  geom_point() +
  facet_wrap(~var, scales="free_x", shrink = T) +
  theme_bw()

enter image description here

具有分类x轴的图:

Carseats %>%
  select(c("Sales", "ShelveLoc", "Urban", "US")) %>%
  gather(-Sales, key="var", value="value") %>%
  ggplot(aes(x=value, y=Sales)) +
  geom_point() +
  facet_wrap(~var, scales="free_x", shrink = T) +
  theme_bw()

enter image description here