在ggplot2中更改轴文本的字体大小和方向

问题描述 投票:151回答:6

我正在绘制一个图表,其中x轴为分类变量,y轴为数值变量。

对于x轴,假设有许多数据点,则默认文本格式会使每个刻度线的标签与其他标签重叠。我如何(a)更改轴文本的字体大小和(b)更改文本的方向,使文本垂直于轴?

r ggplot2
6个回答
251
投票

使用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查看可以修改的参数的完整列表(基本上,所有参数)。


62
投票

@ 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"))

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

14
投票

添加到以前的解决方案,您还可以使用base_size函数指定相对于主题中包含的theme_bw()的字体大小,例如base_size(其中rel()为11)。

例如:

ggplot(mtcars, aes(disp, mpg)) +
  geom_point() +
  theme_bw() +
  theme(axis.text.x=element_text(size=rel(0.5), angle=90))

3
投票

在这种情况下使用“fill”属性会有所帮助。您可以使用带有图例的element_blank()and显示多色条形图从轴中删除文本。我正在维修店中绘制零件拆卸频率,如下所示

ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x  = element_blank())

在我的情况下,我选择了这个解决方案,因为我在条形图中有很多条形,我无法找到合适的字体大小,既可读又小又不相互重叠。


1
投票

在制作多个图时,将其全局设置是有意义的(相关部分是第二行,三行是一个工作示例):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()
© www.soinside.com 2019 - 2024. All rights reserved.