我正在尝试创建一个线图,其中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
进行设置。
答案 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"
这会产生
我不希望在每个单词之前和之后插入分隔符,但不知道正则表达式 - 请随时更新。
答案 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)