R中的(。)是什么意思? 如
sec_axis(~ log(2)/(.),
breaks = c(2:7,14,21),
name = "Doubling time (days)")
)
此外,它给出了一个错误。错误消息是 错误:辅助轴的转换必须是单调的
谢谢!
答案 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)))
要复制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()