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

时间:2014-09-12 13:32:06

标签: r ggplot2

我正在尝试创建一个线图,其中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 个答案:

答案 0 :(得分: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))


修改

按照Baptiste的评论,一个更简洁的方法是用

定义标签
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 :(得分: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) 
相关问题