ggplot2 - 4 категориальных и 1 непрерывная переменная - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать график, подобный приведенному ниже, в R, но оказалось, что это сложнее, чем просто сделать это в Excel. X - категориальная переменная, y - непрерывная, тогда цвет будет дихотомической переменной, а тип линии - другой. Как я могу go это сделать? Я попытался использовать следующий код, но если я изменю один из размеров или цвета линии, он просто выдаст уведомление «Ошибка: geom_path: если вы используете пунктирные или пунктирные линии, цвет, размер и тип линии должны быть постоянными по всей линии». Как его адаптировать?

ggplot(RT, aes(x= Block, y= mean, group = Probability, color=Probability))+ 
  geom_errorbar(aes(ymin=mean-CI, ymax=mean+CI), width=.1, 
            position=position_dodge(0.05)) + xlab("Epoch") +
 geom_line(aes(linetype=Probability), size = 1) + 
 geom_point(aes(shape=Probability))+
facet_wrap(~ Session, scales="free") + coord_cartesian(ylim = c(370, 530)) + 
  scale_color_grey(start=0.85, end=0.2)+
  theme_classic() 

5

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

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Было бы легче увидеть, что идет не так, если вы опубликуете образец своих данных, чтобы мы могли взять ваш код ggplot и запустить его, чтобы увидеть, что происходит.

Однако, быстрая проверка ваших код обнаруживает некоторые проблемы. Вы сопоставляете свою переменную Probability с четырьмя эстетиками: группой, цветом, типом линий и формой. Каждую из группы, цвета и типа линии необходимо сопоставить с другой переменной.

Вот минимальный пример. В этом примере у меня есть фиктивная переменная с именем group, которая разделяет каждую строку. Я сопоставляю var1 цвету и var2 типу линии. Поскольку мои данные имеют только одну точку на комбинацию x, y, группы, цвета и типа линии, мне нужно установить stat = identity, чтобы geom_line знал, что это сделано намеренно.

df <- data.frame(x = factor(rep(1:4, 4)),
                 y = c(10, 15, 10, 15, 20, 25, 20, 25, 30, 35, 30, 35, 40, 45, 40, 45),
                 group = factor(c(rep(0, 4), rep(1, 4), rep(2, 4), rep(3, 4))),
                 var1 = factor(c(rep(0, 8), rep(1, 8))),
                 var2 = factor(c(rep(0, 4), rep(1, 4), rep(0, 4), rep(1, 4)))
                 )
ggplot(df) + 
  geom_line(aes(x, y, group = group, color = var1, linetype = var2), stat="identity")

Вот участок, который он производит.

линейный график с четырьмя линиями разного цвета и типа линий

1 голос
/ 07 августа 2020

Уловка состоит в том, чтобы создать переменную взаимодействия из ваших переменных var1 и var2, которая дает коэффициент с четырьмя уровнями, представляющими четыре series. (В основном это соответствует переменной group в ответе @AllanCameron). Затем эту новую переменную взаимодействия можно отобразить как на color, так и на linetype, что приведет к одной легенде. Затем можно установить цвета и типы линий с помощью scale_color_manual и scale_linetype_manual. попробуйте это:

library(ggplot2)
library(dplyr)

set.seed(42)

df <- data.frame(
  var1 = factor(rep(1:2, each = 20, length = 40)),
  x = rep(1:5, each = 4),
  var2 = factor(rep(1:2, each = 2)),
  var3 = factor(rep(1:2, each = 1)),
  y = runif(40, 300, 500)
)

df %>% 
  mutate(series = interaction(var1, var2, sep = "_")) %>% 
  ggplot() + 
  geom_line(aes(x, y, color = series, linetype = series), stat="identity") + 
  scale_color_manual(values = c("orange", "orange", "black", "black"),
                     labels = paste0("series", 1:4)) +
  scale_linetype_manual(values = c("dashed", "solid", "dashed", "solid"),
                        labels = paste0("series", 1:4)) +
  facet_wrap(~ var3, scales="free") +
  theme(legend.position = "bottom")

1 голос
/ 03 августа 2020

Это можно сделать, добавив группирующую переменную и группу aestheti c. Вот полное представление:

library(ggplot2)

vals <- c(11, 13, 12, 14)

df <- data.frame(
  x = rep(1:4, 4),
  y = c(vals, 2 * vals, 3 * vals, 4 * vals),
  colours = rep(c("#bf6424", "black"), each = 8),
  linetype = rep(rep(2:1, each = 4), 2),
  group = rep(1:4, each = 4))


ggplot(df, aes(x, y, colour = colours, linetype = linetype, group = group)) +
  geom_line(size = 2) +
  scale_color_identity() +
  scale_linetype_identity() +
  theme_classic()

Created on 2020-08-03 by the пакет REPEX (v0.3.0)

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