R中的(。)是什么意思?

时间:2020-08-25 08:43:59

标签: r ggplot2

R中的(。)是什么意思? 如

sec_axis(~ log(2)/(.),
      breaks = c(2:7,14,21),
      name = "Doubling time (days)")
  )

此外,它给出了一个错误。错误消息是 错误:辅助轴的转换必须是单调的

谢谢!

1 个答案:

答案 0 :(得分:1)

要给出正确的答案,您应该发布一个可复制的示例:数据+ ggplot代码。


如果sec_axis()位于scale_y_continuous内,则.是占Y主轴上显示的值的占位符;如果位于scale_x_continuous中,则占位符X主轴上显示的值。]。


关于错误,我无法重现。您需要共享ggplot代码(一个显示错误的最小重现示例)和ggplot2的版本。

编辑:

我设法重现了错误。

set.seed(1)
df <- data.frame(x = 1:100, y = rnorm(100))

# works!
ggplot(df) +
    geom_line(aes(x = x, y = y))

# doesn't work
ggplot(df) +
    geom_line(aes(x = x, y = y)) +
    scale_y_continuous(sec.axis = sec_axis(trans = ~1/.))
#> Errore: transformation for secondary axes must be monotonic

发生这种情况是因为零属于Y轴。在R中,如果尝试除以零,它将返回Inf,它无法在轴上绘制。因此,错误。

唯一避免这种情况的方法是技巧:更改标签和中断,而无需实际应用任何转换。如下面的示例(显然,该示例是没有意义的):

ggplot(df) +
    geom_line(aes(x = x, y = y)) +
    scale_y_continuous(sec.axis = sec_axis(~., label = c(-10:-1, 1:10), breaks = 1/c(-10:-1, 1:10)))

enter image description here

要复制Hyndman教授的图表,您应该执行以下操作:

library(tidyverse)
library(tsibble)
library(tidycovid19) #remotes::install_github("joachim-gassen/tidycovid19")

updates <- download_merged_data(cached = TRUE)

updates %>%
    mutate(
        cases_logratio = difference(log(confirmed))
    ) %>%
    filter(iso3c %in% countries) %>%
    filter(date >= as.Date("2020-03-01")) %>%
    ggplot(aes(x = date, y = cases_logratio, col = country)) +
    geom_hline(yintercept = log(2)/c(2:7,14,21), col='grey') +
    geom_smooth(method = "loess", se = FALSE) +
    scale_y_continuous(
        "Daily increase in cumulative cases",
        breaks = log(1+seq(0,60,by=10)/100),
        labels = paste0(seq(0,60,by=10),"%"),
        minor_breaks=NULL,
        sec.axis = sec_axis(~ .,
                            labels = c(2:7,14,21),
                            breaks = log(2)/c(2:7,14,21),
                            name = "Doubling time (days)")
    ) +
    ggthemes::scale_color_colorblind()

enter image description here