小编ika*_*sky的帖子

无缝地适合两个sf多边形

问题

假设我们有两个无缝边界的shapefile.只是,他们没有.有没有办法迫使他们无间隙地相互粘连?

在此输入图像描述


具体案例

我有两个shapefile:一个用于欧洲地区 - REG另一个用于邻国 - NEI.两个shapefile都是从Eurostat存储库中获取的,应该很好地结合在一起; 但是差距很小.此外,我需要简化多边形,然后差距变得非常显着.


我能想到的最好的

我尝试了几种方法但没有成功.我看到实现所需结果的唯一方法需要执行以下步骤:

  • 用我的shapefile之间的边框创建一个sf线;
  • 从这一行创建一个足够大的缓冲多边形来覆盖所有间隙;
  • 将此缓冲区加入并解析为邻居的shapefile - NEI;
  • NEIREGshapefile 剪掉扩展.

显然,这是一个相当笨拙的解决方法.

还有更好的方法吗?


这个要点中的可重复的例子


一个最小的例子

# install dev version of ggplot2
devtools::dev_mode()
devtools::install_github("tidyverse/ggplot2")

library(tidyverse)
library(sf)
library(rmapshaper) 
library(ggthemes)


# load data
source(file = url("https://gist.githubusercontent.com/ikashnitsky/4b92f6b9f4bcbd8b2190fb0796fd1ec0/raw/1e281b7bb8ec74c9c9989fe50a87b6021ddbad03/minimal-data.R"))

