我想SpatialPolygons
从sp
ggplot2中带孔的库中绘制.感谢stackoverflow上的其他问题,我知道在处理顺时针写入的多边形时允许这样做:
http://stackoverflow.com/questions/12047643/geom-polygon-with-multiple-hole/12051278#12051278
确实,在转换时SpatialPolygons
使用broom::tidy
(替换ggplot2::fortify
),孔多边形以顺时针方向保存,以绘制为孔.
在ggplot2中,绘制带有孔的多边形的方式强制一次使用它们fill
,另一次使用colour
,否则你可能会看到穿过多边形的线条.当处理多个子多边形时,一些有孔,这更棘手,定义的点特征的顺序broom::tidy
可能不允许填充多边形(见下图).
你们有没有解决方案摆脱这种填充问题的行为?
这是一个可重复的例子:
library(sp)
library(ggplot2)
# Create two polygons: second would be a hole inside the first
xy = cbind(
x = c(13.4, 13.4, 13.6, 13.6, 13.4),
y = c(48.9, 49, 49, 48.9, 48.9)
)
hole.xy <- cbind(
x = c(13.5, 13.5, 13.45, 13.45, 13.5),
y = c(48.98, 48.92, 48.92, 48.98, 48.98)
)
# Transform as SpatialPolygons with holes …
Run Code Online (Sandbox Code Playgroud) 首先,我知道这个答案:使用facet wrap在R中映射不同的状态
但我使用库的对象sf
.
似乎facet_wrap(scales = "free")
不适用于使用geom_sf
ggplot2 绘制的对象.我收到这条消息:
Erreur:只有
coord_cartesian()
和 支持自由音阶coord_flip()
有没有我错过的选择?
任何人都可以在不被迫使用cowplot
(或任何其他网格范围)的情况下解决问题?
的确,这是一个例子.我想分别展示不同的法国地区,但有自己的x/y限制.
使用整个地图的范围计算尺度.
FRA <- raster::getData(name = "GADM", country = "FRA", level = 1)
FRA_sf <- st_as_sf(FRA)
g <- ggplot(FRA_sf) +
geom_sf() +
facet_wrap(~NAME_1)
Run Code Online (Sandbox Code Playgroud)
我需要使用ggplots列表然后将它们组合起来.这是目标输出.它更清洁.但我也想要一个干净的方式来添加一个传奇.(我知道可能有一个共同的传说,就像在另一个SO问题中: facet wrap扭曲R中的状态图)
g <- purrr::map(FRA_sf$NAME_1,
function(x) {
ggplot() +
geom_sf(data = filter(FRA_sf, NAME_1 == x)) +
guides(fill = FALSE) +
ggtitle(x)
})
g2 <- cowplot::plot_grid(plotlist = g)
Run Code Online (Sandbox Code Playgroud)
我正在使用ggplot2绘制一些半球场,当我尝试将它们投影到立体投影时,渲染需要很长时间.这是一个最小的例子:
lat <- seq(-87.159, -2, by = 3.7)
lon <- seq(0, 360, by = 3.75)
month <- 1:12
gdata <- expand.grid(lat = lat, lon = lon, month = month)
gdata$z <- rnorm(nrow(gdata))
g <- ggplot(gdata, aes(lon, lat)) +
geom_tile(aes(fill = z)) +
facet_wrap(~month, ncol = 4)
benchplot(g)
Run Code Online (Sandbox Code Playgroud)
我明白了:
step user.self sys.self elapsed
1 construct 0.000 0.000 0.000
2 build 0.156 0.004 0.162
3 render 0.976 0.016 0.990
4 draw 0.464 0.000 0.464
5 TOTAL 1.596 0.020 1.616
Run Code Online (Sandbox Code Playgroud)
如果我添加一个投影 coord_map()
benchplot(g …
Run Code Online (Sandbox Code Playgroud) 我为 R Shiny 应用程序构建了 Docker 映像,并在 Windows 10 Home 上使用 Docker Toolbox 运行了相应的容器。当尝试使用网络浏览器打开应用程序时,仅显示索引。我不知道为什么应用程序没有执行。
日志向我展示了这一点:
*** warning - no files are being watched ***
[2019-08-12T15:34:42.688] [INFO] shiny-server - Shiny Server v1.5.12.1 (Node.js v10.15.3)
[2019-08-12T15:34:42.704] [INFO] shiny-server - Using config file "/etc/shiny-server/shiny-server.conf"
[2019-08-12T15:34:43.100] [INFO] shiny-server - Starting listener on http://[::]:3838
Run Code Online (Sandbox Code Playgroud)
我已经通过执行以下引用 docker hub 映像的命令来指定应用程序主机到容器的路径:
docker run --rm -p 3838:3838 -v /C/Docker/App/:/srv/shinyserver/ -v /C/Docker/shinylog:/var/log/shiny-server/ didsh123/ps_app:heatmap
Run Code Online (Sandbox Code Playgroud)
我的 Docker 文件如下所示:
# get shiny serves plus tidyverse packages image
FROM rocker/shiny-verse:latest
# system libraries of general …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在SpatialPolygonsDataFrame(信息)上组合1000x1000m正方形的SpatialPointsDataFrame(网格),以聚合每个网格正方形内点的所有信息。
我尝试了代码:
combined <- intersect(info, grid)
但是我发现这个错误:
Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) :
rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded
Run Code Online (Sandbox Code Playgroud)
是否还有其他方法可以执行我想要的操作或解决错误?
我希望DT
表中数值的行为与print
使用时输出中的数值相同:
options(scipen = -1)
options(digits = 3)
cars/1000000
Run Code Online (Sandbox Code Playgroud)
我知道这print
与渲染表格不同,但应该有办法做到这一点。我可以玩signif
或round
限制数字,但我丢失了非常低的值的信息,这对高值的影响不同。
这是最小的例子。
library(shiny)
library(DT)
library(dplyr)
options(scipen = -1)
options(digits = 3)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
),
# Show a plot of the generated distribution
mainPanel(
DTOutput("dt"),
DTOutput("dt2")
)
)
) …
Run Code Online (Sandbox Code Playgroud) 给定data.frame A,我如何使用下标的行和列名称?最终我想通过rmarkdown中的kable()生成一个表(输出:word文档).
A <- data.frame(round(replicate(3, runif(2)),2))
rownames(A) <- c("Hola123", "Hola234")
A
X1 X2 X3
Hola123 0.47 0.55 0.66
Hola234 0.89 0.45 0.20
Run Code Online (Sandbox Code Playgroud)
在通过kable(A)创建表时,如何从列名和列名中下标所有数字?
我试过了:
rownames(A) <- c(expression(Hola["123"]), expression(Hola["234"]))
names(A) <- c(expression(X["1"]), expression(X["2"]), expression(X["3"]))
Run Code Online (Sandbox Code Playgroud)
但是在.rmd文件中通过kable()创建表时,它不会出现下标.
我想创建一个函数来计算 SpatialPolygonsDataframe 对象的多边形内的栅格单元的数量,并将值添加为新列而不使用循环。我找不到怎么做...
这是我的代码:
library(sp)
library(raster)
# Create a SpatialPolygonsDataframe and a raster objets to overlay
# Polygons
p1 <- rbind(c(-180,-20), c(-140,55), c(-50, 0), c(-140,-60), c(-180,-20))
p2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
p3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45), c(-125,0))
polys <- as(spPolygons(p1, p2, p3), "SpatialPolygonsDataFrame")
# Raster
p4 <- rbind(c(-180,10), c(0,90), c(40,90), c(145,-10),
c(-25, -15), c(-180,0), c(-180,10))
rpol <- spPolygons(p4)
r <- raster(ncol=90, nrow=45)
grd <- rasterize(rpol, r, fun=sum)
# Function to count the share of occupied cells per …
Run Code Online (Sandbox Code Playgroud) r ×9
spatial ×4
ggplot2 ×3
polygon ×2
r-raster ×2
r-sf ×2
shiny ×2
broom ×1
datatables ×1
docker ×1
dockerfile ×1
dt ×1
geospatial ×1
golem ×1
intersect ×1
names ×1
r-markdown ×1
rowname ×1
subscript ×1