如何更改ggplot小标签(自定义小包装标签)
问题描述:
您好我绘制使用R中ggplot一个小情节的顺序,这里是小区如何更改ggplot小标签(自定义小包装标签)
我的问题是,该刻面(标签)按字母顺序排序(例如:E1,E10,E11,E13,E2,E3,I1,I10,I2),但我需要它们是像E1,I1,E2,I2,E3,E10, I10,E11,E13。
我该怎么做?
答
如果您提供的分组变量是而不是的因子,则不要依赖由factor()
施加的级别的默认排序或在内部按ggplot
。自己设置显示级别。
dat <- data.frame(x = runif(100), y = runif(100),
Group = gl(5, 20, labels = LETTERS[1:5]))
head(dat)
with(dat, levels(Group))
如果我想让它们按照这个任意顺序怎么办?
set.seed(1)
with(dat, sample(levels(Group)))
要做到这一点,按照你想要的方式设置水平。
set.seed(1) # reset the seed so I get the random order form above
dat <- within(dat, Group <- factor(Group, levels = sample(levels(Group))))
with(dat, levels(Group))
现在,我们可以用它来有顺序绘制我们想面板:
require(ggplot2)
p <- ggplot(dat, aes(x = x)) + geom_bar()
p + facet_wrap(~ Group)
主要生产:
+1
非常感谢gavin :) – Jana 2011-03-30 22:10:28
答
仅仅是一个类似的工作问题。我有这样的默认水平:
[1] "A1" "A10" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9"
[11] "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9"
请注意,第二级由于字母顺序不合适。
这是我在做什么固定的顺序:
reorder(factor(fct),
fct %>%
str_replace("([[:alpha:]]+)", "\\1|") %>%
str_split("\\|") %>%
sapply(function(d) sprintf("%s%02d", d[1], as.integer(d[2]))),
function(x) x[1])
它取代了像“A1”和“A01”的水平,然后根据这些进行重新排序。我相信你可以更有效地做到这一点,但它能做到这一点。
它可以适应解决原始问题。
重新排列潜在因素的顺序。你可以使用''repvel()'或'reorder()'或者自定义命令并使用'factor()'。 – Chase 2011-03-30 18:53:49