我正在尝试模拟一个项目的一些数据,基本上我需要绘制一个不规则的椭圆形形状,然后在该形状内制作一堆随机点,而我完全不知道如何做到这一点。
现在,我已经制作了一个样条形状,然后在其上绘制了一堆点。有什么办法可以找到重叠部分吗?或者更好的是,只是在预制形状的边界内生成随机点?
(如果有更好的开始方式,请随意放弃我的代码 - 也许它需要是某种空间对象?)
set.seed(2)
shape <- data.frame(
x = c(2, 3, 2, 3, 2, 1, 0, 1),
y = c(1, 3, 5, 7, 9, 7, 5, 3 )
)
scatter = data.frame(
x = rnorm(100, mean = 1.5, sd = .6),
y = rnorm(100, mean = 5, sd = 2)
)
ggplot(data = shape,
aes(x=x,y=y)) +
ggforce::geom_bspline_closed(fill = "transparent", color = "black") +
geom_point(color = "blue") +
coord_equal() +
geom_point(data = scatter, shape = "*", size=3)
Run Code Online (Sandbox Code Playgroud)
我正在使用 dplyr 管道来清理我的 df,然后直接输入到 ggplot 中。但是,我只想一次只绘制一组,因此我需要过滤到该组。问题是,我希望比例保持不变,就好像所有群体都存在一样。是否可以在 ggplot() 命令中进一步过滤管道 df?例如下面。
# create df
set.seed(1)
df <- data.frame(matrix(nrow=100,ncol=5))
colnames(df) <- c("year","group","var1","var2","var3")
df$year <- rep(1:4,each=25)
df$group <- rep(c("a","b","c","d","e"),times=20)
df$var1 <- runif(100,min=0,max=30)
df$var2 <- sample(1:500,100,replace=T)
df$var2[1:25] <- sample(1:100,25,replace = T)
df$var3 <- runif(100,min=0,max=100)
Run Code Online (Sandbox Code Playgroud)
现在通过管道来清理它(这里我们只是对其进行一些随机的操作),然后绘制:
df %>%
filter(var3 < 80) %>% # random thing 1 - filter some stuff
filter(var2 < 400) %>% # random thing 2 - filter more
mutate(var2 = as.numeric(var2)) %>% # random thing 3 - mutate a column
ggplot(aes(x=group,y=var1,color=var2)) +
geom_point() …Run Code Online (Sandbox Code Playgroud) 我最近买了一台新的 MacBook Pro,但遇到了一些与 R 图形相关的问题。在绘制 sf 对象时,R 的运行速度非常慢。我发现这个问题已有几年历史了(此处: https: //github.com/rstudio/rstudio/issues/3866),但从未提出任何解决方案。作为参考,RStudioGD绘制对象的速度比它慢 300 倍以上pdf,这让我抓狂。从上面的链接分享可重现的示例(尽管系统时间数字是我的):
<<================= 从上面的链接复制:========================== =>>
我想绘制此处找到的缅甸形状文件:
https://gadm.org/download_country_v3.html
library(rgdal)
library(sp)
tdir = tempdir()
get_poly = function() {
tmp = tempfile(tmpdir = tdir)
download.file(
'https://biogeo.ucdavis.edu/data/gadm3.6/shp/gadm36_MMR_shp.zip',
tmp
)
unzip(tmp, exdir = tdir)
readOGR(tdir, 'gadm36_MMR_0', stringsAsFactors = FALSE)
}
Run Code Online (Sandbox Code Playgroud)
使用 RStudioGD 绘制此图比绘制 pdf 慢得多:
mmr = get_poly()
system.time(plot(mmr))
# user system elapsed
# 128.162 0.510 129.271
unlink(tdir, recursive = TRUE)
Run Code Online (Sandbox Code Playgroud)
重新启动 R 以清除缓存/开销并再次运行:
mmr = get_poly()
tpdf = tempfile(tmpdir …Run Code Online (Sandbox Code Playgroud)