# test how good they fit together
ggplot() + 
        geom_sf(data = REG, color = "black", size = .2, fill = NA) +
        geom_sf(data = NEI, color = "red", size = .2, …
Run Code Online (Sandbox Code Playgroud)

maps r ggplot2 r-sf

21
推荐指数
1
解决办法
489
查看次数

如何在牛皮画中将普通的ggplot与刻面的ggplot对齐?

我正试图通过使用cowplot包来以出版物的方式安排绘图.
我只是希望面板的尺寸和尺寸相同.

可重复的示例

library(ggplot2)
library(cowplot)

gg1 <- ggplot(mtcars)+
        geom_point(aes(x=mpg,y=hp))+
        theme_bw()+
        theme(aspect.ratio=1)

gg2 <- ggplot(mtcars)+
        geom_point(aes(x=mpg,y=hp,fill=cyl))+
        facet_wrap(~cyl,ncol=2)+
        theme_bw()+
        theme(aspect.ratio=1,
              legend.position='none')

output <- plot_grid(gg1,gg2, labels = c('A','B'),label_size = 20)
print(output)
Run Code Online (Sandbox Code Playgroud)

代码生成此图. 在此输入图像描述

如您所见,水平轴既不匹配,也不匹配面板的上边缘.

这个论点aligncowplot不方位图工作.

有任何想法吗?

r ggplot2 cowplot

18
推荐指数
2
解决办法
2487
查看次数

ggplot2:对齐不同间距的多个图并在它们之间添加箭头

我有6个图,我想以两步的方式整齐地排列(见图).最好,我想添加漂亮的箭头.

有任何想法吗?


UPD.当我的问题开始收集负面反馈时,我想澄清一下,我已经检查了所有(部分)相关的问题,并没有发现如何在"画布"上自由定位ggplots.而且,我想不出在绘图之间绘制箭头的单一方法.我不是要求现成的解决方案.请指出方向.

在此输入图像描述

r ggplot2 r-grid

12
推荐指数
1
解决办法
967
查看次数

R plot()以俄语生成日期标签

我正在使用俄语Win 8.1的机器上工作.

安装RStudio时我选择英语作为默认语言,但在处理日期(POSIXt)时,plot()在时间轴上给我一个带有俄文标签的输出.

我该如何解决?我想要英语.

提前致谢!

在此输入图像描述

plot datetime locale r

8
推荐指数
1
解决办法
1301
查看次数

ggplot2:在图例栏附近添加分布抖动

一个非平凡的ggplot挑战

我使用具有固定色标的地图在两个时刻比较变量的空间分布 - 以显示实际变化.将图例条附近的变量分布添加为抖动点会非常好.

所需的绘图应该看起来像图片:假设的红色抖动点是手动添加(我只是使用paint.net)到生成的图R.

在此输入图像描述


重现地图

要重现地图,需要R调用一个对象fortIT.这是ggplot2::fortify附加数据的意大利NUTS-2区域的强化(使用)SpatialPolygonsDataFrame.该RDATA文件可以下载这里 [89KB]

以及地图的代码:

require(dplyr)
require(ggplot2)
require(ggthemes)
require(gridExtra)
require(rgeos)
require(maptools)
require(cowplot)
require(viridis)

# load the data
load(url("https://ikashnitsky.github.io/share/1602-so-q-map-jitter/fortIT.RData"))

# produce the first map
gIT1 <- ggplot()+
        geom_polygon(data = fortIT, aes(x=long, y=lat, group=group, fill=tsr03),
                     color='grey30',size=.1)+
        scale_fill_viridis('TSR\n2003',limits=range(fortIT[,9:10]))+ # !!! limits fix the color scale

        coord_equal(xlim=c(4000000, 5500000), ylim=c(1500000,3000000))+
        guides(fill = guide_colorbar(barwidth = 1.5, barheight = 15))+

        theme_map()+
        theme(panel.border=element_rect(color = 'black',size=.5,fill = NA),
              legend.position = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

6
推荐指数
2
解决办法
548
查看次数

使角色矢量的所有元素具有相同的长度

考虑一个字符向量

test <- c('ab12','cd3','ef','gh03')
Run Code Online (Sandbox Code Playgroud)

我需要test包含4个字符(nchar(test[i])==4)的所有元素.如果元素的实际长度小于4,则剩余的位置应填充零.所以,结果应该是这样的

> 'ab12','cd30','ef00','gh03'
Run Code Online (Sandbox Code Playgroud)

我的问题与类似.但是,我需要使用角色向量.

string r

6
推荐指数
1
解决办法
2099
查看次数

ggplot2:aspect.ratio 胜过 coord_equal 或 coord.fixed

我希望收到一个具有相等坐标的方形图,无论我的数据点云的形状如何。

这是我的问题的原始说明。

xy <- data.frame(x = rnorm(100),
                 y = rnorm(100, mean = 1, sd = 2))
gg <- ggplot(xy,aes(x = x, y = y))+
        geom_point()
gg + coord_equal() #now we have square coordinate grid
gg + theme(aspect.ratio = 1) #now the plot is square

# if we use both, aspect.ratio overpowers coord_equal
gg + coord_equal() + theme(aspect.ratio = 1)  
Run Code Online (Sandbox Code Playgroud)

有什么办法可以让绘图和坐标网格都平方吗?当然,剧情中也会有一些空白的地方。我不介意这个。

另外,我想知道确保 x 轴和 y 轴上的相同标签的最简单方法。

r coordinates ggplot2

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

是否有可能轻易地使ggplot去饱和?

是否有可能ggplot轻易去饱和?


原则上,可能有两种可能的策略.
首先,将一些函数应用于ggplot对象(或可能是Grob对象)以使所有颜色去饱和.第二,ggplot在渲染.rmd文件时打印去饱和的一些技巧.这两种策略对我来说都没问题,但第一种策略当然更有意义.从头开始
创建ggplot灰色不是一个好选择,因为这个想法是使用相同的绘图,就好像它是以灰色阴影打印的一样.


关于如何在R中执行去饱和,有一些类似的问题和非常好的答案.是一种去饱和色调的便捷方法.而这里是去饱和的光栅图像的方式.我正在寻找的是一种让整个人饱和的简单方法ggplot.

markdown r colors ggplot2

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

R:十进制上限

我需要一个十进制变量ceilingfloor函数.类似于signif选择在哪个方向上进行选择的选项.

例如,我需要将数字2.63转换为2.7,而不是3(ceiling)或2.6(signif(2.63,2)).


我能想到的唯一解决方案是乘以10,然后乘以10 ceiling除以10. ceiling(2.63*10)/10
我敢肯定,必须有一个更优雅的解决方案.


我的问题与问题非常相似.

numbers r rounding

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

r gis:用sf识别多边形之间的内边界

这是我之前类似问题的更新,同样的任务我只需要在sf框架内完成.


我需要识别这个地图中多边形,红线之间的内部边界.

在此输入图像描述


sp框架内我习惯使用自编写的函数来包装@Spacedman的答案.这里是:

identify_borders <- function(SPolyDF){
    require(rgeos)
    require(sp)
    borders <- gDifference(
            as(SPolyDF,"SpatialLines"),
            as(gUnaryUnion(SPolyDF),"SpatialLines"),
            byid=TRUE)

    df <- data.frame(len = sapply(1:length(borders), 
                                  function(i) gLength(borders[i, ])))
    rownames(df) <- sapply(1:length(borders), 
                           function(i) borders@lines[[i]]@ID)

    SLDF <- SpatialLinesDataFrame(borders, data = df)
    return(SLDF)
}
Run Code Online (Sandbox Code Playgroud)

或者可以使用raster::boundaries().


用于获取空间数据并复制地图的代码

# dev version of ggplot2 for geom_sf()
devtools::install_github("tidyverse/ggplot2")

library(tidyverse)
library(sf)

load(url("https://ikashnitsky.github.io/share/1712-so-q-identify-borders/geodata.Rdata"))

ggplot() + 
        geom_sf(data = gd_nuts0) + 
        geom_sf(data = gd_borders, color = "red") + 
        coord_sf(datum = NA) + 
        theme_void()
Run Code Online (Sandbox Code Playgroud)

gis r r-sp r-sf

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

r gis:查找多边形之间的边界

有一个多边形shapefile,我需要生成一个仅包含多边形之间公共边界的折线shapefile(请参见图片)。

我的问题类似于12,只有我需要在中执行此操作R。后一个类似的问题是指使用Shapelypackage 的解决方案pythonShapelyfor 的类似物Rrgeos。但是,rgeos我自己找不到解决方案。


在此处输入图片说明

注意:用于边框的shapefile是在ArcGIS中使用类似问题1的解决方案生成的。现在,我需要在R

gis r rgdal

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

R &amp; figshare:在 R 中下载时损坏的 zip

我试图使我的研究可重现,将数据存储在figshare
当我下载并解压缩 R 中的数据时,发生了一些奇怪的事情。
这是 zip
如果我手动下载它,它打开正常;但是当我尝试使用R脚本获取它时,下载的存档已损坏。任何想法问题出在哪里?


重现我的错误的代码

url <- 'https://ndownloader.figshare.com/files/4797355'
path <- 'test/missing_data_raw.zip'

ifelse(file.exists(path1), yes = 'file alredy exists', no = download.file(url1, path1))

unzip(zipfile = path1,exdir = 'test')
Run Code Online (Sandbox Code Playgroud)

r unzip

0
推荐指数
1
解决办法
1325
查看次数

标签 统计

r ×12

ggplot2 ×6

gis ×2

r-sf ×2

colors ×1

coordinates ×1

cowplot ×1

datetime ×1

gridextra ×1

locale ×1

maps ×1

markdown ×1

numbers ×1

plot ×1

r-grid ×1

r-sp ×1

rgdal ×1

rounding ×1

string ×1

unzip ×1