我可以使用
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()
我尝试过改变文本大小和位置,但似乎无法实现。
这对我有用:
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
这样效果更好:
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
原始代码中的问题是 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()
使用
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()
# 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()`?
创建于 2024-09-03,使用 reprex v2.1.0