2016-01-09 11 views
2

Я рисую корреляционную карту тепла с осью x сверху, используя switch_axis_position. Этикетки оси X несколько длинны, поэтому я хочу, чтобы их вращали с помощью angle=90 и выровняли их, используя hjust=0. Но это делает метки слишком далекими от оси x и даже выводит их из области графика.Знаки оси X в верхней части участка

library(gtable) 
library(cowplot) 
library(grid) 

heatmap<-ggplot(data=meltedh, aes(x=variable, y=X, fill=value))+ 
    geom_tile(color="White")+ 
    ylab("")+xlab("")+ 
    scale_fill_gradient2(low="blue3", high="red3", mid="white", 
         midpoint=0,limit=c(-1,1), space="Lab", breaks=c(-0.5,0,0.5), 
         name="Correlation Coefficient")+ 
    theme(legend.position="bottom", 
     axis.text.x=element_text(angle=90, hjust=0)) 
heatmap 
ggdraw(switch_axis_position(heatmap,axis='x')) 

enter image description here Как я могу сделать это довольно? Любая помощь будет большой. Благодарю.

+0

Вы можете обеспечить минимальный воспроизводимый пример? – Axeman

+0

Ответ на этот вопрос? –

+0

Отлично! Я не нашел подходящего решения этой проблемы в Интернете. Ваш ответ был очень полезным. Благодаря! – Amy

ответ

4

К счастью для вас, я предпочитаю составлять данные.

Так что это может быть то, что вы хотите. Я сделал следующие вещи:

  • играется с hjust, чтобы получить его близко к поиску ладно
  • Уплотненных имен с пробелами, чтобы сделать их все же длинами
  • Изменено семейством шрифтов "mono", поэтому ось текст будет выровнен

библиотеки (gtable) библиотеки (cowplot) библиотеки (сетка)

set.seed(1234) 
cn <- c("Eastside","Pygrate","Tapeworm","Annerose","Bund", 
     "Mountain","Appalacia","Summer","Treasure","Riveria", 
     "Persia","Raggout","Bengal","Siam","Norman") 

# Pad out the names with spaces to all be the same length 
mxl <- max(nchar(cn)) 
fmt <- sprintf("%%-%ds",mxl) # the minus adds spaces to the string end 
cn <- sprintf(fmt,cn) 

rn <- rev(letters[1:16]) 

ddf <- expand.grid(x=rn, y=cn) 
n <- nrow(ddf) 
ddf$v <- runif(n,-1,-0.1) 

nr <- n/length(cn) 
ddf[ddf$y==cn[3],]$v <- runif(nr,0.1,0.8) 
ddf[ddf$y==cn[8],]$v <- runif(nr,0.1,0.8) 
ddf[ddf$y==cn[13],]$v <- runif(nr,0.1,0.8) 
ddf[ddf$x %in% c("i","j","n","o"),]$v <- 0 


meltedh <- data.frame(X=ddf$x,variable=ddf$y,value=ddf$v) 

heatmap<-ggplot(data=meltedh, aes(x=variable, y=X, fill=value))+ 
    geom_tile(color="White")+ 
    ylab("")+xlab("")+ 
    scale_fill_gradient2(low="blue3", high="red3", mid="white", 
         midpoint=0,limit=c(-1,1), space="Lab", breaks=c(-0.5,0,0.5), 
         name="Correlation Coefficient")+ 
    theme(legend.position="bottom", 
     axis.text.x=element_text(angle=90, hjust=0.5,family="mono")) 

heatmap 
ggdraw(switch_axis_position(heatmap,axis='x')) 

Это дает следующее:

enter image description here

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