[R] ggplot2 geom_polygon fill
raimund
raipec at gmail.com
Mon Feb 6 17:50:39 CET 2012
Hi everyone,
i've been trying to make a special plot with ggplot2, but I can't get it to
fill the polygon I'd like to see filled so very very much.
I want to display the difference or change in the distribution of the
modified Rankin Scale between two groups. mRS is a scale for disability or
daily activities competence.
It looks like this.
http://r.789695.n4.nabble.com/file/n4361919/rankinplot.png
I just wish the polygons in between the bars would fill in the same colors
as the bar segments do.
Interestingly, in the example provided by the geom_polygon help page, there
is a fill, which leads me to suspect that something with my data frame might
be wrong.
If I supply a "colour" argument, I get borders, but not always in the color
I defined. The attached image has such borders, to make clear what polygons
I am talking about. In the final plot I don't desire such borders, only the
as of yet unattainable fill.
Here's my code:
library(ggplot2)
library(plyr)
# define good looks
no_margins <- opts(
axis.line = theme_blank(),
axis.text.x = theme_blank(),
axis.ticks = theme_blank(),
axis.title.x = theme_text(size = 12, vjust = 0.15),
axis.title.y = theme_text(angle = 90, size = 12, vjust = 0.2),
axis.ticks.length = unit(0, "cm"),
axis.ticks.margin = unit(0, "cm"),
panel.background = theme_blank(),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank(),
plot.background = theme_blank(),
plot.title = theme_blank(),
plot.margin = unit(c(1, 1, 1, 1.5), "lines")
)
sfm = scale_fill_manual("mRS", c("0"="darkgreen",
"1"="forestgreen",
"2"="mediumseagreen",
"3"="coral",
"4"="red",
"5"="darkred",
"6"="black"))
barwidth = 0.6
# good looks defined
smalldummy = data.frame(
mRS = as.factor(rep(0:6,2)),
rsfreq = sample(0:6,14,replace=T),
treatment = factor(rep(c("one","two"),each=7))
)
smalldummy = ddply(smalldummy, .(treatment), transform,
textpos = cumsum(rsfreq/sum(rsfreq)) -
rsfreq/sum(rsfreq)/2, # center within segment
lineposx = cumsum(rsfreq/sum(rsfreq)))
# segment borders without 0
# make the xs of the polygon
polylo = 1 + barwidth/2
polyhi = 2 - barwidth/2
xs = rep(c(polylo,polyhi,polyhi,polylo), 7)
# make the ys of the polygon
tmp1 = c(0, smalldummy$lineposx[1:7])
tmp2 = c(0, smalldummy$lineposx[8:14])
ys = c()
for(i in 1:7) {
nu = c(tmp1[i], tmp2[i], tmp2[i+1], tmp1[i+1])
ys = c(ys, nu)
}
m = as.factor(rep(0:6, each=4))
tmpdf = data.frame(xs, ys, mRS = m)
bigdummy = merge(smalldummy, tmpdf, by = "mRS")
ggplot(data = bigdummy, aes(x = treatment, y = rsfreq, fill = mRS)) +
geom_bar(aes(width = barwidth),stat="identity",position="fill") +
geom_text(aes(label=as.character(mRS),
y = ifelse(rsfreq != 0, textpos, NA)),
size = 8, colour = "white") +
geom_polygon(aes(x = xs, y = ys, group = mRS, fill = mRS)) +
ylab("Modified Rankin Scale") + xlab("Treatment") +
coord_flip() + theme_bw() + opts(legend.position = "none") + no_margins +
sfm
--
View this message in context: http://r.789695.n4.nabble.com/ggplot2-geom-polygon-fill-tp4361919p4361919.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list