I'm having trouble figuring out how to format Date variables when used as axis labels in graphs. The particular case here is an attempt to re-create Nightingale's coxcomb graph with ggplot2, where I'd like the months to be labeled as "Mar 1885", "Apr 1885", using a date format of "%b %Y" applied to label the dates, or really anything other than "1885-03-01". I know the solution has to do with formatting the dates, while preserving their
status as an ordered factor, but I don't know how to do that.

Here's a subset of the data:
Night1 <-
structure(list(Date = structure(c(-42278, -42248, -42217, -42187,
-42156, -42125, -42095, -42064, -42034, -42003, -41972, -42278,
-42248, -42217, -42187, -42156, -42125, -42095, -42064, -42034,
-42003, -41972, -42278, -42248, -42217, -42187, -42156, -42125,
-42095, -42064, -42034, -42003, -41972), class = "Date"), Cause = c("Disease",
"Disease", "Disease", "Disease", "Disease", "Disease", "Disease",
"Disease", "Disease", "Disease", "Disease", "Wounds", "Wounds",
"Wounds", "Wounds", "Wounds", "Wounds", "Wounds", "Wounds", "Wounds",
"Wounds", "Wounds", "Other", "Other", "Other", "Other", "Other",
"Other", "Other", "Other", "Other", "Other", "Other"), Deaths = c(1.4,
6.2, 4.7, 150, 328.5, 312.2, 197, 340.6, 631.5, 1022.8, 822.8,
0, 0, 0, 0, 0.4, 32.1, 51.7, 115.8, 41.7, 30.7, 16.3, 7, 4.6,
2.5, 9.6, 11.9, 27.7, 50.1, 42.8, 48, 120, 140.1), Regime = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("Before", "After"), class = c("ordered", "factor"
))), .Names = c("Date", "Cause", "Deaths", "Regime"), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 25L, 26L, 27L, 28L,
29L, 30L, 31L, 32L, 33L, 34L, 35L, 49L, 50L, 51L, 52L, 53L, 54L,
55L, 56L, 57L, 58L, 59L), class = "data.frame")

> str(Night1)
'data.frame':   33 obs. of  4 variables:
$ Date  :Class 'Date'  num [1:33] -42278 -42248 -42217 -42187 -42156 ...
$ Cause : chr  "Disease" "Disease" "Disease" "Disease" ...
$ Deaths: num  1.4 6.2 4.7 150 328.5 ...
$ Regime: Ord.factor w/ 2 levels "Before"<"After": 1 1 1 1 1 1 1 1 1 1 ...
>

Here are a few things I've tried, some of which give errors and others of which
simply give the wrong graph

library(ggplot2)
cxc1 <- ggplot(Night1, aes(x = factor(Date), y=Deaths, fill = Cause)) +
# do it as a stacked bar chart first
geom_bar(width = 1, position="identity", color="black") +
# set scale so area ~ Deaths
scale_y_sqrt()
# A coxcomb plot = bar chart + polar coordinates
cxc1 + coord_polar(start=3*pi/2) + opts(title="Causes of Mortality in the Army in the East") + xlab("")

# why doesn't this work?
cxc1 <- cxc1 + scale_x_date(format="%b %Y", major="months")
cxc1
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

OK, I tried formatting Date first, in different ways. Each time, I get a graphical result, but I don't know how to use format() for dates to make the result ordered as normal dates, rather
than as character strings.

Night1$dt1 <- format(Night1$Date, "%b %Y")
cxc1 <- ggplot(Night1, aes(x = factor(dt1), y=Deaths, fill = Cause)) +
geom_bar(width = 1, position="identity", color="black") +
scale_y_sqrt()
cxc1 + coord_polar(start=3*pi/2) + opts(title="Causes of Mortality in the Army in the East") + xlab("")

-Michael

--
Michael Friendly Email: frien...@yorku.ca Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    http://www.math.yorku.ca/SCS/friendly.html
Toronto, ONT  M3J 1P3 CANADA

______________________________________________
R-help@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.

Reply via email to