我正在尝试使用R和ggplot2
重新创建以下插图:
我创建了以下代码:
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
和data.frame
的一些重要信息。
答案 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"
现在尝试您的图表。