r - 如何在 log-lin 中绘制 R 中的时间序列?
问题描述
这是基本代码,对此答案表示赞赏:
require(RCurl)
require(foreign)
x = getURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv")
corona = read.csv(text = x, sep =",",header = T)
Italy <- corona[corona$Country.Region=='Italy',][1,5:ncol(corona)]
library(xts)
plot(xts(unlist(Italy),
order.by = as.Date(sub("X", "", names(Italy)),"%m.%d.%y")),
ylim=c(0,20000), main="Number Cov-19 Italy")
自然,我希望 y 轴中的值是案例数,就像在这里一样,但是如果我运行类似的东西,我会得到实际的日志基数 2:
LogItaly <- log2(Italy[,30:ncol(Italy)])
plot(xts(unlist(LogItaly),
order.by = as.Date(sub("X", "", names(LogItaly)),"%m.%d.%y")),
main=expression(paste(2^y, " - Doubling of no. cases Cov-19 ITL")),
ylim=c(0,16))
解决方案
您可以使用 ggplot2 生成一个类似的图形,其中 Y 轴已按照您的预期进行了转换。
require(ggplot2)
ts_data=xts(unlist(Italy),order.by = as.Date(sub("X", "", names(Italy)),"%m.%d.%y"))
base_breaks<-function(n=10){
function(x){
axisTicks(log10(range(x,na.rm=TRUE)),log=TRUE,n=n)
}
}
ts_dataframe=data.frame(time=index(ts_data),cases=coredata(ts_data))
p<-ggplot(data=ts_dataframe[30:dim(ts_dataframe)[1],],aes(time,cases))+
geom_line()+
scale_y_continuous(trans='log2',breaks=base_breaks())+
scale_x_date(date_breaks="3 days",date_minor_breaks="1 days")+
xlab("time")+
ylab("cases")+
labs(title="Number Cov-19 Italy")+
theme_bw()
有关将 xts 转换为数据框的更多信息,您可以查看此处。
推荐阅读
- sympy - SymPy 无法求解方程 cos(x) = - 1 /cosh(x)
- docker - 如何使用 Docker 列出可用的 repo 版本
- c# - 如何从嵌套列表中删除重复行?
- ios - 快速在动态表格视图单元格中使用 JSON 响应
- python - 等效于 str.format 的 Keras 后端函数
- wpf - 最简单的跨分辨率应用程序和自适应 UI 构建。不能在 WPF 中做到这一点
- c# - 在 app.config 中获取 ConfigurationElement 父级
- ocaml - OCaml- 评估函数时出错(此表达式的类型为 'a * 'b 但表达式应为 ('a * 'b) list# 类型)
- python - 加载 numpy 时本地脚本与内置模块冲突
- ssl - 如何找到 ssl / tls 主密钥