交错轴标签,ggplot2中的新功能

旋转医生

您好:我需要绘制一个因子,其中包含81个不同类别,每个类别具有不同的频率计数。每个因子名称均为4个字母的类别。看起来像这样。如您所见,阅读因子标签非常困难。我想根据这个建议错开y轴但是,github上的这个问题表明ggplot2中的某些更改,并且hjust和vjust选项不再起作用。有没有人有任何建议可以使此图看起来更好,尤其是使因子水平可读。

#libraries
# install.packages('stringi')
library(ggplot2)
library(stringi)
#fake data
var<-stri_rand_strings(81, 4, pattern='[HrhEgeIdiFtf]')
var1<-rnorm(81, mean=175, sd=75)
#data frame
out<-data.frame(var, var1)

#set levels for plotting
out$var<-factor(out$var, levels=out$var[order(out$var1, decreasing=FALSE)])
#PLot
out.plot<-out %>%
ggplot(., aes(x=var, y=var1))+geom_point()+coord_flip()
#Add staggered axis option
out.plot+theme(axis.text.y = element_text(hjust = grid::unit(c(-2, 0, 2),     "points")))
桑迪·穆斯普拉特(Sandy Muspratt)

要使标签交错,可以在数据框的标签中添加空格。

# Libraries
library(ggplot2)
library(stringi)

# fake data
set.seed(12345)
var <- stri_rand_strings(81, 4, pattern = '[HrhEgeIdiFtf]')
var1 <- rnorm(81, mean = 175, sd = 75)

out <- data.frame(var, var1)

# Add spacing, and set levels for plotting
out = out[order(out$var1), ]
out$var = paste0(out$var, c("", "       ", "            "))
out$var <- factor(out$var, levels = out$var[order(out$var1, decreasing = FALSE)])

# Plot
out.plot <- ggplot(out, aes(x = var, y = var1)) +
   geom_point() + coord_flip()
out.plot

或者,绘制原始图,然后进行编辑。在这里,我使用该grid功能editGrob()进行编辑。

# Libraries
library(ggplot2)
library(gtable)
library(grid)
library(stringi)

# fake data
set.seed(12345)

var <- stri_rand_strings(81, 4, pattern = '[HrhEgeIdiFtf]')
var1 <- rnorm(81, mean = 175, sd = 75)

out <- data.frame(var, var1)

# Set levels for plotting
out$var <- factor(out$var, levels = out$var[order(out$var1, decreasing = FALSE)])

# Plot
out.plot <- ggplot(out, aes(x = var, y = var1)) +
   geom_point() + coord_flip()

# Get the ggplot grob
g = ggplotGrob(out.plot)

# Get a hierarchical list of component grobs
grid.ls(grid.force(g))

浏览列表以找到指向左轴的部分。相关的位是:

   轴l.6-3-6-3    
     axis.line.y..zeroGrob.232   
       axis.1-1-1-1    
         GRID.text.229    
       axis.1-2-1-2   

您将需要设置从'axis-l',通过'axis',通过'axis'到'GRID.text'的路径。

# make the relevant column a little wider
g$widths[3] = unit(2.5, "cm")

# The edit
g = editGrob(grid.force(g), 
      gPath("axis-l", "axis", "axis", "GRID.text"), 
      x = unit(c(-1, 0, 1), "npc"), 
      grep = TRUE)

# Draw the plot
grid.newpage()
grid.draw(g)

在此处输入图片说明

另一种选择是通过结构查找相关grob进行编辑。

# Get the grob
g <- ggplotGrob(out.plot)

# Get the y axis
index <- which(g$layout$name == "axis-l")  # Which grob
yaxis <- g$grobs[[index]]   

# Get the ticks (labels and marks)
ticks <- yaxis$children[[2]]

# Get the labels
ticksL <- ticks$grobs[[1]]

# Make the edit
ticksL$children[[1]]$x <- rep(unit.c(unit(c(1,0,-1),"npc")), 27)

# Put the edited labels back into the plot
ticks$grobs[[1]] <- ticksL
yaxis$children[[2]] <- ticks
g$grobs[[index]] <- yaxis

# Make the relevant column a little wider
g$widths[3] <- unit(2.5, "cm")

# Draw the plot
grid.newpage()
grid.draw(g)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章