Dear R listers,
I am trying to produce a simple (for a stata user) barplot with 4
countries on the x axis, each country observed in 2 subsequent years
and 3 variables.
Basically, I should have three bars for each year for each country. I
am attaching the chart I made in Stata, but I am not sure you'll
manage to see it!
I did the following:
#here I create the data-set TUSE2. The vectors mw, st and all are the
three variables I'd like to plot in each of the two years of the
variable year3 for each country.
country <- c("United States","United
States","Italy","Italy","Germany","Germany","Netherlands","Netherlands")
year3 <- c(1, 2, 1, 2, 1, 2,1 , 2)
mw <- c( 245.8, 255.9, 248.5, 207.4,263.9, 197.7, 174.2, 189.5)
st <- c( 200.5, 218.0, 236.1, 237.3, 220.5, 242.7, 221.0, 206.0)
all <- c( 446.3, 473.9, 484.6, 444.7,484.5, 440.4, 395.2, 395.5)
TUSE2 <- data.frame(country, year3, mw, st, all)
attach(TUSE2)
#I load the library ggplot (But if you know of alternative techniques,
I'll be happy to try them out)
library(ggplot2)
#I start producing the chart:
p <- ggplot(TUSE2, aes(country, all, group=year3))
p <- p + layer(
geom="bar",
position="dodge",
stat="identity")
#so far I manage to get what I want for just one variable: all. Let's
try to add another variable, let's say: mw
f <- p + layer(
geom="bar",
aes(x=country, y = mw),
position="dodge",
stat="identity")
f
#and here my adventure crashes. I get the following message and I
can't figure out how to get my chart. The error message is:
Error in pmin(y, 0) : object 'y' not found
In addition: Warning message:
In min(diff(sort(x))) : no non-missing arguments to min; returning Inf
Can you please help me understanding how to make my chart? I am trying
to switch from Stata to R, but so far life is really hard!
Best,
f.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cfr_HRS.png
Type: image/png
Size: 51704 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120219/ca145917/attachment.png>
barplot with more than 1 variable
3 messages · Francesco Sarracino, ilai, Jim Lemon
You could have found the solution in http://had.co.nz/ggplot2/geom_bar.html yourself since all help pages for ggplot refer you to the web site. But to speed things up for you, try this for starters: TUSE2 <- data.frame(country = rep(c("United States","Italy","Germany","Netherlands"),each=2), year3 = factor(1:2), mw = c( 245.8, 255.9, 248.5, 207.4,263.9, 197.7, 174.2, 189.5), st = c( 200.5, 218.0, 236.1, 237.3, 220.5, 242.7, 221.0, 206.0), all= c( 446.3, 473.9, 484.6, 444.7,484.5, 440.4, 395.2, 395.5)) # Note year3 is a factor library(ggplot2) forplot <- stack(TUSE2,c('st','mw','all')) ggplot(TUSE2) + geom_bar(aes(year3,forplot$values,fill=forplot$ind),position="dodge")+ facet_grid(. ~ country) Hope this helps Elai On Sun, Feb 19, 2012 at 5:31 AM, Francesco Sarracino
<f.sarracino at gmail.com> wrote:
Dear R listers,
I am trying to produce a simple (for a stata user) barplot with 4
countries on the x axis, each country observed in 2 subsequent years
and 3 variables.
Basically, I should have three bars for each year for each country. I
am attaching the chart I made in Stata, but I am not sure you'll
manage to see it!
I did the following:
#here I create the data-set TUSE2. The vectors mw, st and all are the
three variables I'd like to plot in each of the two years of the
variable year3 for each country.
country <- c("United States","United
States","Italy","Italy","Germany","Germany","Netherlands","Netherlands")
year3 <- c(1, 2, 1, 2, 1, 2,1 , 2)
mw <- c( 245.8, 255.9, ?248.5, 207.4,263.9, 197.7, 174.2, 189.5)
st <- c( 200.5, 218.0, ?236.1, 237.3, 220.5, 242.7, 221.0, 206.0)
all <- c( 446.3, 473.9, ?484.6, 444.7,484.5, 440.4, 395.2, 395.5)
TUSE2 <- data.frame(country, year3, mw, st, all)
attach(TUSE2)
#I load the library ggplot (But if you know of alternative techniques,
I'll be happy to try them out)
library(ggplot2)
#I start producing the chart:
p <- ggplot(TUSE2, aes(country, all, group=year3))
p <- p + layer(
?geom="bar",
?position="dodge",
?stat="identity")
#so far I manage to get what I want for just one variable: all. Let's
try to add another variable, let's say: mw
f <- p + layer(
?geom="bar",
?aes(x=country, y = mw),
?position="dodge",
?stat="identity")
f
#and here my adventure crashes. I get the following message and I
can't figure out how to get my chart. The error message is:
Error in pmin(y, 0) : object 'y' not found
In addition: Warning message:
In min(diff(sort(x))) : no non-missing arguments to min; returning Inf
Can you please help me understanding how to make my chart? I am trying
to switch from Stata to R, but so far life is really hard!
Best,
f.
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
On 02/19/2012 11:31 PM, Francesco Sarracino wrote:
Dear R listers,
I am trying to produce a simple (for a stata user) barplot with 4
countries on the x axis, each country observed in 2 subsequent years
and 3 variables.
Basically, I should have three bars for each year for each country. I
am attaching the chart I made in Stata, but I am not sure you'll
manage to see it!
I did the following:
#here I create the data-set TUSE2. The vectors mw, st and all are the
three variables I'd like to plot in each of the two years of the
variable year3 for each country.
country<- c("United States","United
States","Italy","Italy","Germany","Germany","Netherlands","Netherlands")
year3<- c(1, 2, 1, 2, 1, 2,1 , 2)
mw<- c( 245.8, 255.9, 248.5, 207.4,263.9, 197.7, 174.2, 189.5)
st<- c( 200.5, 218.0, 236.1, 237.3, 220.5, 242.7, 221.0, 206.0)
all<- c( 446.3, 473.9, 484.6, 444.7,484.5, 440.4, 395.2, 395.5)
TUSE2<- data.frame(country, year3, mw, st, all)
attach(TUSE2)
#I load the library ggplot (But if you know of alternative techniques,
I'll be happy to try them out)
Hi Francesco,
You can try this to get something like your example. change the "mar"
argument to leave space for a legend and use par(xpd=TRUE) to put it
outside the plot if you want a legend.
# first stretch the data out to long form
library(prettyR)
TUSE3<-rep_n_stack(TUSE2,to.stack=c("mw","st","all"),
stack.names=c("work_type","output"))
# start a wide graphics device
x11(width=10)
library(plotrix)
# get the order of levels in work_type right
TUSE3$work_type<-factor(TUSE3$work_type,levels=c("mw","st","all"))
# display it as a nested bar plot
barNest(output~country+year3+work_type,TUSE3,showall=FALSE,
FUN="mean",main="Type of work in 4 countries in two intervals",
ylab="Value of work",
barlabels=list("",c("Germany","Italy","Netherlands","United States"),
c("1985-91","2000-03"),levels(TUSE3$work_type)),
col=list("white","white","white",c("gray80","gray50","gray20")))
Jim