我正在绘制一个图表,其中x轴为分类变量,y轴为数值变量。
对于x轴,假设有许多数据点,则默认文本格式会使每个刻度线的标签与其他标签重叠。我如何(a)更改轴文本的字体大小和(b)更改文本的方向,使文本垂直于轴?
答案 0 :(得分:238)
使用theme()
:
d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20),
axis.text.x = element_text(angle=90, hjust=1))
#vjust adjust the vertical justification of the labels, which is often useful
有很多关于如何格式化ggplots here的好信息。您可以使用?theme
查看可以修改的参数的完整列表(基本上是所有参数)。
答案 1 :(得分:60)
Ditto @Drew Steen关于theme()
的使用。以下是轴文本和标题的常用主题属性。
ggplot(mtcars, aes(x = factor(cyl), y = mpg))+
geom_point()+
theme(axis.text.x = element_text(color = "grey20", size = 20, angle = 90, hjust = .5, vjust = .5, face = "plain"),
axis.text.y = element_text(color = "grey20", size = 12, angle = 0, hjust = 1, vjust = 0, face = "plain"),
axis.title.x = element_text(color = "grey20", size = 12, angle = 0, hjust = .5, vjust = 0, face = "plain"),
axis.title.y = element_text(color = "grey20", size = 12, angle = 90, hjust = .5, vjust = .5, face = "plain"))
答案 2 :(得分:14)
使用theme():
d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20))
答案 3 :(得分:12)
添加到以前的解决方案,您还可以指定base_size
等主题中包含的{{1>}的字体大小 relative (其中theme_bw()
为11)使用base_size
函数。
例如:
rel()
答案 4 :(得分:3)
在这种情况下,使用“fill”属性会有所帮助。您可以使用element_blank()
从轴中删除文本,并显示带有图例的多颜色条形图。我正在维修店中绘制零件拆卸频率,如下所示
ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x = element_blank())
在我的情况下,我选择了这个解决方案,因为我在条形图中有很多条形图,但是我找不到合适的字体大小,它既可读又小,不会相互重叠。
答案 5 :(得分:2)
处理重叠标签的另一种方法是使用guide = guide_axis(n.dodge = 2)
。
library(dplyr)
library(tibble)
library(ggplot2)
dt <- mtcars %>% rownames_to_column("name") %>%
dplyr::filter(cyl == 4)
# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()
ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
scale_x_discrete(guide = guide_axis(n.dodge = 2))
答案 6 :(得分:1)
进行许多绘图时,全局设置是有意义的(相关部分是第二行,三行在一起是一个有效的示例):
library('ggplot2')
theme_update(text = element_text(size=20))
ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()