Построение вторичной оси Y при необходимости преобразования журнала в первичный - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь построить линейный график с двумя осями (см. Pi c). Я пробовал много способов из примеров, взятых отсюда, но ничего не помогло. Левая ось должна быть Log10, а вторичная (правая) нормальная. Кроме того, мне нужно установить их пределы. Все данные поступают из одного набора данных (dfw c), и я взял два подмножества (здесь обозначены как «aa» и «bb», Y-слева и Y-справа, соответственно). Наконец, я хочу получить цвета легенды по деформации (как показано в pi c слева). Я надеюсь, что вы можете мне помочь, заранее спасибо!

  aa <- ggplot(dfwc, aes(x=time, y=numbers, color=strain, group=strain)) + theme_dp1() + 
              geom_point(aes(color=strain, group=strain), subset(dfwc,strain %in% c("mc", "mut1", "mut2", "mut3")), alpha=.5, size=2) +
              geom_errorbar(aes(ymax=numbers-sd, ymin=numbers+sd), subset(dfwc,strain %in% c("mc", "mut1", "mut2", "mut3")), size=.4, width=.1, show.legend=FALSE) +
              geom_line(aes(color=strain), subset(dfwc,strain %in% c("mc", "mut1", "mut2", "mut3")), size=.6, linetype="dashed") +
            scale_y_log10(breaks=c(0.01, 0.1, 1, 10),
                    labels=scales::trans_format("log10", scales::math_format(10^.x))) +
            annotation_logticks(colour="#8d96a3", sides='l', size = .5, short=unit(1,"mm"), mid=unit(2,"mm"), long=unit(2.5,"mm")) + 
            expand_limits(y=c(0.05,8)) +  #set Y1 limits
            scale_color_manual(name = "Strain", values=colorsg, labels=c("WT", "RsmB", "RsmB:IGR", "RsmB,vfmE"))+
           labs(x=bold("Time")~(hours), y=bold("Bacterial growth")~(OD[600]))  # axes labels
    aa
    #second subset
  bb <- ggplot(dfwc, aes(x=time, y=numbers, color=strain, group=strain)) + theme_dp1() + 
            geom_point(aes(), subset(dfwc,strain %in% c("vmc", "vmut1", "vmut2", "vmut3")), alpha=.4, size=1.5, show.legend=FALSE) +
            geom_errorbar(aes(ymax=numbers-sd, ymin=numbers+sd), subset(dfwc,strain %in% c("vmc", "vmut1", "vmut2", "vmut3")), size=.4, width=.05, show.legend=FALSE) +
            geom_line(aes(), subset(dfwc,strain %in% c("vmc", "vmut1", "vmut2", "vmut3")), size=.6, linetype=1, show.legend=FALSE) +
            scale_y_continuous(sec.axis = sec_axis(~.*1, name = "This is my Right Axis"))
    bb}

Я хочу, чтобы эти 2 изображения были на одном графике

enter image description here

Преобразование данных (здесь необработанные данные: https://docs.google.com/spreadsheets/d/1zuNzjTjf_0MRyRoTCEfiP1WqRl3viWHueNXepiA7m9o/edit#gid = 0 )

data_long <- gather(curve, time, numbers, X0:X12, factor_key=TRUE) #change according to hours numbers
data_long
plot(data_long)
names(data_long)
str(data_long)  #To view variable structure

# Rename factor names (time) from "h0" to "h12" to "0" to "14"  #useful! 
levels(data_long$time)[levels(data_long$time)=="X0"] <- "0"
levels(data_long$time)[levels(data_long$time)=="X2"] <- "2"
levels(data_long$time)[levels(data_long$time)=="X4"] <- "4"
levels(data_long$time)[levels(data_long$time)=="X6"] <- "6"
levels(data_long$time)[levels(data_long$time)=="X8"] <- "8"
levels(data_long$time)[levels(data_long$time)=="X10"] <- "10"
levels(data_long$time)[levels(data_long$time)=="X12"] <- "12"
levels(data_long$time)[levels(data_long$time)=="X14"] <- "14"

#Statistics ! 
dfwc<-summarySE(data_long, measurevar="numbers", groupvars=c("strain", "time"))
dfwc  

1 Ответ

0 голосов
/ 07 мая 2020

Я не могу помочь вам с добавлением вторичной оси бревна слева, при наличии нормальной оси справа. Обычно вы делаете наоборот. Кроме того, ось журнала не работает в этом случае со многими значениями ниже 1. См. Этот пример:

library(tidyverse)

del <- read.csv("~/Path/del.csv", stringsAsFactors=FALSE)

del <- del %>%  
  pivot_longer(3:9,names_to = "time") %>% 
  mutate(time =  stringr::str_replace_all(time, pattern = 'X',replacement = 'T'),
         time = fct_relevel(time,'T0','T2','T4','T6','T8','T10','T12'))

del <- del %>% 
  mutate(subject = as.factor(subject),
         strain = as.factor(strain),
         time = as.factor(time))

del %>% 
  filter(!is.na(value)) %>%  
  ggplot(aes(x=time, y=value, color=strain, group=strain)) + 
  geom_point(alpha=.5, size=2) +
  geom_line() +
  scale_y_continuous(sec.axis = sec_axis(~log10(.)))

enter image description here

Примечание. Замечательно, что вы предоставляете данные! Обратите внимание на часть минимальный . Наиболее эффективные вопросы направлены на решение конкретной проблемы, при этом упускаются все ненужные детали. Кроме того, его лучший из воспроизводимого примера является самодостаточным. Здесь вы используете данные, которые вы не предоставляете, например, в коде ggplot. См. Представление

...