小编Séb*_*tte的帖子

使用ggplot2绘制具有多个子多边形和孔的SpatialPolygons

我想SpatialPolygonsspggplot2中带孔的库中绘制.感谢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)

r polygon geospatial ggplot2 broom

10
推荐指数
1
解决办法
771
查看次数

使用facet wrap并使用geom_sf映射不同的状态

首先,我知道这个答案:使用facet wrap在R中映射不同的状态
但我使用库的对象sf.
似乎facet_wrap(scales = "free")不适用于使用geom_sfggplot2 绘制的对象.我收到这条消息:

Erreur:只有coord_cartesian()和 支持自由音阶coord_flip()

有没有我错过的选择?
任何人都可以在不被迫使用cowplot(或任何其他网格范围)的情况下解决问题?

的确,这是一个例子.我想分别展示不同的法国地区,但有自己的x/y限制.

没有scale ="free"的结果

使用整个地图的范围计算尺度.

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)

具有geom_sf的构面区域

使用cowplot的结果

我需要使用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)

具有geom_sf和cowplot的构面区域

r ggplot2 r-sf

10
推荐指数
1
解决办法
1183
查看次数

与geom_tile()结合的coord_map()非常慢

我正在使用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 spatial ggplot2 r-raster

7
推荐指数
0
解决办法
347
查看次数

如何在 Docker 容器中运行 R Shiny 应用程序

我为 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)

r shiny docker dockerfile golem

7
推荐指数
2
解决办法
8156
查看次数

将SpatialPointsDataFrame与SpatialPolygonsDataFrame合并错误:返回的最大密集矩阵大小已超过

我正在尝试在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)

是否还有其他方法可以执行我想要的操作或解决错误?

r polygon spatial intersect

5
推荐指数
1
解决办法
1058
查看次数

如何使用 renderDT 强制科学记数法

我希望DT表中数值的行为与print使用时输出中的数值相同:

options(scipen = -1)
options(digits = 3)
cars/1000000
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但无论有什么选择,DT似乎都不在乎: 在此处输入图片说明

我知道这print与渲染表格不同,但应该有办法做到这一点。我可以玩signifround限制数字,但我丢失了非常低的值的信息,这对高值的影响不同。

  • 我想将值保留为数字,以便可以正确对列进行排序。
  • 如果只有 3 位数字,则值应保持经典,如果更多,则应保持科学。

这是最小的例子。

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)

r datatables shiny dt

5
推荐指数
2
解决办法
1487
查看次数

如何从kable()中下标表中的名称?

给定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()创建表时,它不会出现下标.

r names subscript rowname r-markdown

4
推荐指数
2
解决办法
3842
查看次数

使用R的邻近图

我正在寻找使用R创建一些接近图,以显示距某些点的距离。我在R代码中找不到任何示例,但是我找到了我想要的输出: 在此处输入图片说明

它不一定必须具有所有标签/内部边界向导,但我希望它停止在海边界(考虑使用该rgeos功能gintersection-参见此处)。

我尝试将密度图绘制为“热图”(这将是一个很好的解决方案/替代方法),并将shapefile放在顶部(遵循此建议,但它们没有排列在一起,所以我不能这样做gintersection,可能是因为密度图上没有附加坐标系。在此处输入图片说明

r spatial r-sf

4
推荐指数
1
解决办法
400
查看次数

提取包含在 SpatialPolygons 中的栅格单元的数量

我想创建一个函数来计算 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 spatial r-raster iterated-function

3
推荐指数
1
解决办法
1720
查看次数