【问题标题】:Changing font size and direction of axes text in ggplot2在ggplot2中更改轴文本的字体大小和方向
【发布时间】:2012-10-29 04:16:22
【问题描述】:

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

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

【问题讨论】:

标签: r ggplot2


【解决方案1】:

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

【讨论】:

  • 我觉得应该是hjust=1
  • 真的!根据 Artem 的评论进行了更正,但我没有更新图片。
【解决方案2】:

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

【讨论】:

    【解决方案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())
    

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

    【讨论】:

      【解决方案4】:

      使用主题():

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

      【讨论】:

        【解决方案5】:

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

        例如:

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

        【讨论】:

          【解决方案6】:

          当绘制许多图时,全局设置它是有意义的(相关部分是第二行,三行一起是一个工作示例):

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-02-03
              • 2016-10-30
              • 1970-01-01
              • 1970-01-01
              • 2017-11-29
              相关资源
              最近更新 更多