以下R脚本:
library(ggplot2)
data <- read.csv(text="x,value,version
foo,10,one
foo,12,two
bar,8,one
bar,7,two
baz,11,one
baz,14,two", header=TRUE)
png(filename="so.png")
ggplot(data,aes(data$x,data$value,fill=data$version)) +
geom_bar(stat="identity",position="dodge") +
scale_fill_brewer(palette="Set1") +
labs(x = "x",y="value") +
guides(fill=guide_legend(title="version"))
dev.off()
生成以下图表:
它们按字母顺序根据“x”列(foo,bar,baz)从左到右显示。但是,我希望根据其中一个版本显示“x”列分组条,最左边是最高“值”列值。例如。根据“一”版本的值从左到右。因此:
我怎样才能做到这一点?
答案 0 :(得分:2)
我引用的问题的一般原则总是成立:您通过设置因子级别顺序来控制顺序。很多人都被绊倒了,因为那个问题的答案并不总能准确地告诉你如何在每一种情况下重新排序你的因素。但这个想法总是一样的。以下是以各种方式设置因子水平的方法:
#Cleverly
library(forcats)
data$x <- fct_reorder2(.f = data$x,
x = data$value,
y = data$version,
fun = function(x,y) x[y == "one"])
#Manually
data$x <- factor(data$x,levels = c("baz","foo","bar"))
#Tortuously
levels(data$x) <- data$x[data$version == "one"][order(data$value[data$version == "one"],decreasing = TRUE)]
#tidily
library(dplyr)
levels(data$x) <- data %>%
filter(version == "one") %>%
arrange(desc(value)) %>%
pull(x)