ggplot geom_bar() 按线型和填充自定义

ggplot geom_bar() customize by linetype and fill

我正在使用 ggplot2 和 geom_bar() 来绘制一些统计数据。有没有办法自定义栏中的填充物以及每个栏的线条类型?我想强调两个关键特征:总共有五个条形图,它们代表的数字是从两种不同类型的输入中产生的,并使用我用于绘图的三个不同函数。条形图应显示功能、输入变化。我想对一组输入使用全暗填充,对另一组输入使用白色填充。对于功能,我可以使用不同的线型来显示对比度。

总而言之,条形图的值表示函数 f1、f2 和 f3 上输入 X 和 Y 的组合的输出:条形图 A:输入 X 函数 f1; bar B输入Y函数f1; bar C输入X函数f2; bar D输入Y函数f2; bar E输入Y函数f3.

关于如何做到这一点有什么建议吗?这是我能够尝试的一个示例,但如您所见,它还没有完成我想要实现的目标,我用一种颜色填充超小型和中型,但我怎么能改变线型呢?以及如何将 geom_text() 用于文本:

      library(ggplot2)
      data(mpg)
      unique(mpg$class)
      library(ggplot2)

     ggplot(mpg, aes(x = class, fill = class %in% c("subcompact", "midsize"))) +
geom_bar(linetype="dashed", colour="darkgreen") + scale_fill_grey() + guides(fill=FALSE) + theme_classic()

这是一个包含三个任意(且有争议)分类的示例。注意使用 dplyr 首先定义组以使图例更容易。我假设在大多数用例中,您将拥有(或可以构造)与我这里类似的列以及您感兴趣的数据。

我知道你为什么要为这种类型的图表做这个,但是 none 少,这当然是可能的。

请注意,我不得不稍微修改 linetype 图例以使其显示得很好。

ggplot(mpg %>%
         mutate(`Small Car` = class %in% c("subcompact", "midsize")
                , `Stuff Hauler` = class %in% c("pickup", "suv")
                , `Uncomfortable for long drive` = class %in% c("compact", "pickup", "2seater")
                )
       , aes(x = class
             , fill = `Small Car`
             , linetype = `Stuff Hauler`
             , col = `Uncomfortable for long drive`
             )) +
  geom_bar(size = 2) +
  scale_fill_grey() +
  theme_classic() +
  guides(linetype = guide_legend(override.aes = list(fill = NA
                                                     , col = "black")))