gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:09:04 24 4
gpt4 key购买 nike

您好:我需要绘制一个包含 81 个不同类别的因子,每个类别都有不同的频率计数。每个因子名称都是一个 4 个字母的类别。看起来像这样。如您所见,很难阅读因子标签。我想根据 this 错开 y 轴建议。然而,this 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")))

最佳答案

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

# 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))

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

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

You will need to set up path from 'axis-l', through 'axis', through 'axis', though to '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)

enter image description here

另一种选择是通过结构找到相关 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)

关于r - 交错轴标签,ggplot2 中的新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com