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


188

我正在绘制一个在x轴上带有类别变量,在y轴上带有数值变量的图形。

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



stackoverflow.com/q/1330989/946850重叠,但是该问题不涉及调整文本的大小。
krlmlr

Answers:


291

用途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良好的信息在这里。您会看到使用可以修改的参数的完整列表(基本上是所有参数)?theme


2
我认为应该是hjust=1
Artem Sokolov

真正!根据Artem的评论更正了,但是我没有更新图像。
德鲁·斯蒂恩

67

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

19

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

19

除了以前的解决方案之外,您还可以使用函数指定对于base_size主题中所包含的字体大小,例如theme_bw()(其中base_size为11)rel()

例如:

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

4

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

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

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


4

在绘制多个图时,有必要进行全局设置(相关部分是第二行,三行在一起是一个有效的示例):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

0

处理重叠标签的另一种方法是使用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))

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.