Раскрашивание линий с использованием всех доступных перестановок столбцов нескольких категорий

Я хочу создать линейный график в R, который содержит несколько строк разного цвета в зависимости от других данных в таблице. Мои данные выглядят примерно так:

mydf = data.frame(iteration=c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5), 
            value=runif(20, min=0, max=1),
            category=c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B"),
            subcategory=c("x","x","x","x","x","y","y","y","y","y","x","x","x","x","x","y","y","y","y","y"))


 iteration  value   category    subcategory
1   1   0.79813537  A   x
2   2   0.45196396  A   x
3   3   0.28001580  A   x
4   4   0.65997486  A   x
5   5   0.82217320  A   x
6   1   0.33805127  A   y
7   2   0.75842241  A   y
8   3   0.18502805  A   y
9   4   0.75586271  A   y
10  5   0.28269372  A   y
11  1   0.27585682  B   x
12  2   0.45901786  B   x
13  3   0.18962731  B   x
14  4   0.63682207  B   x
15  5   0.89821930  B   x
16  1   0.93757079  B   y
17  2   0.27272290  B   y
18  3   0.20485397  B   y
19  4   0.33647649  B   y
20  5   0.07788958  B   y

Теперь я хотел бы вывести четыре строки с помощью ggplot на один и тот же график, представляющий все доступные комбинации категории и подкатегории. Я также хочу, чтобы для каждой комбинации был свой цвет. Например: A.x красный, A.y зеленый, B.x синий, B.y желтый.

Лучшее, что я смог придумать, это два цвета и две формы, чтобы различать линии.

ggplot(data=mydf, 
   aes(x=iteration, y=value, colour=category, shape=subcategory)) + 
 geom_line() + geom_point()

Есть ли способ присвоить цвет каждой возможной перестановке категории и подкатегории?

Спасибо!

(Я хотел бы показать несколько примеров изображений, но у меня пока недостаточно репутации.)


person vseeker    schedule 19.09.2015    source источник
comment
Не решение, а другой способ различения - использовать linetype вместо shape для подкатегории.   -  person vseeker    schedule 19.09.2015


Ответы (1)


Создайте новую переменную, содержащую как категорию, так и подкатегорию, и сопоставьте ее с цветом.

mydf$group <- paste(mydf$category,mydf$subcategory,sep="_")

ggplot(data=mydf, 
   aes(x=iteration, y=value, colour=group)) + 
 geom_line() + geom_point()  +
 scale_color_manual(values = c("red","green","blue","yellow"))

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

person scoa    schedule 19.09.2015