[英]How to edit facet wrapped bar plots in R
I have a graph here: 我在这里有一个图:
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")
Basically I would like to know how I can change the colours so that they are different for each site (represented in the legend), and if it is possible to label the x and y axes individually for each mini graph and to get rid of the as numeric line at the bottom. 基本上,我想知道如何更改颜色,以使每个位置的颜色都不同(在图例中表示),以及是否有可能分别为每个迷你图标记x和y轴并摆脱这些颜色。作为底部的数字线。
Here is the dput() of my data: 这是我的数据的dput():
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))
To change the colors you need to tell ggplot that Site is a factor (as @user20650 pointed out in the comments). 要更改颜色,您需要告诉ggplot网站是一个因素(正如@ user20650在注释中指出的那样)。
You already have individual axes for the mini graphs because you specified scales = "free"
in facet_wrap()
. 因为在facet_wrap()
指定scales = "free"
, facet_wrap()
您已经具有用于迷你图的各个轴。
To get rid of the as.numeric(row) label at the bottom of your graph you can specify that you do not want text there with the theme()
statement. 为了摆脱图形底部的as.numeric(row)标签,您可以使用theme()
语句指定您不希望在其中放置文本。 You could also achieve this by adding a blank label with p <- p + xlab("")
instead of the theme()
line. 您也可以通过添加带有p <- p + xlab("")
而不是theme()
行的空白标签来实现此目的。
This code produces the following figure: 此代码产生下图:
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
To change the labels of the facets you can change the levels of the variables in your data frame. 要更改构面的标签,可以更改数据框中变量的级别。 See this answer . 看到这个答案 。 Similar to: 如同:
levels(dframe2$variable) <- c("Weight", "Cell Count", "Eleocyte", "Lambda",
"Average PPM", "Average PB PPM", "Average G")
If you use facet_grid
instead of facet_wrap
you can use a labeller function (in case you do not want to change your data frame). 如果使用facet_grid
而不是facet_wrap
,则可以使用贴标签程序功能(以防您不想更改数据框)。 See also the discussion here . 另请参见此处的讨论 。
The Cookbook for R site is also a good resource for faceting questions. R的Cookbook网站也是解决问题的好资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.