2015-07-20 1 views
0

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

enter image description here

Для тех, кто заинтересован в более подробно, это то, что я пытаюсь повторить: http://www.broadinstitute.org/cmap/help_topics_linkified.jsp (много примеров этого участка в нижней части страницы)

EDIT (на основе комментариев): Значения оси Y - это ранги, которые изменяются со столбцом оценки. Цвета представляют собой группировку с положительными значениями в зеленых, отрицательных красных и черных линиях для набора «выбранных» строк. Это не участок с уложенными штангами. Значения на оси y (будь то ранжирование или оценка) не являются кумулятивными, а область группы для «выбранной» (черной) группы может быть распределена по другим трем группам (как показано в примерах ниже).

Пример:

structure(list(group = structure(c(1L, 1L, 4L, 1L, 1L, 3L, 3L, 
4L, 3L, 2L, 4L, 2L, 2L), .Label = c("positive", "negative", "null", 
"selected"), class = "factor"), rank = c(1, 2, 3, 4, 5, 7.5, 
7.5, 7.5, 7.5, 10, 11, 12, 13), xaxis = c(1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1), score = c(0.85, 0.7, 0.55, 0.4, 0.25, 0, 0, 
0, 0, -0.5, -0.65, -0.8, -0.95)), .Names = c("group", "rank", 
"xaxis", "score"), row.names = c(NA, -13L), class = "data.frame") 

     group rank xaxis score 
1 positive 1.0  1 0.85 
2 positive 2.0  1 0.70 
3 selected 3.0  1 0.55 
4 positive 4.0  1 0.40 
5 positive 5.0  1 0.25 
6  null 7.5  1 0.00 
7  null 7.5  1 0.00 
8 selected 7.5  1 0.00 
9  null 7.5  1 0.00 
10 negative 10.0  1 -0.50 
11 selected 11.0  1 -0.65 
12 negative 12.0  1 -0.80 
13 negative 13.0  1 -0.95 

Я попытался следующие, но я ищу для бара или прямоугольника, а не точек.

ggplot(df, aes(xaxis,rank,colour=group)) + 
    geom_point(size=3) + 
    scale_colour_manual(values=c("positive"="green", "negative"="red", "null"="grey", "selected"="black")) + 
    theme_bw() + scale_y_reverse() + scale_x_discrete(breaks=NULL) 

enter image description here

сложены geom_bar() и geom_rect() не похоже на работу с непрерывными y значениями.

Любая помощь будет оценена по достоинству. Благодаря!

UPDATE (с использованием раствора @ bjoseph, чтобы точно воспроизвести сюжет, показанный в приведенной выше ссылке)

df$size = as.factor(1) 
df$height = 1 
ggplot(df, aes(1,x=size,y=height,fill=group,group=rank)) + 
    geom_bar(stat='identity') + science_theme + 
    scale_fill_manual(values=c("positive"="green", "negative"="red", "null"="grey", "selected"="black")) + theme_bw() + 
    scale_y_reverse(breaks=NULL) + scale_x_discrete(breaks=NULL) 

enter image description here

+0

Ваш вопрос неясно, хотите ли вы 4 региона (по одному для каждого уникального значения A, B, C, D) или по одному региону для каждой строки. – joran

+1

используйте 'fill = group' вместо' color = group' и 'geom_bar (stat =" identity ")' вместо 'geom_point()' – scoa

+0

@joran Я хочу по существу строки с цветами на основе их ранга/значения. Таким образом, регионы не задаются, а изменяются в соответствии с данными. – harkmug

ответ

1

Это работает

df = structure(list(group = structure(c(1L, 1L, 4L, 1L, 1L, 3L, 3L, 
             4L, 3L, 2L, 4L, 2L, 2L), .Label = c("A", "B", "C", "D"), class = "factor"), 
        value = 1:13), .Names = c("group", "value"), row.names = c(NA, 
                       -13L), class = "data.frame") 

df$size=as.factor(1) 
df$height=1 
ggplot(df, aes(1,x=size,y=height,fill=group,group=value)) + 
    geom_bar(stat='identity',color="black") + 
    theme_bw() 

Он производит прилагаемую участок.

enter image description here

Команда color="black"geom_bar внутри производит черные контуры вокруг группы. Вы можете также подавить или вручную пометить ось y, если вам нужно/нужно.

+0

Благодаря @bjoseph это приближается, но ось y кажется кумулятивной, что делает нижние ряды (группа «B» зеленым) выглядят намного больше, чем более высокие ранги (группа «A» красным цветом) – harkmug

+0

@harkmug отредактировал ответ - это лучше? – bjoseph

+0

Спасибо большое! Таким образом, 'group = value' был ключом к тому, чтобы вывести бары в соответствии с значением. Использование высоты очень полезно для меня, так как я могу сделать «выбранные» строки немного большими для лучшего просмотра. Удивительное решение! Благодарю. – harkmug

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