1

I'm trying to plot a series of functions with stat_function in ggplot2 on R. The function remains the same throughout, but some of the parameters change according to values in a data frame. I used a for loop to plot each different form of the function.

I want to use different sizes for the lines drawn, but no matter how I change the aes parameter, the size of the lines drawn by stat_function remains constant. I can change the size of other lines in the plot just fine.

The code

 test_fun <- function(x,d,fstart,fend,h){
  mp=mean(c(fstart, fend))
  a=h/((mp-fstart)*(mp-fend))
  a*(x-fstart)*(x-fend)
}
plot <- ggplot() + xlim(min(gtf.tx$start), max(gtf.tx$end))+ ylim(-pheight/2,pheight/2)
for(i in 1:nrow(rmats_to_plot)){
  weight=rmats_to_plot[i,5]*100
  start=rmats_to_plot[i,1]
  end=rmats_to_plot[i,2]
  flip=rmats_to_plot[i,6]
  height=rmats_to_plot[i,8]
  plot <- plot+stat_function(mapping = aes(size=1),xlim = c(start,end),fun = test_fun,args = list(fstart=start,fend=end, d=flip,h=height))

}
plot <- plot +  geom_hline(yintercept = 0,size=7,color='white')+
  geom_hline(yintercept=0,alpha=.9, size=1)+geom_segment(data = gtf.tx,aes(x=start,xend=end,y=0, yend=0),size=7)+theme_minimal()

and the data

start   end sample_1    sample_2    total_weight    flip    size    height
31.98   32.71   20.5    39  0.1662  -1  0.73    20
33.36   49.86   16.5    27.5    0.1229  -1  16.5    40
12.13   29.21   20.5    39  0.1662  -1  17.08   60
12.13   32.71   28.5    34  0.1746  1   20.58   -20
51.17   79.79   16.5    40  0.1578  1   28.62   -40
12.13   49.86   21.5    46  0.1885  1   37.73   -60
33.36   79.79   4   2.5 0.0182  -1  46.43   80
12.13   79.79   0   2   0.0056  1   67.66   -80

any help would be appreciated

Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214
  • You should add "width" argument to your code. Please refer to the below article for more details. [https://stackoverflow.com/questions/12985091/print-data-frame-with-columns-center-aligned](https://stackoverflow.com/questions/12985091/print-data-frame-with-columns-center-aligned) – Prasan Karunarathna Sep 10 '18 at 21:47

1 Answers1

-1

Since you want size to be a specific value, you should put it outside the aes.

By putting size=1 in the aes, you're setting up a scale which you need to define with a scale_size_* function. It's the same thing as if you put size='dog'

ggplot(mtcars) + geom_point(aes(x=mpg, y=disp, size = 1))

enter image description here

ggplot(mtcars) + geom_point(aes(x=mpg, y=disp, size = 9))

enter image description here

ggplot(mtcars) + geom_point(aes(x=mpg, y=disp), size = 9)

enter image description here

divibisan
  • 11,659
  • 11
  • 40
  • 58