使用R中的ggplot创建地毯

时间:2016-09-28 16:05:37

标签: r ggplot2

我有一个数据框,有496个观察10个变量,例如water81,water80,water79,收入,教育,退休,peop81,cpeop,peop80。现在我有兴趣创建一个ggplot(退休后的收入分配)。我还需要在剧情的左侧创建一个地毯。但是当我尝试时,地毯会在左侧和右侧创建,但仅在顶部和底部创建。

ggplot(data=dataframe,aes(x=income,fill=retire))+
   geom_histogram()+geom_rug(sides="t",color="red")

当双方=" b"或" t"正在创造地毯。如果我使用rugs =" l"或" r"地毯不会被创建。

enter image description here

1 个答案:

答案 0 :(得分:2)

您希望系统在该示例图的y轴上放置地毯标记?并且,同样重要的是:你会如何解释它们?地毯标记不适用于此类数据显示。

提供代码的可重复示例会有所帮助,但即使没有它我也可以告诉您没有映射y变量,geom_rug需要y轴地毯分数。

如果您坚持这样做,则需要手动生成y轴位置,然后将它们传递到ggplot。 (请注意,我使用来自magrittr的管道来构建数据)

toPlot <-
  mpg %$%
  table(class, cyl) %>%
  as.data.frame()

ggplot(toPlot
       , aes(x = class
             , fill = cyl
             , col = cyl
             , y = Freq)) +
  geom_bar(stat = "identity"
           , position = "dodge") +
  geom_rug()

enter image description here

请注意,我有躲避的酒吧。否则,你的地毯标记要么a)不与条形图对齐,要么b)没有条形图时不能解释。

以下是使用数字变量的示例,使用cut将其分解为像直方图一样的分类:

toPlotNum <-
  mpg %$%
  table(class
        , City = cut(cty,pretty(cty))) %>%
  as.data.frame()

ggplot(toPlotNum
       , aes(x = City
             , fill = class
             , col = class
             , y = Freq)) +
  geom_bar(stat = "identity"
           , position = "dodge") +
  geom_rug()

或者,显示密度:

library(stringr)

ggplot(mpg
       , aes(x = cty
             , col = word(trans, sep = fixed("(")))) +
  geom_density() +
  geom_rug()

enter image description here