geom_text中每个标签的不同字体大小

5

我使用ggplot2制作了一个条形图。我想使用geom_text为每个条添加标签,使得标签的文本大小与标签相对应。为此,我使用了以下代码:

a <- aggregate(mpg ~ vs + am , mtcars, function(i) round(mean(i)))
p <- ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
      geom_bar(stat="identity",position="dodge") + 
      geom_text(data = a, aes(label = mpg, size = mpg), 
                position = position_dodge(width=0.9))

这给了我一个如下所示的图形: enter image description here 正如您所看到的,标签大小在改变,但文本字体大小与标签大小不相对应。对于第一根柱子,标签是15,几乎不可见。当我使用固定的文本大小15绘制相同的条形图时,标签不像上面那么小。以下是代码和生成使用固定文本大小的图:
 a <- aggregate(mpg ~ vs + am , mtcars, function(i) round(mean(i)))

 p <- ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
      geom_bar(stat="identity",position="dodge") + 
      geom_text(data = a, aes(label = mpg), 
                position = position_dodge(width=0.9), size = 15)  

enter image description here

是否有一种方法可以在给定每个标签的不同大小时使标签的大小保持一致?

2个回答

4

将大小设置为sort(a$mpg)就可以解决问题。

p <- ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
    geom_bar(stat="identity",position="dodge") + 
    geom_text(data = a, aes(label = mpg), 
              position = position_dodge(width=0.9), size = sort(a$mpg))

snap1


在你的回答中,20和21之间的文本大小似乎被交换了。也许是因为数据的顺序是“15 21 20 28”? - SBista
@SBista,确实正确,a$mpg中的顺序是15 21 20 28,已相应更新答案。 - parth

4

您可以更改scale_size的范围。

例如,如果您希望缩放后的大小从字号15到字号28:

ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
  geom_bar(stat="identity", position="dodge") + 
  geom_text(data = a, aes(label = mpg, size = mpg), 
            position = position_dodge(width=0.9)) +
  scale_size(range = c(15, 28), guide = F) #legend hidden

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接