首页 文章

创建垂直轴标签而不是在ggplot中旋转

提问于
浏览
2

我正在尝试创建一个线图,其中x轴实际上是一个因素 . 我希望刻度线标签是单词,我希望它们垂直显示而不是水平显示 .

搜索后,我已经能够创建一个图表,其中轴标签旋转90度,但这不是我想要的 .

下面提供了一个玩具示例:

library(ggplot2)
df <- data.frame(x = 1:5, y = sample(1:10, 5, TRUE))

ggplot(aes(x, y), data = df) + geom_line() + 
scale_x_continuous(breaks = 1:5, labels = c('foo', 'bar', 'baz', 'phi', 'fum')) + 
theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

而不是像'foo'这样的标签以90度角放置,我希望它们被呈现为

f    
o    
o

等等

感谢您提供任何建议 . 我意识到这可以使用基础R中的 plot() 函数来完成,但出于与我的实际数据相关的原因,我使用 ggplot 进行设置 .

2 回答

  • 2

    升级评论以回答 .

    解决方法是使用换行符分隔符定义标签 . \n 强制将下一个字符放到新行上 .

    你的榜样

    library(ggplot2)
    
    df <- data.frame(x = 1:5, y = sample(1:10, 5, TRUE))
    
    ggplot(aes(x, y), data = df) + 
               geom_line() + 
               scale_x_continuous(breaks = 1:5, 
                  labels = gsub("", "\n", c('foo', 'bar', 'baz', 'phi', 'fum'))) + 
               theme(axis.text.x = element_text(size=20))
    

    EDIT

    按照巴普蒂斯特的评论,一个更简洁的方法是定义标签

    labels = sapply(strsplit(c('foo', 'bar', 'baz', 'phi', 'fum'),""), 
                                                        paste, collapse="\n")
    

    这没有第一个和尾随的分隔符 .

    gsub 行在每个字母之间插入 \n .

    gsub("", "\n", c('foo', 'bar', 'baz', 'phi', 'fum')) 
    # [1] "\nf\no\no\n" "\nb\na\nr\n" "\nb\na\nz\n" "\np\nh\ni\n" "\nf\nu\nm\n"
    

    这产生了

    enter image description here

    我不希望在每个单词之前和之后插入分隔符,但不知道正则表达式 - 请随时更新 .

  • 1

    没有回答你的具体例子,但更自然的情况是自动生成标签(离散比例),

    library(ggplot2)
    df <- data.frame(x = c('foo', 'bar', 'baz', 'phi', 'fum'), 
                     y = sample(1:10, 5, TRUE))
    
    label_v <- function(lab){
      lab <- as.character(lab)
      sapply(strsplit(lab,""), paste, collapse="\n")
    }
    
    ggplot(aes(x, y,group=1), data = df) + geom_line() + 
      scale_x_discrete(labels=label_v)
    

相关问题