ggplot boxplot:如何根据第三个变量排序x轴?

时间:2018-02-11 18:10:07

标签: r ggplot2 boxplot

我有一个包含三列的简单数据框:

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

1 个答案:

答案 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)