Цвет граней в ggplot по непрерывной переменной - PullRequest
0 голосов
/ 25 февраля 2019

** Отредактировано с повторяемыми данными **

У меня есть data.frame с графиками роста во времени для 50 экспериментальных обработок.Я построил их в виде граненой сетки 5x10.Я также заказал их способом, который имеет смысл, учитывая мои экспериментальные методы лечения.

Я запустил функцию регрессии, чтобы найти скорость роста в каждой обработке, и сохранил значения наклона в другом кадре данных.Я нанес на график данные, линию регрессии и значение скорости роста, но я хочу раскрасить фоны отдельных граненых графиков в соответствии с этим значением наклона регрессии, но я не могу понять, как установить цвет для вызованепрерывная переменная, особенно одна из другого df с разным количеством строк (исходный df имеет 300 строк, df, который я хочу вызвать, имеет 50 - по одному для каждой обработки).

Мой код выглядит следующим образом:

Df:

df <- data.frame(matrix(ncol = 3,nrow=300))
colnames(df) <- c("Trt", "Day", "Size")
df$Trt <- rep(1:50, each=6)
df$Day <- rep_len(1:6, length.out=300)
df$Size <- rep_len(c(3,5,8,9,12,12,3,7,10,16,17,20),length.out = 300)

Функция регрессии и выходной фрейм данных:

regression=function(df){
  reg_fun<-lm(formula=df$Size~df$Day) 
  slope<-round(coef(reg_fun)[2],3) 
  intercept<-round(coef(reg_fun)[1],3) 
  R2<-round(as.numeric(summary(reg_fun)[8]),3)
  R2.Adj<-round(as.numeric(summary(reg_fun)[9]),3)
  c(slope,intercept,R2,R2.Adj)
}
library(plyr)
slopevalues<-ddply(df,"Trt",regression)
colnames(slopevalues)<-c ("Trt","slope","intercept","R2","R2.Adj")

Сюжет:

ggplot(data=df, aes(x=Day, y=Size))+
geom_line() +
geom_point() +
xlab("Day") + ylab("Size (μm)")+
geom_smooth(method="lm",size=.5,se=FALSE)+ 
geom_text(data=slopevalues,
            inherit.aes=FALSE, 
            aes(x =1, y = 16,hjust=0,
            label=paste(slope)))+ 
facet_wrap(~ Trt, nrow=5)

Я хочу покрасить фон отдельных графиков в соответствии со значением наклона (slopevalues ​​$ slope) на градиенте.Мои реальные данные - это не просто повторение двух значений, поэтому я хочу сделать это с градиентом цветов в соответствии с этим значением.

Любой совет приветствуется.

введите описание изображения здесь

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете использовать geom_rect с бесконечными координатами, чтобы сделать это:

ggplot(data=df, aes(x=Day, y=Size))+
  ## This is the only new bit
  geom_rect(
    aes(fill = slope, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf), 
    slopevalues,
    inherit.aes = FALSE
  ) +
  ## New bit ends here
  geom_line() +
  geom_point() +
  xlab("Day") + ylab("Size (μm)")+
  geom_smooth(method="lm",size=.5,se=FALSE)+ 
  geom_text(data=slopevalues,
            inherit.aes=FALSE, 
            aes(x =1, y = 16,hjust=0,
                label=paste(slope)))+ 
  facet_wrap(~ Trt, nrow=5)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...