2017-01-06 3 views
-1

Я хочу построить линию, используя geom_line позади мой boxplot, мне наконец удалось комбинировать построение линии с ящиком. У меня есть этот набор данных, который я использовал для создания boxplot:
ggplot2: линия построения за коробкой

>head(MdataNa) 

      1   2   3   4   5   6   7 
1 -0.02798634 -0.05740014 -0.02643664 0.02203644 0.02366325 -0.02868668 -0.01278713 
2 0.20278229 0.19960302 0.10896017 0.24215229 0.31925211 0.29928739 0.15911725 
3 0.06570653 0.08658396 -0.06019098 0.01437147 0.02078022 0.13814853 0.11369999 
4 -0.42805441 -0.91945721 -1.05555731 -0.90877542 -0.77493682 -0.90620917 -1.00535742 
5 0.39922939 0.12347996 0.06712451 0.07419287 -0.09517628 -0.12056720 -0.40863078 
6 0.52821596 0.30827515 0.29733794 0.30555717 0.31636676 0.11592717 0.16957927 

У меня есть концентрация глюкозы, которая должна быть построена в очереди за эту boxplot:

# glucose curve values 
require("scales") 
offconc <- c(0,0.4,0.8,1.8,3.5,6.9,7.3) 
offtime <- c(9,11.4,12.9,14.9,16.7,18.3,20.5) 

# now we have to scale them so they fit in the (boxplot)plot 
time <- rescale(offtime, to=c(1,7)) 
conc <- rescale(offconc, to=c(-1,1)) 
glucoseConc <- data.frame(time,conc) 
glucoseConc2 <- melt(glucoseConc, id = "time") 

Тогда я нанесен эти данные, но Я только был в состоянии построить кривую глюкозы в ФРОНТА в boxplot вместо позади него, я использовал этот код:

boxNa <- ggplot(stack(MdataNa), aes(x = ind, y = values)) + 
    geom_boxplot() + 
    coord_cartesian(y = c(-1.5,1.5)) + 
    labs(list(title = "After Loess", x = "Timepoint", y = "M")) + 
    geom_line(data=glucoseConc2,aes(x=time,y=value),group=1) 

выход кода выше:

graph produced by the above code

EDIT как это было предложено замечания (не работает)

boxNa <- ggplot(stack(MdataNa), aes(x = ind, y = values)) + 
    geom_line(data=glucoseConc2,aes(x=time,y=value),group=1) + 
    geom_boxplot(data=stack(MdataNa), aes(x = ind, y = values)) + 
    coord_cartesian(y = c(-1.5,1.5)) + 
    labs(list(title = "After Loess", x = "Timepoint", y = "M")) 

это даст следующее сообщение об ошибке:

Error: Discrete value supplied to continuous scale

Возможно, я делаю что-то не так?

+5

Перестановка так 'geom_boxplot' вызывается после' geom_line.' – alistaire

+0

я попробовал это, но это даст эту ошибку: «дискретное значение, подаваемое на непрерывную шкалу» Я вставляю этот код в свой вопрос – user7384813

+2

Это означает, что вы отправляете неверный тип данных в 'geom_line'. Возможно, попробуем выпустить вызов 'ggplot', так как все все время указывается в геометрии. Концепция действительно работает: 'library (tidyverse); mtcars%>% rownames_to_column ('car')%>% gather (var, val, -car)%>% group_by (var)%>% mutate (mean_val = mean (val))%>% ggplot (aes (var, val)) + geom_line (aes (var, mean_val), group = 1) + geom_boxplot() ' – alistaire

ответ

0

Вот решение. Идея заключается в том, чтобы преобразовать ось й в непрерывных значениях:

ggplot() + 
    geom_line(data=glucoseConc2,aes(x=time,y=value),group=1)+ 
    geom_boxplot(data=stack(MdataNA), aes(x = as.numeric(ind), y = values, group=ind)) + 
    coord_cartesian(y = c(-1.5,1.5)) + 
    labs(list(title = "After Loess", x = "Timepoint", y = "M"))+ 
    scale_x_continuous(breaks=1:7) 
+0

@ user7384813, если он работает, вы можете рассмотреть возможность его пометить как разрешенную – timat

Смежные вопросы