使用ggplot2

时间:2019-04-04 18:34:50

标签: r ggplot2

我正在尝试使用R和ggplot2重新创建以下插图:

The Clean Architecture

我创建了以下代码:

library(ggplot2)

df <- data.frame(names = c(
  "Enterprise Business Rules",
  "ApplicationBusiness Rules",
  "Interface Adapters",
  "Frameworks & Drivers"))

ggplot(df, aes(x = factor(1), fill = names)) +
  geom_bar(width = 1) +
  coord_polar() +
  xlab("") + ylab("") +
  theme_void() +
  theme(legend.title = element_blank())

但是输出不正确:

ggplot2 output

我不知道如何更改图层顺序。也许我缺少有关ggplot2data.frame的一些重要信息。

2 个答案:

答案 0 :(得分:3)

默认情况下,名称按字母顺序排列。您可以通过将names作为因素并使用levels参数指定顺序来解决此问题。另外,您可以使用reverse = TRUE函数的guide_legend参数来反转图例中的名称顺序。

library(ggplot2)

names <- rev(c(
  "Enterprise Business Rules",
  "ApplicationBusiness Rules",
  "Interface Adapters",
  "Frameworks & Drivers"))
df <- data.frame(names = factor(names, levels = names))

ggplot(df, aes(x = factor(1), fill = names)) +
  geom_bar(width = 1) +
  coord_polar() +
  xlab("") + ylab("") +
  theme_void() +
  theme(legend.title = element_blank()) +
  guides(fill = guide_legend(reverse = TRUE))

reprex package(v0.2.1)于2019-04-04创建

答案 1 :(得分:2)

这里有一个粗略的解决方案:

请注意df$names

的级别
> levels(df$names)
 [1] "ApplicationBusiness Rules" "Enterprise Business Rules"        
      "Frameworks & Drivers"      "Interface Adapters" 

您需要做的是重新定义df$names的级别

> df$names<-factor(df$names,rev(df$names))
> levels(df$names)
  [1] "Frameworks & Drivers"      "Interface Adapters" 
  "ApplicationBusiness Rules" "Enterprise Business Rules"

现在尝试您的图表。