Reputation: 121
I am trying to create a nice barplot for my data. So far I have been using the ggplot function:
library(ggplot2)
ggplot(dframe1, aes(x=Site, y=lambda.max)) + geom_bar(stat="identity") +
labs(x="Site", y="Lambda maximum")
The data on the y axis needs to be in the hundreds though (not the thousands), and I do not know how to change that. Also I was wondering if it is possible to represent all of this data on one barplot or graph?:
structure(list(Site = structure(c(2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 1L, 1L, 1L), .Label = c("6",
"2", "3", "4", "5"), class = "factor"), 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"), row.names = c(NA, -18L), class = "data.frame")
Upvotes: 0
Views: 2433
Reputation: 19638
(1) How to change the y to be hundred separated
The continuous_y_axis gives you a few options like comma
, dollar
, percent
. I don't think the hundred you want is built in.
However, you can simply divide the y by the unit (100) in this case. And add the unit to your y label.
library(ggplot2)
unit <- 100
ggplot(dframe1, aes(x=Site, y=lambda.max/unit)) + geom_bar(stat="identity") +
labs(x="Site", y=paste0("Lambda maximum: Unit: ", unit))
(2) Can I fit all the data into one plot
I don't think it is a good idea to fit all the variables into one plot. Like the dodged bar plot here. Because all the variables are in different scale and if you fit all of them into one plot. Some of them will be unnoticable.
Here is what facet_wrap and reshape can do for you.
library(reshape2)
dframe2 <- melt(dframe1, id="Site")
ggplot(dframe2, aes(x=Site, y=value)) + geom_bar(stat="identity") + facet_wrap(~variable, scales="free")
(3) DONT SUM WITHIN GROUP
In that case, all the records inside each site need to be treated as an individual record, in that case, I created a variable called row for each record, you can improve that part.
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")
Upvotes: 1