r - ggplot2 - factor colour and legend adjustment -


i have written short script plot trends of measured radioactivity activities on 2 separate measurement devices. script shown below

pkgload <- function(x)   {     if (!require(x,character.only = true))     {       install.packages(x,dep=true, repos='http://star-www.st-andrews.ac.uk/cran/')       if(!require(x,character.only = true)) stop("package not found")     }    }  pkgload("ggplot2") pkgload("xlconnect") pkgload("reshape2")  #load workbook wb<-loadworkbook("capintecqc.xlsx")  df_blue <-readworksheet(wb, sheet = "blue", startcol=1, endcol=6) #sort date format df_blue$date <- as.date(df_blue$date , "%d/%m/%y") df_blue[order(df_blue$date ),]  df_gold <-readworksheet(wb, sheet = "gold", startcol=1, endcol=6) df_gold$date <- as.date(df_gold$date , "%d/%m/%y") df_gold[order(df_gold$date ),]  #reference cs-137 details ref_activity <- 9.3 half_life <- 30.23 ref_date <- as.date('06/01/08',format='%d/%m/%y')  blue_melt <- melt(df_blue[,c(1,2:6)], id="date", value.name="activity", variable.name="isotope")  #add new column data frame expected activity df_gold["exp_act"] <- round(ref_activity*exp((-0.693/half_life)*as.numeric(difftime(df_gold$date,ref_date))/365.25),3) df_gold["exp_act_0.95"] <- 0.95 * df_gold$exp_act df_gold["exp_act_1.05"] <- 1.05 * df_gold$exp_act    gold_melt <- melt(df_gold[,c(1,2:6)], id="date", value.name="activity", variable.name="isotope")  p <- ggplot( null )+geom_point(data = gold_melt, aes(x=date,y=activity, col=isotope)) + geom_ribbon(data = df_gold, aes(x = date, ymin = exp_act_0.95, ymax = exp_act_1.05), fill='blue', alpha=0.2) + geom_point(data = blue_melt, aes(x=date,y=activity, col=isotope), shape=2) + theme_bw() print(p) 

enter image description here

i not competent r/ggplot2. final plot show measured activity each radionuclide same color both devices (i.e cs-137 in red, 99mtc in blue). how can graph plots different colours.

also legend non-pleasing. (i) format each nuclide, picked excel header changes cs-137 cs.137. how can have cs-137, tc-99m etc headers? (ii) each radionuclide duplicated in legend - 1 each device. possible show legend first data frame (df_gold) or better have text in legend, text color matched marker color in plot?)

df_gold structure

