2016-12-13 8 views
0

У меня есть сюжет довольно легко матрицу (таким образом давая Heatmap) с ggplot, как это:вращать матрицу на 45 градусов и визуализировать его с помощью ggplot

test <- data.frame(start1=c(1,1,1,1,2,2,2,3,3,4),start2=c(1,2,3,4,2,3,4,3,4,4),logFC=c(5,5,1,0,8,0,5,2,4,3)) 
ggplot(test, aes(start1, start2)) + 
    geom_tile(aes(fill = logFC), colour = "gray", size=0.05) + 
    scale_fill_gradientn(colours=c("#0000FF","white","#FF0000"), na.value="#DAD7D3") 

Поскольку у меня есть только нижняя часть тепловой карты, ее дает этот сюжет:

enter image description here

Но я хотел бы, чтобы повернуть матрицу на 45 градусов, так же, как я могу найти здесь: Visualising and rotating a matrix. Итак, Диагональ рядом с осью X. Однако они используют графику из R без ggplot. Вы знаете, как это сделать с ggplot?

+0

Вы задаете один и тот же вопрос: http://stackoverflow.com/questions/41108399/ggplot-rotate-upper-triangle-of-a-heatmap? – MrFlick

+0

Это совсем другое. – user2979409

+0

Первоначально я думал, что вы хотите, чтобы «гипотенуза» была «нисходящей» из верхнего левого угла, которая больше вращается на 90 градусов. Так что же вы хотите точно? И разместите небольшой набор данных, который напоминает структуру ваших данных. –

ответ

0

Вы можете сначала вращать матрицу (кадр данных) с помощью следующей функции:

rotate <- function(df, degree) { 
    dfr <- df 
    degree <- pi * degree/180 
    l <- sqrt(df$start1^2 + df$start2^2) 
    teta <- atan(df$start2/df$start1) 
    dfr$start1 <- round(l * cos(teta - degree)) 
    dfr$start2 <- round(l * sin(teta - degree)) 
    return(dfr) 
} 

Вращением кадр данных на 90 градусов против часовой стрелки с помощью

test2 <- rotate(test, -90) 

затем участок test2, используя тот же код.