我有一个包含三列的简单数据框:
ST_CODE | VALUE | HEIGHT
... ... ...
factor continuous continuous
我想为每个ST_CODE设置一个VALUE箱图,但我希望x轴上的顺序由HEIGHT的升序确定。 这是代码:
ggplot(ozone, aes(x = ST_CODE, y = VALUE)) +
geom_boxplot(notch=TRUE)
通过执行ozone[order(ozone$HEIGHT),]
在ggplot函数内排序臭氧是没用的,因为顺序由ST_CODE决定。我该怎么办?
这是数据集:https://www.dropbox.com/s/kf0jcv50oaa5my9/ozone_example.csv?dl=0
我发现了这个问题,但我并没有真正理解:Rearrange x axis according to a variable in ggplot
答案 0 :(得分:-1)
解决方案应该是根据ST_CODE
列对因子变量VALUE
的级别进行排序。
在您提供示例数据之前,这是我最好的猜测: - )
编辑1:我已添加read.csv
来阅读您的数据,我会说它有效。为了更容易检查结果,我只使用了只包含三个不同ST_CODE的前1000行。
library(ggplot2)
# example data
# data <- data.frame( ST_CODE = rep(c("A", "B", "C"), 2), VALUE = rep(3:1, 2), HEIGHT = rep(c(2, 1, 3), 2))
# data
# Your data
data <- read.csv("ozone_example.csv")
data <- data[1:1000,]
table(data$ST_CODE, data$HEIGHT) # indicates how to order ST_CODEs
# plot (not sorted by HEIGHT)
ggplot(data, aes(x = ST_CODE, y = VALUE)) +
geom_boxplot(notch=TRUE)
# Plot sorted by HEIGHT by changing the factor level order
ordered.data <- data[order(data$HEIGHT),]
data$ST_CODE <- factor(data$ST_CODE, levels = unique(ordered.data$ST_CODE))
ggplot(data, aes(x = ST_CODE, y = VALUE)) +
geom_boxplot(notch=TRUE)