structure(list(date = structure(c(15708, 15709, 15712, 15713,  15714, 15715, 15716, 15719, 15720, 15721, 15722, 15723, 15726,  15727, 15729, 15730, 15733, 15734, 15735, 15736, 15740, 15741,  15743, 15747, 15748, 15749, 15750, 15751, 15754, 15755, 15756,  15757, 15758, 15761, 15762, 15764, 15765, 15768, 15769, 15770,  15771, 15772, 15775, 15776, 15777, 15779, 15782, 15783, 15784,  15785, 15786, 15789, 15790, 15791, 15792, 15797, 15798, 15799,  15800), class = "date"), cs..137 = c(8.2, 8.1, 8.1, 8.1, 8.1,  8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1,  8.1, 8.1, 8.1, 8.2, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8, 8.2,  8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1,  8.1, 8.1, 8.1, 8, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1, 8.1,  8.1, 8.1), in..111 = c(6.49, 6.47, 6.48, 6.43, 6.49, 6.51, 6.5,  6.47, 6.48, 6.4, 6.48, 6.48, 6.48, 6.49, 6.49, 6.47, 6.48, 6.48,  6.5, 6.47, 6.49, 6.55, 6.46, 6.49, 6.48, 6.48, 6.46, 6.48, 6.49,  6.44, 6.49, 6.46, 6.45, 6.46, 6.46, 6.43, 6.49, 6.47, 6.45, 6.43,  6.44, 6.44, 6.44, 6.46, 6.45, 6.47, 6.45, 6.43, 6.44, 6.47, 6.45,  6.46, 6.45, 6.46, 6.39, 6.46, 6.44, 6.42, 6.41), i..123 = c(6.97,  6.94, 6.96, 6.91, 6.92, 6.95, 6.93, 6.92, 6.93, 7, 6.97, 6.96,  6.96, 6.94, 6.98, 6.97, 6.95, 6.95, 6.94, 6.96, 6.97, 7.01, 6.92,  7, 6.98, 6.97, 6.91, 6.99, 6.95, 6.88, 6.96, 6.91, 6.91, 6.93,  6.94, 6.94, 6.97, 6.93, 6.93, 6.93, 6.96, 6.94, 6.94, 6.92, 6.93,  6.91, 6.93, 6.92, 6.92, 6.91, 6.91, 6.89, 6.92, 6.9, 6.9, 6.91,  6.91, 6.9, 6.9), i..131 = c(10.5, 10.5, 10.5, 10.5, 10.5, 10.5,  10.5, 10.5, 10.5, 10.8, 10.5, 10.6, 10.5, 10.5, 10.5, 10.5, 10.5,  10.5, 10.5, 10.5, 10.5, 10.6, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5,  10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.4,  10.5, 10.4, 10.5, 10.5, 10.5, 10.4, 10.5, 10.4, 10.4, 10.5, 10.4,  10.4, 10.4, 10.4, 10.4, 10.3, 10.5, 10.5, 10.5, 10.6), tc..99m = c(15,  15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15.1, 15, 15, 15.1, 15,  15, 15, 15, 15.1, 15, 15.1, 15, 15, 15, 15, 15, 15, 15, 15, 15,  15, 15, 15, 15, 14.9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  14.9, 14.8, 14.9, 14.9, 14.9, 14.9, 15, 15, 14.8, 15, 15, 15,  15), exp_act = c(8.294, 8.293, 8.292, 8.291, 8.291, 8.29, 8.29,  8.288, 8.288, 8.287, 8.287, 8.286, 8.285, 8.284, 8.283, 8.283,  8.281, 8.28, 8.28, 8.279, 8.277, 8.277, 8.276, 8.274, 8.273,  8.273, 8.272, 8.272, 8.27, 8.27, 8.269, 8.269, 8.268, 8.266,  8.266, 8.265, 8.264, 8.263, 8.262, 8.262, 8.261, 8.261, 8.259,  8.259, 8.258, 8.257, 8.256, 8.255, 8.255, 8.254, 8.254, 8.252,  8.251, 8.251, 8.25, 8.248, 8.247, 8.247, 8.246), exp_act_0.95 = c(7.8793,  7.87835, 7.8774, 7.87645, 7.87645, 7.8755, 7.8755, 7.8736, 7.8736,  7.87265, 7.87265, 7.8717, 7.87075, 7.8698, 7.86885, 7.86885,  7.86695, 7.866, 7.866, 7.86505, 7.86315, 7.86315, 7.8622, 7.8603,  7.85935, 7.85935, 7.8584, 7.8584, 7.8565, 7.8565, 7.85555, 7.85555,  7.8546, 7.8527, 7.8527, 7.85175, 7.8508, 7.84985, 7.8489, 7.8489,  7.84795, 7.84795, 7.84605, 7.84605, 7.8451, 7.84415, 7.8432,  7.84225, 7.84225, 7.8413, 7.8413, 7.8394, 7.83845, 7.83845, 7.8375,  7.8356, 7.83465, 7.83465, 7.8337), exp_act_1.05 = c(8.7087, 8.70765,  8.7066, 8.70555, 8.70555, 8.7045, 8.7045, 8.7024, 8.7024, 8.70135,  8.70135, 8.7003, 8.69925, 8.6982, 8.69715, 8.69715, 8.69505,  8.694, 8.694, 8.69295, 8.69085, 8.69085, 8.6898, 8.6877, 8.68665,  8.68665, 8.6856, 8.6856, 8.6835, 8.6835, 8.68245, 8.68245, 8.6814,  8.6793, 8.6793, 8.67825, 8.6772, 8.67615, 8.6751, 8.6751, 8.67405,  8.67405, 8.67195, 8.67195, 8.6709, 8.66985, 8.6688, 8.66775,  8.66775, 8.6667, 8.6667, 8.6646, 8.66355, 8.66355, 8.6625, 8.6604,  8.65935, 8.65935, 8.6583)), row.names = c(na, -59l), .names = c("date",  "cs..137", "in..111", "i..123", "i..131", "tc..99m", "exp_act",  "exp_act_0.95", "exp_act_1.05"), class = "data.frame") 

df_blue structure

structure(list(date = structure(c(15790, 15791, 15792, 15797,  15798, 15799, 15800), class = "date"), cs.137 = c(8.1, 8.2, 8.2,  8.2, 8.2, 8.2, 8.2), i.123 = c(6.82, 6.85, 6.91, 6.84, 6.82,  6.82, 6.83), i.131 = c(10.5, 10.6, 10.6, 10.5, 10.6, 10.6, 10.6 ), in.111 = c(6.35, 6.45, 6.43, 6.37, 6.38, 6.4, 6.37), x99m.tc = c(15,  15, 15.1, 15.1, 15.1, 15.1, 15.1)), .names = c("date", "cs.137",  "i.123", "i.131", "in.111", "x99m.tc"), row.names = c(na, -7l ), class = "data.frame") 

my approach bind both data frames , add new column contains name of device (gold or blue).

df<-rbind(gold_melt,blue_melt) df$device<-rep(c("gold","blue"),c(nrow(gold_melt),nrow(blue_melt))) 

with function recode() library car change names of isotope should be.

df$isotope<-recode(df$isotope,"c('cs..137','cs.137')='cs-137';        c('i..123','i.123')='i-123';        c('i..131','i.131')='i-131';        c('in..111','in.111')='in-111'        ;c('tc..99m','x99m.tc')='tc-99m'") 

now need 1 call geom_point() using new data frame. added shape=device different shapes each device.

ggplot(null) +    geom_point(data=df,aes(x=date,y=activity, col=isotope,shape=device))+   geom_ribbon(data = df_gold, aes(x = date, ymin = exp_act_0.95, ymax = exp_act_1.05), fill='blue', alpha=0.2) 

enter image description here


Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -