关于ggplot2:如何在R中编辑多面环绕条形图

How to edit facet wrapped bar plots in R

我在这里有一张图:
Graphs

1
2
3
4
dframe1$row <- row.names(dframe1)
library(reshape2)
dframe2 <- melt(dframe1, id=c("Site","row"))
ggplot(dframe2, aes(x=as.numeric(row), fill=Site, y=value)) + geom_bar(stat="identity") +       facet_wrap(~variable, scales="free")

基本上,我想知道如何更改颜色,以使每个位置的颜色都不同(在图例中表示),并且是否有可能分别为每个迷你图标记x和y轴并获取删除底部的as数字线。

这是我的数据的dput():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
structure(list(Site = c(2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L,
4L, 4L, 4L, 5L, 5L, 6L, 6L, 6L), weight = c(0.193, 0.249, 0.263,
0.262, 0.419, 0.204, 0.311, 0.481, 0.326, 0.657, 0.347, 0.239,
0.416, 0.31, 0.314, 0.277, 0.302, 0.403), cell.count = c(2530000,
729000, 336000, 436000, 292000, 0, 2e+05, 6450000, 2e+05, 18700000,
7430000, 9920000, 22700000, 21600000, 227000, 169000, 5e+05,
283000), eleocyte = c(1270000, 17, 7.3, 264000, 0, 0, 2e+05,
0, 2e+05, 2270000, 0, 9920000, 22700000, 442, 153000, 169000,
5e+05, 283000), lambda.max = c(459L, 459L, 459L, 459L, 462L,
462L, 462L, 462L, 462L, 465L, 465L, 465L, 465L, 490L, 490L, 475L,
475L, 475L), avepb.ppm = c(390.2, 373.3, 340.13, 403.2, 248.53,
206.7, 238.5, 190.6, 597.2, 206.8, 174.4, 186.3, 138.5, 269.55,
58.1, 5.225, 4.02, 6.85), aveworm.pb.ppm = c(9.59, 9.446, 4.193,
21.9, 1.66, 7.415, 13.11, 3.01, 51.5, 5.985, 4.705, 26.38, 2.38,
4.44, 4.67, 0.11, 0.085, 0.096), aveworm.g = c(0.09125, 0.264,
14.699, 0.2425, 0.4793, 0.051, 0.0635, 0.0465, 0.2645, 0.0559,
0.0795, 0.05765, 0.0846, 0.457, 0.0625, 0.0535, 0.1576, 0.16)), .Names = c("Site",
"weight","cell.count","eleocyte","lambda.max","avepb.ppm",
"aveworm.pb.ppm","aveworm.g"), class ="data.frame", row.names = c(NA,
-18L))


要更改颜色,您需要告诉ggplot网站是一个因素(正如@ user20650在评论中指出的那样)。

由于在facet_wrap()中指定了scales ="free",因此您已经具有迷你图的各个轴。

要摆脱图形底部的as.numeric(row)标签,可以使用theme()语句指定不希望在其中放置文本。您也可以通过使用p <- p + xlab("")而不是theme()行添加空白标签来实现此目的。

此代码产生下图:

1
2
3
4
5
6
library(ggplot2)
p <- ggplot(dframe2, aes(x = as.numeric(row), fill = as.factor(Site), y = value))
p <- p + geom_bar(stat ="identity") + facet_wrap(~variable, scales ="free")
p <- p + scale_fill_discrete("Site")
p <- p + theme(axis.title.x = element_blank())
p

enter

1
2
levels(dframe2$variable) <- c("Weight","Cell Count","Eleocyte","Lambda",
                             "Average PPM","Average PB PPM","Average G")

如果使用facet_grid而不是facet_wrap,则可以使用贴标签器功能(如果您不想更改数据框)。另请参见此处的讨论。

R的Cookbook网站也是解决问题的好资源。