ggplot2在使用scale_x_sqrt

时间:2017-12-22 17:05:20

标签: r ggplot2

当我使用ggplot2绘制x坐标从零开始的数据并使用scale_x_sqrt选项时,绘图从x轴上的1开始而不是零。如果我添加limits=c(-0.1, 100),我会收到错误消息" NaNs生成"。如何让ggplot2包含零?

4 个答案:

答案 0 :(得分:2)

您可以通过平方根变换使轴下降到零,但不能低于零。转换产生x值低于零的虚数值。

library(tidyverse)

ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  scale_x_sqrt(limits=c(0,6), breaks=0:6, expand=c(0,0))

enter image description here

答案 1 :(得分:1)

我相信您正在寻找ggplot2中的expand_limits,如下所示:

library(ggplot2)
df <- data.frame(x = 1:10, y = 1:10)
g <- ggplot(df, aes(x, y)) + geom_point()
g <- g + expand_limits(x = 0, y = 0 )
g

enter image description here

?geom_expand

<强>描述

  

有时您可能希望确保限制包含单个值   所有面板或所有图块。这个功能是一个薄的包装   geom_blank可以轻松添加这些值。

答案 2 :(得分:0)

您可以在sqrt内使用aes

# Generate data
foo <- data.frame(a = 0:10, b = 1:11)
# Plot data
library(ggplot2)
ggplot(foo, aes(sqrt(a), b)) + 
    geom_point()

enter image description here

答案 3 :(得分:0)

请参阅:https://github.com/tidyverse/ggplot2/issues/980

他们描述的解决方法是:

library(ggplot2)
library(scales)
mysqrt_trans <- function() {
    trans_new("mysqrt", 
              transform = base::sqrt,
              inverse = function(x) ifelse(x<0, 0, x^2),
              domain = c(0, Inf))
}

ggplot(mtcars, aes(wt, mpg)) + geom_point() +
  scale_x_continuous(trans="mysqrt", limits=c(0, NA))

与此处的其他答案海报相反,这允许在零的左侧留一些空间。

enter image description here