Ярлыки оси X сверху области графика

Я строю карту тепловой корреляции с осью X сверху, используя switch_axis_position, Метки оси X несколько длинные, поэтому я хочу повернуть их, используя angle=90 и выровняйте их, используя hjust=0, Но это делает метки слишком далеко от оси 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'))

Как я могу сделать это красиво? Любая помощь будет отличной. Благодарю.

1 ответ

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

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

  • Играл с 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'))

Это дает это:

Другие вопросы по тегам