2013-12-18 3 views
1

Мне нужно создать участок с использованием R и не знаю, как я могу это сделать. Представьте следующее:Графическая матрица с пользовательскими метками R

sample_names = c("a","b","d","e","f","g","h","i","l","m") 
M = cbind(seq(0,1,length.out=10), c(1,1,1,1,2,2,2,3,3,3)) 

М представляет собой матрицу 2 колонки, где первый столбец является непрерывным измерением, и вторым столбец представляет собой метку, связанную с измерением (например, 1 для «низкого», 2 для «среднего» 3 - для «высоких»).

Что я хочу создать, это в основном вертикальный цветной бар с метками слева и справа. Цвета должны представлять значения непрерывных измерений. Ярлыки слева - это имена образцов, метки справа соответствуют «низкие», «средние», «высокие» метки для данных.

Возможно, я хотел бы, чтобы цвета варьировались от зеленого (0) до красного (1) с темными цветами около 0,5.

Как я могу построить такой график, используя R?

+0

Посмотрите на: 'filled.contour (г = матрица (1: 10,10,2), NLEVELS = 10)' а затем посмотрите на код, используемый 'fill.contour', чтобы нарисовать его ключ. –

ответ

1

Здесь раствор с помощью ggplot2:

levels <- c('low','med','high') 
df <- data.frame(
    sample = c("a","b","d","e","f","g","h","i","l","m"), 
    value = seq(0,1,length.out=10), 
    level = factor(levels[c(1,1,1,1,2,2,2,3,3,3)], level=rev(levels)) 
)  

# require(ggplot2) 
# require(grid) 
ggplot(data=df, aes(x=TRUE, y=sample, fill=value)) + geom_tile() + 
scale_fill_gradientn(colours=c('green','black','red')) + 
facet_grid(level~., scales='free', space='free') + 
scale_y_discrete(expand=c(0,0)) + 
theme(panel.margin=unit(0.1,'mm'), axis.title=element_blank(), 
     axis.text.x=element_blank(), axis.ticks.x=element_blank(), 
     legend.title=element_blank()) 

enter image description here

+0

большое спасибо TWL! – lucacerone

+0

@ LucaCerone, пожалуйста. Просто отметьте, что в вашем примере алфавитный порядок выборок соответствует увеличению числового значения. Это маловероятно в реальной ситуации, и в этом случае 'ggplot2' будет обрабатывать образцы как факторы и отображать их в алфавитном порядке. Чтобы этого избежать, лучше всего ранжировать образцы на основе их наблюдаемого значения, а затем сохранить их порядок в кадре данных с помощью: 'df $ sample <- factor (df $ sample, level = df $ sample)'. В R уровни факторов всегда упорядочены по алфавиту, если не указано иначе с помощью аргумента уровня. – TWL

+0

Я получил именно эту проблему :) Большое спасибо за любезное объяснение! – lucacerone

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