Как сделать Лестничный участок? - PullRequest
0 голосов
/ 02 сентября 2018

как вы можете построить лестничный участок в R, пожалуйста. Вот пример данных:

d <- data.frame("Subject" = 1:10,
                        "Group" = c(rep(1, 6), rep(2, 4)),
                        "Gender" = c(rep("male" ,2), rep("female", 6), rep("male", 2)),
                        "Y1" = rnorm(10, 100, 30),
                        "Y2" = rnorm(10, 3000, 1000))

на этом лестничном участке:

  • Нужно показать, что те, у кого высокий Y1, также имеют высокий Y2
  • отображает корреляции для факторов "Группа" и "Пол"
  • показывает галочки оси Y слева для Y1 и справа для Y2
  • Две переменные (Y1 и Y2) должны быть связаны для каждого субъекта сплошными линиями для группы 1 и пунктирными линиями для группы 2, красным для мужчин и синим для женщин.

Что-то есть в пакете plotrix, но я не могу найти подробности.

Ответы [ 2 ]

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

Спасибо, wibeasley за ваш вклад! это было очень полезно. Однако для генерации результатов я использовал следующий код.

# Melt dataset for plot:
library(reshape)
melted_data<-melt(d, id.vars=c("Subject","Group","Sex"),measure.vars= c("Y1","Y2"))
melted_data$Group<-as.factor(melted_data$Group)


# calcuate R2 per Group and Sex combination
require(plyr)
func <- function(xx)
{  return(data.frame(R2 = round (cor(xx$Y1, xx$Y2),6)))}
CorrDataset<-ddply(d, .(Group,Sex), func)


# plot:
library(gridExtra)
library(ggplot2)
set.seed(1)

p <-ggplot(melted_data, aes(x=variable, y=value, group=Subject, linetype=Group, color=Sex)) +
  geom_line(size=1)
#p <- p + scale_y_continuous(sec.axis = sec_axis(~ scale(.), name = "Y2"))
p+theme(legend.position="top",
        axis.line.x = element_line(color="black", size = 2),
        axis.line.y = element_line(color="black", size = 2),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())+
  annotation_custom(tableGrob(CorrDataset,rows = rownames(CorrDataset)),  ymin=4000, ymax=4000) 

enter image description here

Обратите внимание: для второй оси Y она закомментирована в приведенном выше коде.

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

Библиотека ggplot2 настолько гибкая, что я бы использовал ее вместо поиска стандартной подпрограммы. Вот код, который имеет основы лестничного графа. Посмотрите в существующей документации такие вещи, как второстепенные оси и изменение масштаба цвета и типа линии. Я оставляю это так, что ваше сообщение похоже на целенаправленный вопрос (и не будет помечено как запрос на услугу написания кода ).

Важный шаг ниже фактически предшествует графическому вызову. Измените свой «широкий» формат на «длинный».

library(magrittr)
library(ggplot2)
set.seed(100)

d <- data.frame(
  Subject = 1:10,
  Group   = c(rep(1, 6), rep(2, 4)),
  Gender  = c(rep("male" ,2), rep("female", 6), rep("male", 2)),
  Y1      = rnorm(10, 100, 30),
  Y2      = rnorm(10, 3000, 1000)
)        

d_long <- d %>% 
  tidyr::gather(key=Time, value=Score, -Subject, -Group, -Gender) %>% 
  dplyr::mutate(
    Group = factor(Group)
  )

ggplot(d_long, aes(x=Time, y=Score, group=Subject, linetype=Group, color=Gender)) +
  geom_line()

Результаты

> head(d_long)
  Subject Group Gender Time     Score
1       1     1   male   Y1  84.93423
2       2     1   male   Y1 103.94593
3       3     1 female   Y1  97.63249
4       4     1 female   Y1 126.60354
5       5     1 female   Y1 103.50914
6       6     1 female   Y1 109.55890

enter image description here

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