当前位置: 首页 > 知识库问答 >
问题:

在活页中绘制shp文件,在ggplot中工作

刘曾琪
2023-03-14

我很难让我的数据框在传单中绘制。我有一个shapefile和一个csv合并在一起。生成的数据框有几列,包括long、lat和“百分比”。

我可以使用ggplot和以下代码来绘制它:

p <- ggplot() +
    geom_polygon(data = nyc_plotData, aes(x=long, y=lat, group = group, 
                                      fill=percent)) +
    geom_polygon(data = county, aes(x=long, y=lat, group = group), 
                                      fill=NA, color = "black", size = 0.25) +
    coord_map(xlim = c(-74.26, -73.71), ylim = c(40.49,40.92))

结果是一张纽约市收入分布的choropleth地图:

当我尝试在传单中使用相同的数据帧时,会出现以下错误:

不知道如何从类 data.frame 的对象获取路径数据

我知道我必须重新格式化我的数据帧。我尝试了各种方法转换为空间多边形数据帧。例如:

xy <- nyc_plotData[,c(1,2)]
spdf <- SpatialPolygonsDataFrame(coords = xy, data = nyc_plotData,
                               proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))

给出以下错误:

空间多边形数据帧中的错误(coords = xy, data = nyc_plotData, proj4string = CRS(“ proj=longlat datum=WGS84 ellps=WGS84 towgs84=0,0,0”)) : 未使用的参数 (coords = xy, proj4string = CRS(“ proj=longlat datum=WGS84 ellps=WGS84 towgs84=0,0,0”))

我显然遗漏了一些东西,但我在网上找不到任何关于这个问题的例子。

我真的很感谢任何关于形状文件和传单中绘图的提示或建议。

共有1个答案

沃盛
2023-03-14

正如其他人指出的(您注意到的),您需要转换为空间多边形数据帧。为了做到这一点,我认为你需要将每个区域转换为多边,然后是多边形,然后是空间多边形,最后是空间多边形数据帧下面有用于此的代码。

另一种方法:您从SentialPolygonsDataFrame开始,然后使用fortifyggplot2进行映射。您可以返回原始SentialPolygonsDataFrame并将数据槽与表格人口普查数据合并(注意不要更改行顺序)。

我在这里对这两个选项做了更详细的介绍。

library(dplyr)
library(sp)

polyFunc<-function(groupname, dat){
  poly<-filter(dat, id==groupname) %>% 
    select(long, lat)
  return(Polygons(list(Polygon(poly)), groupname))
}


tracts <- distinct(ggtract, id, percent)
tractname <- tracts$id
polygons<-lapply(tractname, function(x) polyFunc(x, dat=ggtract)) 
sp.polygon<-SpatialPolygons(polygons)
df.polygon<-SpatialPolygonsDataFrame(sp.polygon, 
                                     data=data.frame(row.names=tractname, tracts))
 类似资料:
  • 所讨论的数据集是钻石(在dplyr中)。我试图打破价格直方图通过削减使用Facet_Wrap。我也希望每个情节都有中线。我就是这么做的- 不过,我肯定这不是达到结果的理想方法,所以我想知道,达到结果的最佳方法是什么? 基于@yeedle评论

  • 问题内容: 我正在寻找有关如何在JPanel中绘制文本的最基本描述。我知道那里有十亿个教程,但是没有一个在我身边点击,我有一些具体的问题可能会帮助其他困惑的人。作为设置(测试应用程序),我有一个类,其中包含JLabel,JTextField,JButton和JPanel。该应用程序从一个外部文件中读取整数,并且在按下JButton时应在面板中显示其平均值。我已经整理了所有基础编程(即按钮响应并将平

  • 在附件中,我已经放置了我的项目的图像,实质上我想在画布中绘制不同类型的形状,如线条,圆形,矩形,三角形ecc,当我单击相对按钮时,我是javafx编程的新手,现在我所理解的是,画布只能在GUI的主线程中进行修改,这就是问题所在,因为当我处理按钮事件“SetonAction”时,我需要主画布的参考来绘制线条或循环ecc。我尝试过使用新的线程,但没有成功。如果有人知道一种方法来做到这一点,我真的很满意

  • 我使用PDFBox 1.8.8并尝试将新文本添加到现有的pdf文件中,问题是我添加的文本正在寻找此特定pdf的压缩 原始pdf(我认为这个文件是问题的根源) (它正在为其他PDF工作)。 问题的图像与解释 它最初并没有显示出来,但我修复了这个问题(设置字体显示模式) 我在使用pdf矩阵,检查了几乎所有的东西。。。我不知道该怎么解决这个问题。。。 问题: 1)是否有任何方法来强制pdfbox使用正常

  • 问题内容: 如何使用HTML5和CSS3画圆? 也可以在其中放入文字吗? 问题答案: 本身不能画一个圆。但是您可以制作与圆相同的东西。 您必须创建一个带有圆角(通过border-radius)的矩形,该圆角是要制作的圆的宽度/高度的一半。

  • 问题内容: 我有一个用于音乐和语音分析的PyQt plus pyqtgraph程序,我想绘制一个wav文件的频谱(使用scipy python软件包计算)。我可以在matplotlib中做到这一点,但是由于matplotlib的性能,我需要切换到pyqtgraph,但是我找不到任何一致的方法来将scipy.signal.spectrogram的输出绘制到pyqtgraph中 谢谢! 问题答案: S

  • 问题内容: 好的,我有这个代码 并且它将淡蓝色的背景绘制到屏幕上。我正在尝试创建一个渐变,该渐变从顶部的深蓝色到底部的浅蓝色。有没有简单的方法可以做到这一点?我是Libgdx和OpenGL的新手,所以我正尝试从书中学习,但我似乎找不到答案。我听说过要绘制一个大正方形并为顶点设置不同的颜色,但是我不确定该怎么做。 问题答案: 在libGDX中,ShapeRenderer对象包含一个方法,该方法为其位

  • 问题内容: 这个问题已经在这里有了答案 : matplotlib-黑白颜色图(带有破折号,点等) (4个答案) 真的只有4种Matplotlib线型吗? (1个答案) 3年前关闭。 我是Python的新手,我想在一张图中绘制多条线,如下图所示。 我试过编写像这样的简单绘图代码: 我知道这些参数 但是我在第一幅图中有很多行,可以像第一幅图那样使用什么样的参数进行绘制。 谢谢 问题答案: MPL中有许