Search code examples
rggplot2plotgraphgraphing

ggplot make default point size larger when size is already determined by another variable


I am trying to display data that includes non-detects. For the ND I want to have a circular outline at different sizes so that the lines do not overlap each other. I pretty much have what I want, but for the parameter cis-DCE the circular outline just makes the point look bigger instead of being a distinct outline. How do I attribute size to the parameter and also make the starting size larger?

I will include all of the code I am using for the graphing, but I am specifically working on this bit right now.

geom_point(aes(x= date, y = lrl, group = parm_nmShort, size = parm_nmShort), shape = 1) + #marking lower limit

I also know that I could use facet_wraps and I've done that previously, but historically this data has been shown in one graph, but without identifying the NDs and I do not want to drastically alter the display of the data and confuse anyone.

enter image description here

{
  #graphing
  
  # folder where you want the graphs to be saved:
  results <- 'C:/Users/cbuckley/OneDrive - DOI/Documents/Projects/New Haven/Data/Graphs/'  
  
  {
    
    VOC.graph <- function(df, na.rm = TRUE, ...){
    
  
      df$parm_nmShort <- factor(df$parm_nm, levels = c("cis.1.2.Dichloroethene_77093",
                                                       "Trichloroethene_34485", 
                                                       "Tetrachloroethene_34475"), 
                                labels = c("cis-DCE", "TCE", "PCE"))  
      
      # create list of sites in data to loop over 
      site_list <- unique(df$site_nm)
      
      # create for loop to produce ggplot2 graphs 
      for (i in seq_along(site_list)) { 
        
        # create plot for each county in df 
        plot <- 
          ggplot(subset(df, df$site_nm==site_list[i]),
                 aes(x = date, y = result, 
                     group = parm_nmShort, 
                     color = parm_nmShort))  +
          
          geom_point() +  #add data point plot
          
          geom_line() +   #add line plot
          
          #geom_point(aes(y = lrl, group = parm_nmShort, shape = parm_nmShort)) +
          geom_point(aes(x= date, y = lrl, group = parm_nmShort, size = parm_nmShort), shape = 1) + #marking lower limit
          
          #scale_shape_manual(values = c("23","24","25")) + #create outlier shapes
          
          #facet_wrap(~parm_nmShort) +
          
          ggtitle(site_list[i]) + #name graphs well names
          
          #  theme(legend.position="none") + #removed legend
          
          labs(x = "Year", y = expression(paste("Value, ug/L"))) +  #add x and y label titles
          
          theme_article() + #remove grey boxes, outline graph in black
          
          theme(legend.title = element_blank()) + #removes legend title
        
          scale_x_date(labels = date_format("%y"),
                       limits = as.Date(c("2000-01-01","2021-01-01"))) #+ # set x axis for all graphs
          
        
        #  geom_hline(yintercept = 5) #+ #add 5ug/L contaminant limit horizontal line
        
        #  theme(axis.text.x = element_text(angle = 45, size = 12, vjust = 1)) + #angles x axis titles 45 deg
        
        
        
        
        
        #  theme(aspect.ratio = 1) +
        #  scale_color_hue(labels = c("cic-DCE", "PCE", "TCE")) +  #change label names  
        #  scale_fill_discrete(breaks = c("PCE", "TCE", "cic-DCE"))
        
        # Code below will let you block out below the resolution limit    
        #    geom_ribbon(aes(ymin = 0, ymax = ###LRL###), fill ="white", color ="grey3") +
        #    geom_line(color ="black", lwd = 1)
        
        
        
        
        #ggsave(plot, 
        #       file=paste(results, "", site_list[i], ".png", sep=''),
        #       scale=1)
        
        # print plots to screen
        print(plot)
      }
    }
    
    #run graphing function with long data set
    VOC.graph(data)
  }}

Solution

  • Well after a lot of playing around, I figured out the answer to my own question. I figured I'd leave the question up because none of the solutions I found online worked for me but this code did.

              geom_point(aes(x= date, y = lrl, group = parm_nmShort, shape = parm_nmShort, size = parm_nmShort)) + #identify non detects
              
              scale_shape_manual(values = c(1,1,1)) +
              
              scale_size_manual(values = c(3,5,7)) +
    

    I'm not very good at R, but for some reason when I didn't include the group and shape in the aes as parm_nmShort, I couldn't mannualy change the values. I don't know if it's because I have more than one geom_point in my whole script and so maybe it didn't know which one to change.

    enter image description here