使用scale_y_log10不会出现geom_text

问题描述 投票:0回答:4

我可以使用

geom_text
将文本添加到 ggplot 中(例如使用汽车数据库):

ggplot(cars, aes(speed, dist), color='blue') + 
geom_point(size=0.8) + 
geom_text(y=25, x=5, aes(label=paste("sigma == 1"), size=1.5), 
    hjust=0, parse=TRUE, color='blue')

但是当我将 y 刻度更改为对数时,我无法让文本出现在图表上:

ggplot(cars, aes(speed, dist), color='blue') + 
geom_point(size=0.8) + 
geom_text(y=25, x=5, aes(label=paste("sigma == 1"), size=1.5), 
    hjust=0, parse=TRUE, color='blue') + 
scale_y_log10()

我尝试过改变文本大小和位置,但似乎无法实现。

r text ggplot2 geom-text
4个回答
7
投票

这对我有用:

require(ggplot2)
g <- ggplot(cars, aes(speed, dist), color='blue')
g <- g + geom_point(size=0.8)
g <- g + geom_text(aes(y=25, x=5, label=paste("sigma == 1"), size=1.5), hjust=0, parse=TRUE, color='blue')
g <- g + scale_y_log10()
g

3
投票

这样效果更好:

ggplot(cars, aes(speed, dist), color='blue') + 
    geom_point(size=0.8) + 
    geom_text(y=2, x=5, aes(label=paste("sigma == 1"), size=1.5), 
        hjust=0, parse=TRUE, color='blue') + 
    scale_y_log10()

在此输入图片描述

正常对数刻度:100 -> 2; 1000 -> 3; 0.1 -> -1; 0.01 -> -2


2
投票

原始代码中的问题是 x 和 y 值没有被 aes() 封装,因此轴变换不会应用于它们。 要修复此问题,只需移动 aes() 以包含所有美学即可。

ggplot(cars, aes(speed, dist), color='blue') + 
  geom_point(size=0.8) + 
  geom_text(aes(y=25, x=5, label=paste("sigma == 1"), size=1.5), 
            hjust=0, parse=TRUE, color='blue') + 
  scale_y_log10()

0
投票

使用

ggplot2
annotate()
功能更新解决方案以避免警告

library(ggplot2)
# Solution With annotate()
ggplot(cars, aes(speed, dist), color='blue')+
  geom_point(size=0.8)+
  annotate("text",y=25, x=5, label=paste("sigma == 1"), size=5, hjust=0, parse=TRUE, color='blue')+
  scale_y_log10()

with annotate


# old way Note the annotation is included in legend 
#         Note the warning about Warning aesthetics

ggplot(cars, aes(speed, dist), color='blue')+
  geom_point(size=0.8)+
  geom_text(aes(y=25, x=5, label=paste("sigma == 1"), size=1.5), hjust=0, parse=TRUE, color='blue')+
  scale_y_log10()
#> Warning in geom_text(aes(y = 25, x = 5, label = paste("sigma == 1"), size = 1.5), : All aesthetics have length 1, but the data has 50 rows.
#> ℹ Did you mean to use `annotate()`?

Note warning

创建于 2024-09-03,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.