2015-03-18 3 views
-1

Учитывая следующий набор данных:«Объединение» два участка с использованием ggplot2 и R

data = cbind(1:10,c('open','reopen','closed'),letters[1:3],1:10) 
data = rbind(data,cbind(1:10,c('open','closed','reopen'),letters[1:3],5:10)) 
data = rbind(data,cbind(1:10,c('closed','open','reopen'),letters[1:3],3:10)) 
data = data.frame(data); 
colnames(data) <- c("id","status","author","when") 

Я хотел бы получить участок, подобный следующему:

ggplot(data, aes(when,id)) + 
    geom_line(aes(group = id,colour = status)) + 
    geom_point(aes(group = id,colour = author)) 

Но, как таковой я получаю одна легенда «автора» со статусом и авторскими значениями. Как я могу получить тот же результат, но с легендой для автора и другого для статуса? Мое рассуждение состоит в том, что я хочу сложить два графика одного и того же набора данных друг на друга. Plot example

+0

Возможно, вам будет лучше использовать '+ geom_point (aes (shape = status))' использовать разные маркеры для разного статуса. –

+0

Я пробовал это, но формы ограничены шестью различными значениями, а набор состояний больше. Я пытаюсь добиться такого же эффекта, но используя цвет. – Grasshopper

+0

См. Обработанный пример –

ответ

0

Я не думаю, что у вас могут быть разные цветовые шкалы/легенды для одного ggplot. Вы можете взломать что-нибудь вместе (see this question for legend hacking), но в этом случае, когда один из ваших геом является точкой, вы могли бы просто использовать fill и одну из точек опций, которые заполняются.

ggplot(data, aes(when,id)) + 
    geom_line(aes(group = id,colour = status)) + 
    geom_point(aes(group = id, fill = author), 
      shape = 21, color = NA, size = 4) 

Здесь используемых цветов являются то же самое для каждого, но вы можете изменить цвет или заполнить весы индивидуально, например, добавление

scale_fill_brewer(type = "qual") + 
scale_color_brewer(type = "qual", palette = 2) 

plot

Я согласен с AndyClifton, что использование цвета в двух направлениях будет трудно различить. Вы также можете экспериментировать с типами линий, точечными фигурами или даже с графикой с geom_text с использованием слова, буквы или числа в качестве метки вместо точек. Вы говорите, что у вас есть более 6 значений для автора, но будет очень сложно выделить более 6 цветов для автора, особенно, когда цвет также используется для статуса.

+0

Спасибо, Грегор. Я согласен, что результат, вероятно, будет не очень хорошим с значениями ggplot значений по умолчанию, но я надеялся, что это изменит размер линии и размер точки. – Grasshopper

0

Давайте рассмотрим ваши данные. Во-первых, вы должны знать, что у вас есть проблема в том, что столбец и id является строкой, поэтому вы рисуете 1, 10, 2, 3, ... не 1, ... 9,10. Мы можем исправить это:

data$when.num <-as.numeric(as.character(data$when)) 
data$id.num <-as.numeric(as.character(data$id)) 

Тогда мы будем построить его, но использовать различные формы, чтобы получить две разные легенды:

require(ggplot2) 

p <- ggplot(data, aes(x = when.num, y = id)) + 
    geom_line(aes(group = id,colour = status)) + 
    geom_point(aes(group = id,shape = author)) 

print(p) 

И вы получите это:

enter image description here

I подумайте, что это намного яснее, чем использование цветных точек для автора, но это вопрос вкуса.

+0

Спасибо Энди за ответ. Дело в том, что масштаб формы ограничен 6 различными значениями, а моя колонка автора больше. Я также попытался с размером, но результат был не очень приятным. – Grasshopper

+1

может стоить дать нам более реалистичный набор данных для игры? –

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