我有一个如下所示的数据框:
df =
b e t w e e n
[1,] 219 125 125 94 172 109 172
[2,] 78 78 250 156 172 141 140
[3,] 250 204 296 829 265 125 203
[4,] 406 110 172 187 63 156 109
当我融化它时,使用熔体(df),我得到:
df.m =
X1 X2 value
1 1 b 219
2 2 b 78
3 3 b 250
4 4 b 406
5 1 e 125
6 2 e 78
7 3 e 204
8 4 e 110
9 1 t 125
10 2 t 250
11 3 t 296
12 4 t 172
13 1 w 94
14 2 w 156
15 3 w 829
16 4 w 187
17 1 e 172
18 2 e 172
19 3 e 265
20 4 e 63
21 1 e 109
22 2 e 141
23 3 e 125
24 4 e 156
25 1 n 172
26 2 n 140
27 3 n 203
28 4 n 109
问题是,当我想制作每个字母的箱线图时,它只是按字母分组。在上面的示例中,有3个" e" s,它们聚集在一起。因此,下面的公式产生下面的箱形图:
ggplot(df.m, aes(x=X2, y=value)) +
geom_boxplot(outlier.shape=NA) +
xlim('b','e','t','w','e','e','n')
如果我可以在保留初始列索引的熔化数据框中添加一列,则可以很容易地制作正确的箱形图。有没有办法做到这一点?
答案 0 :(得分:3)
一个选项是基于“1”创建一个新列(假设数据集为order
ed)以获取逻辑向量,获取累积和,转换为字符('i1') ,然后使用OP ggplot
的代码,最后用scale_x_discrete
更改刻度标记。
library(dplyr)
library(ggplot2)
df.m %>%
mutate(i1 = as.character(cumsum(X1==1))) %>%
ggplot(., aes(x=i1, y= value))+
geom_boxplot(outlier.shape=NA) +
scale_x_discrete(breaks= c("1", "2", "3", "4", "5", "6", "7"),
labels= c("b", "e", "t", "w", "e", "e", "n"))+
xlab(NULL)
或者我们可以将原始matrix
中的列名称设置为列{?1}},并直接在melt
上使用
ggplot
library(reshape2)
`colnames<-`(df, seq_len(ncol(df))) %>%
melt() %>%
ggplot(., aes(x=as.character(Var2), y= value)) +
geom_boxplot(outlier.shape=NA) +
scale_x_discrete(breaks = seq_len(ncol(df)),
labels = colnames(df)) +
xlab(NULL)
答案 1 :(得分:1)