这个问题来自以下两个主题:
如何使用stat_bin2d()来计算ggplot2中的计数标签?
在第一个主题中,用户想要使用stat_bin2d生成热图,然后想要在热图上写入每个bin的计数.用户最初想要使用的方法不起作用,这是表明stat_bin2d设计为使用geom ="rect"而不是"text"的最佳答案.没有给出令人满意的答复.
第二个问题几乎与第一个问题相同,但有一个关键的区别,即第二个问题中的变量是文本,而不是数字.答案产生了所需的结果,将bin的计数值放在stat_2d热图中的bin上.
为了比较我准备以下代码的两种方法:
library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
ggplot(data, aes(x = x, y = y))
geom_bin2d() +
stat_bin2d(geom="text", aes(label=..count..))
Run Code Online (Sandbox Code Playgroud)
我们知道这首先给你错误:
"错误:geom_text需要以下缺失的美学:x,y".
与第一个问题中的问题相同.有趣的是,从stat_bin2d更改为stat_binhex可以正常工作:
library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
ggplot(data, aes(x = x, y = y))
geom_binhex() +
stat_binhex(geom="text", aes(label=..count..))
Run Code Online (Sandbox Code Playgroud)
这是伟大的,但一般来说,我不认为十六进制binning是非常清楚的,并且为了我的目的,我不会为我想要的数据工作.我真的想使用stat_2d.
为了实现这一点,我根据第二个答案准备了以下工作:
library(ggplot2)
data <- data.frame(x = rnorm(1000), y = rnorm(1000))
x_t<-as.character(round(data$x,.1))
y_t<-as.character(round(data$y,.1))
x_x<-as.character(seq(-3,3),1)
y_y<-as.character(seq(-3,3),1)
data<-cbind(data,x_t,y_t)
ggplot(data, aes(x = x_t, y = y_t)) +
geom_bin2d() +
stat_bin2d(geom="text", aes(label=..count..))+
scale_x_discrete(limits =x_x) …Run Code Online (Sandbox Code Playgroud) 问题几乎概括了这一点。今天早些时候我在 PyCharm 中运行了以下脚本:
rasterfolder = "F:/1_Raster_Processing/Classified/"
vectorfolder = "H:/Output/SplitShapes/"
tablefolder = "H:/Output/Split_Tables_3/"
import arcview
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")
arcpy.env.workspace = vectorfolder
flist = arcpy.ListFeatureClasses()
for f in flist:
TabulateArea(f,"FID",rasterfolder + "KNN100_" + f[:-6] + ".tif","Value",tablefolder + f[:-4] + ".dbf",0.25)
Run Code Online (Sandbox Code Playgroud)
一个要素类大约需要 4 分钟,并且有几百个要素类需要运行。在一天中间的某个时刻,该进程挂起并且不再生成任何输出,因此我终止了它并重新开始(认为这是 pyCharm 问题)。当我重新开始时,每个要素类突然需要大约 1 小时以上才能执行完全相同的过程。我已经在 WingIDE 中尝试了相同的过程,但仍然遇到问题。我已经重新启动了所有内容,并且除了这台机器上的这个进程之外什么都不运行。想法?我需要在这里牺牲一只牲口吗?winRar 需要付费吗?
其他人在运行脚本时是否遇到过问题?前几次运行得很好,但突然间,没有明显的原因,速度大幅减慢?
这可能是哲学家的一个……(或@Steve Weston 或@Martin Morgan)
我在使用 parLapply 时遇到了一些内存泄漏问题,在深入研究了足够多的线程后,我认为这个问题是有道理的。我花了一些时间来尝试解决这个问题,虽然我对观察到的行为发生的原因有所了解,但我不知道如何解决它。
将以下内容视为源脚本,另存为: parallel_question.R
rf.parallel<-function(n=10){
library(parallel)
library(randomForest)
rf.form<- as.formula(paste("Final", paste(c('x','y','z'), collapse = "+"), sep = " ~ "))
rf.df<-data.frame(Final=runif(10000),y=runif(10000),x=runif(10000),z=runif(10000))
rf.df.list<-split(rf.df,rep(1:n,nrow(rf.df))[1:nrow(rf.df)])
cl<-makeCluster(n)
rf.list<-parLapply(cl,rf.df.list,function(x,rf.form,n){
randomForest::randomForest(rf.form,x,ntree=100,nodesize=10, norm.votes=FALSE)},rf.form,n)
stopCluster(cl)
return(rf.list)
}
Run Code Online (Sandbox Code Playgroud)
我们使用以下命令获取并运行脚本:
scrip.loc<-"G:\\Scripts_Library\\R\\Stack_Answers\\parallel_question.R"
source(scrip.loc)
rf.parallel(n=10)
Run Code Online (Sandbox Code Playgroud)
相当直接……我们并行运行了几个随机森林。似乎是内存效率。我们可以稍后将它们组合起来,或者做其他事情。便利。好的。表现得很好。
现在考虑以下脚本,另存为 parallel_question_2.R
rf.parallel_2<-function(n=10){
library(parallel)
library(magrittr)
library(randomForest)
rf.form<- as.formula(paste("Final", paste(c('x','y','z'), collapse = "+"), sep = " ~ "))
rf.df<-data.frame(Final=runif(10000),y=runif(10000),x=runif(10000),z=runif(10000))
large.list<-rep(rf.df,10000)
rf.df.list<-split(rf.df,rep(1:n,nrow(rf.df))[1:nrow(rf.df)])
cl<-makeCluster(n)
rf.list<-parLapply(cl,rf.df.list,function(x,rf.form,n){
randomForest::randomForest(rf.form,x,ntree=100,nodesize=10, norm.votes=FALSE)},rf.form,n)
stopCluster(cl)
return(rf.list)
}
Run Code Online (Sandbox Code Playgroud)
在第二个脚本中,我们在源代码环境中有一个很大的列表。我们不会调用列表或将其带入我们的并行函数中。我已将列表的大小设置为在至少 32GB 的机器上可能是个问题。
scrip.loc<-"G:\\Scripts_Library\\R\\Stack_Answers\\parallel_question_2.R"
source(scrip.loc)
rf.parallel_2(n=10)
Run Code Online (Sandbox Code Playgroud)
当我们运行第二个脚本时,我们最终携带了大约 3gb(我们的大列表的大小)* 设置到集群的工作线程数,以及额外的材料。如果我们在无源环境中运行第二个脚本的内容,则不会出现这种行为;相反,我们得到一个 ~3gb 的列表,并行化的函数运行没有问题,这就是它的结束。
那么..如何/为什么工作环境从父环境中获取不必要的变量元素?为什么它只发生在源脚本中?当我有一个源代码、大型且复杂的脚本,其中包含并行化的子部分(但可能有 3-10gb 的中间数据被携带)时,我该如何缓解这种情况?
相关或类似的主题: