Изменение размера линии, нарисованной с помощью stat_function - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь нанести ряд функций с stat_function в ggplot2 на R. Функция остается неизменной, но некоторые параметры меняются в соответствии со значениями во фрейме данных.Я использовал цикл for для построения каждой другой формы функции.

Я хочу использовать разные размеры для нарисованных линий, но независимо от того, как я изменяю параметр aes, размер линий, нарисованныхstat_function остается постоянным.Я могу просто изменить размер других линий на графике.

Код

 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()

и данные

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

любая помощь будет принята

1 Ответ

0 голосов
/ 11 сентября 2018

Поскольку вы хотите, чтобы size было определенным значением, вы должны поместить его за пределы aes.

Помещая size=1 в aes, вы устанавливаете шкалу, которую вы должны определить с помощью функции scale_size_*. Это то же самое, что если вы положите 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

...