问题描述
此问题与@Rui Barradas和@Duck回答的上一个问题有关,但我需要更多帮助。上一个链接在这里: how do i vectorise (automate) plot creation in R
基本上,我需要将3个数据集合并到一个具有次要y轴的绘图中。所有数据集都需要按SITENAME进行拆分,并按Sampling.Year进行分面包装。我正在使用split和sapply。多面包裹情节看起来像这样:
但是,我现在正尝试将其他两个数据源添加到图中,看起来像这样:
但我正在努力添加其他两个数据源,并按SITENAME对其进行拆分。到目前为止,她是我的密码...
将绘图格式记录为要应用于拆分列表df的函数(理想情况下,“ df”将作为带有辅助y轴的geom_line添加,而“ FF_start_dates”将作为垂直虚线添加):
SITENAME_plot <- function(AllDates_TPAF){
ggplot(AllDates_TPAF,aes(DATE,Daily.Ave.PAF)) +
geom_point(aes(colour = Risk),size = 3) +
scale_colour_manual(values=c("Very Low" = "dark green","Low" = "light green","Moderate" = "yellow","High" = "orange","Very High" = "red"),drop = FALSE) +
labs(x = "Month",y = "Total PAF (% affected)") +
scale_x_date(breaks = "1 month",labels = scales::date_format("%B")) +
facet_wrap(~Sampling.Year,ncol = 1,scales = "free")+
scale_y_continuous(limits = c(0,100),sec.axis = sec_axis(~.,name = "Water level (m)")) +
theme(axis.text.x = element_text(angle = 90,vjust = 0.5,hjust = 1)) +
theme(legend.text=element_text(size=15)) +
theme(axis.text=element_text(size=15),axis.title=element_text(size=15,face="bold")) +
guides(color = guide_legend(reverse = TRUE))+
theme_bw() +
ggtitle(unique(AllDates_TPAF$SITENAME))
}
绘图写功能:
SITENAME_plot_write <- function(name,g,dir = "N:/abc/"){
flname <- file.path(dir,name)
flname <- paste0(flname,".jpg")
png(filename = flname,width = 1500,height = 1000)
print(g)
dev.off()
flname
}
将函数应用于按SITENAME划分的列表:
sp1 <- split(AllDates_TPAF,AllDates_TPAF$SITENAME)
gg_list <- sapply(sp1,SITENAME_plot,simplify = FALSE)
mapply(SITENAME_plot_write,names(gg_list),gg_list,MoreArgs = list(dir = getwd()))
dev.off()
我在这里上传了所有3个数据集的样本:Sample Data
对不使用gsub但数据太多的致歉,我无法使其正常工作
即使您只是将我引向某种网络教程,也要感谢您能提供的任何帮助。
解决方法
您可以尝试下一个代码。我使用了您共享的数据。请注意所有数据集的名称。理想情况下,在进行拆分之前,关键列string = "(foo(bar))"
print(string.find(")"))
num = string.count(")")
a = 0
b = 0
dict_ = {"open": [],"close": []}
a = string.find("(",a)
dict_["open"].append(a)
for _ in range(0,num):
a = string.find("(",a+1)
dict_["open"].append(a)
b = string.find(")",b+1)
dict_["close"].append(b)
dict_["open"].pop(-1)
print(dict_)
和DATE
应该出现在所有数据框中。还缺少一些Sampling.Year
变量,因此我添加了一个具有相同名称的示例var。在这里的代码中,我为想要的绘图添加了一个函数:
Risk
您最终将获得保存在目录中的类似图:
某些虚线未出现在绘图中,因为它们不存在于您提供的数据中。