Reputation: 7928
I'm using a heatmap to follow the attrition in my experiment and I would like to print some date information exclusively in the two first columns, but for some reason ggplot2 won't accept that many missing observations.
This is how my plot look at the moment (way to many dates).
Can anyone tell me how I can limit the geom_text to only the two first columns?
See blow for sample code.
require(ggplot2)
require(plyr)
require(reshape)
# create sample data
set.seed(666)
dfn <- data.frame(
Referral = seq(as.Date("2007-01-15"), len= 26, by="23 day"),
VISIT01 = seq(as.Date("2008-06-15"), len= 24, by="15 day")[sample(30, 26)],
VISIT02 = seq(as.Date("2008-12-15"), len= 24, by="15 day")[sample(30, 26)],
VISIT03 = seq(as.Date("2009-01-01"), len= 24, by="15 day")[sample(30, 26)],
VISIT04 = seq(as.Date("2009-03-30"), len= 24, by="60 day")[sample(30, 26)],
VISIT05 = seq(as.Date("2010-11-30"), len= 24, by="6 day")[sample(30, 26)],
VISIT06 = seq(as.Date("2011-01-30"), len= 24, by="6 day")[sample(30, 26)],
Discharge = seq(as.Date("2012-03-30"), len= 24, by="30 day")[sample(30, 26)],
Patient = factor(1:26, labels = LETTERS),
openCase = rep(0:1, 100)[sample(100, 26)])
# set today's data for cases that do not have an Discharge date
dfn$Discharge[ is.na(dfn$Discharge) ] <- as.Date("2014-01-30")
mdfn <- melt(dfn, id=c('Patient', 'openCase'), variable_name = "Visit")
names(mdfn)[4] <- 'Year'
# order data in mdfn by 'Referral' in dfn
mdfn$Patient <- factor(mdfn$Patient,levels = (dfn$Patient[order(dfn$Referral)]),
ordered = TRUE)
mdfn$Year2 <- ifelse(mdfn$Year != 0, 1, 0)
mdfn$Year2[ is.na(mdfn$Year) ] <- 0
mdfn$FWrap <- 'Core Measures'
mdfn$FWrap[mdfn$Visit == 'Referral'] <- 'Referral'
mdfn$FWrap[mdfn$Visit == 'VISIT05' | mdfn$Visit == 'VISIT06'] <- 'Optional Measures'
mdfn$FWrap[mdfn$Visit == 'Discharge'] <- 'Discharge'
mdfn$FWrap <- ordered(mdfn$FWrap, levels = c('Referral', 'Core Measures', 'Optional Measures', 'Discharge'))
base_size <- 9
m2 <- ggplot(mdfn, aes(Visit, Patient)) +
geom_tile(aes(fill = Year2), colour = "gray") +
scale_fill_gradient(low = "white", high = "steelblue")
m2 + theme_grey(base_size = base_size) + labs(x = "", y = "") +
scale_x_discrete(expand = c (0, 0)) + scale_y_discrete(expand = c(0, 0)) +
opts(legend.position = "none", axis.ticks = theme_blank(),
axis.text.x = theme_text(size = base_size * 0.8, angle = 330, hjust = 0,
colour = "grey50")) + facet_grid(~ FWrap, scales = "free", space="free") +
geom_text(aes (label=format(Year, "%b. %d, %Y")), size=3, colour='white')
# this is how I thought I could solve it.
mdfn$Yearlabel <- mdfn$Year
mdfn$Yearlabel[mdfn$Visit != 'Referral' & mdfn$Visit != 'VISIT01'] <- NA
# mdfn[,c(4,5,7,3)]
m2 <- ggplot(mdfn, aes(Visit, Patient)) +
geom_tile(aes(fill = Year2), colour = "gray") +
scale_fill_gradient(low = "white", high = "steelblue")
m2 + theme_grey(base_size = base_size) + labs(x = "", y = "") +
scale_x_discrete(expand = c (0, 0)) + scale_y_discrete(expand = c(0, 0)) +
opts(legend.position = "none", axis.ticks = theme_blank(),
axis.text.x = theme_text(size = base_size * 0.8, angle = 330, hjust = 0,
colour = "grey50")) + facet_grid(~ FWrap, scales = "free", space="free") +
geom_text(aes (label=format(Yearlabel, "%b. %d, %Y")), size=3, colour='white')
Upvotes: 2
Views: 2277
Reputation: 77106
Try this,
p = ggplot(mdfn, aes(Visit, Patient)) +
geom_tile(aes(fill = Year2), colour = "gray") +
scale_fill_gradient(low = "white", high = "steelblue") +
theme_grey(base_size = base_size) +
labs(x = "", y = "") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
opts(legend.position = "none", axis.ticks = theme_blank(),
axis.text.x = theme_text(size = base_size * 0.8, angle = 330,
hjust = 0, colour = "grey50")) +
facet_grid(~ FWrap, scales = "free", space="free")
s = subset(mdfn, Visit %in% c("Referral","VISIT01"))
p + geom_text(aes(label=format(Year, "%b. %d, %Y")), data = s,
size=3, colour = 'white')
Upvotes: 3