我正在处理数千个气象时间序列数据(样本数据可以从这里下载) https://dl.dropboxusercontent.com/s/bxioonfzqa4np6y/timeSeries.txt
在我的Linux Mint PC(64位,8GB RAM,双核2.6 GHz)上使用ggplot2绘制这些数据耗费了大量时间。我想知道是否有办法加快速度或更好地绘制这些数据?非常感谢您提出任何建议!
这是我现在使用的代码
##############################################################################
#### load required libraries
library(RCurl)
library(dplyr)
library(reshape2)
library(ggplot2)
##############################################################################
#### Read data from URL
dataURL = "https://dl.dropboxusercontent.com/s/bxioonfzqa4np6y/timeSeries.txt"
tmp <- getURL(dataURL)
df <- tbl_df(read.table(text = tmp, header=TRUE))
df
##############################################################################
#### Plot time series using ggplot2
# Melt the data by date first
df_melt <- melt(df, id="date")
str(df_melt)
df_plot <- ggplot(data = df_melt, aes(x = date, y = value, color = variable)) +
geom_point() +
scale_colour_discrete("Station #") +
xlab("Date") +
ylab("Daily Precipitation [mm]") +
ggtitle('Daily precipitation from 1915 to 2011') +
theme(plot.title = element_text(size=16, face="bold", vjust=2)) + # Change size & distance of the title
theme(axis.text.x = element_text(angle=0, size=12, vjust=0.5)) + # Change size of tick text
theme(axis.text.y = element_text(angle=0, size=12, vjust=0.5)) +
theme( # Move x- & y-axis lables away from the axises
axis.title.x = element_text(size=14, color="black", vjust=-0.35),
axis.title.y = element_text(size=14, color="black", vjust=0.35)
) +
theme(legend.title = element_text(colour="chocolate", size=14, face="bold")) + # Change Legend text size
guides(colour = guide_legend(override.aes = list(size=4))) + # Change legend symbol size
guides(fill = guide_legend(ncols=2))
df_plot
答案 0 :(得分:8)
您的部分问题要求“更好地绘制这些数据”。
在这种精神中,你似乎有两个问题,首先,你希望沿着x轴绘制> 35,000个点,正如一些评论指出的那样,这将导致像素重叠,但是极其严重大型高分辨率显示器。其次,更重要的是IMO,你试图在同一个地块上绘制69个时间序列(台)。在这种情况下,热图可能是更好的方法。
library(data.table)
library(ggplot2)
library(reshape2) # for melt(...)
library(RColorBrewer) # for brewer.pal(...)
url <- "http://dl.dropboxusercontent.com/s/bxioonfzqa4np6y/timeSeries.txt"
dt <- fread(url)
dt[,Year:=year(as.Date(date))]
dt.melt <- melt(dt[,-1,with=F],id="Year",variable.name="Station")
dt.agg <- dt.melt[,list(y=sum(value)),by=list(Year,Station)]
dt.agg[,Station:=factor(Station,levels=rev(levels(Station)))]
ggplot(dt.agg,aes(x=Year,y=Station)) +
geom_tile(aes(fill=y)) +
scale_fill_gradientn("Annual\nPrecip. [mm]",
colours=rev(brewer.pal(9,"Spectral")))+
scale_x_continuous(expand=c(0,0))+
coord_fixed()
请注意data.tables
的使用。您的数据集相当大(因为所有列; 35,000行并不是那么大)。在这种情况下,data.tables
将大大加快处理速度,尤其是fread(...)
,这比基础R中的文本导入功能快得多。