微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ggplot2和对数刻度不显示值= 1

如何解决ggplot2和对数刻度不显示值= 1

我想绘制一个对数刻度为y轴的图:

data <- data.frame(x = seq_len(5),y = c(2,1,100,500,30))
ggplot(data) + aes(x,y) + geom_col() + scale_y_log10()

但是因为水平轴始终在y = 1处与垂直轴交叉,所以永远不会绘制y = 1的条形图。

enter image description here

我知道log(1)= 0,但是我可以将图的底数设置为0.1以使条形从1开始吗?

解决方法

另一种解决方案是将条形图的底部放置在-Inf上,以便仍显示log10(1)。这有点棘手,因为您必须将这些条重新参数化为矩形,并让geom了解-Inf是在比例转换之后。

library(ggplot2)

data <- data.frame(x = seq_len(5),y = c(2,1,100,500,30))

ggplot(data) + 
  geom_rect(
    aes(xmin = x - 0.45,xmax = x + 0.45,ymin = stage(1,after_scale = -Inf),ymax = y)
  ) +
  scale_y_log10()

reprex package(v0.3.0)于2020-11-03创建

,

难道不能将y的值乘以10,然后将标签除以相同的数量吗?

ggplot(data) + aes(x,y * 10) +  geom_col() + 
  scale_y_log10(labels = function(x) x/10,name = "y")

enter image description here

您可以对直方图进行相同操作:

set.seed(2)
ggplot(data.frame(x = rnorm(1000)),aes(x)) + 
  geom_histogram(aes(y = ..count.. * 10),color = "black",fill = "gold") +
  scale_y_log10(labels = function(x) x/10,name = "count")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。