相关疑难解决方法(0)

添加具有不同数据的图层时,ggplot对象未找到错误

我有一些点的情节,我想用段来连接它们

dummy = data.frame(GROUP=c("A","B","C","D"),
                   X = c(80,75,68,78),
                   Y=c(30, 32,36,33)

)
df= data.frame(x1 = c(80), x2 =c(78) , y1=c(30), y2 =c(33))
df
library(ggplot2)
ggplot(dummy,aes(x=X,y=Y,color=GROUP)) + 
  geom_point() +
  geom_segment(aes(x=x1,y=y1,xend= x2, yend =y2), data = df) 
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误

Error in eval(expr, envir, enclos) : object 'GROUP' not found
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

r ggplot2

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

叠加了geom_map的ggmap

library(sp)
library(spdep)
library(ggplot2)
library(ggmap)
library(rgdal)
Run Code Online (Sandbox Code Playgroud)

获取并摆弄数据:

nc.sids <- readShapePoly(system.file("etc/shapes/sids.shp", package="spdep")[1],ID="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))
nc.sids=spTransform(nc.sids,CRS("+init=epsg:4326"))
Run Code Online (Sandbox Code Playgroud)

从stamen.com获取背景地图,情节,看起来不错:

ncmap = get_map(location=as.vector(bbox(nc.sids)),source="stamen",maptype="toner",zoom=7)
ggmap(ncmap)
Run Code Online (Sandbox Code Playgroud)

在地图上创建一个包含长,纬度,Z和绘图的数据框和一个空白图:

ncP = data.frame(coordinates(nc.sids),runif(nrow(nc.sids)))
colnames(ncP)=c("long","lat","Z")

ggmap(ncmap)+geom_point(aes(x=long,y=lat,col=Z),data=ncP)
ggplot()+geom_point(aes(x=long,y=lat,col=Z),data=ncP)
Run Code Online (Sandbox Code Playgroud)

给它一些叫做'id'和强化的独特的id(用维生素和铁?)

nc.sids@data[,1]=1:nrow(nc.sids)
names(nc.sids)[1]="id"
ncFort = fortify(nc.sids)
Run Code Online (Sandbox Code Playgroud)

现在,我的地图和我的极限,我想绘制74出生率:

myMap = geom_map(aes(fill=BIR74,map_id=id),map=ncFort,data=nc.sids@data)
Limits = expand_limits(x=ncFort$long,y=ncFort$lat)
Run Code Online (Sandbox Code Playgroud)

在一个空白的情节我可以:

ggplot() + myMap + Limits
Run Code Online (Sandbox Code Playgroud)

但在ggmap上我不能:

ggmap(ncmap) + myMap + Limits
# Error in eval(expr, envir, enclos) : object 'lon' not found
Run Code Online (Sandbox Code Playgroud)

一些版本:

> packageDescription("ggplot2")$Version
[1] "0.9.0"
> packageDescription("ggmap")$Version
[1] "2.0"
Run Code Online (Sandbox Code Playgroud)

我可以将geom_polygon添加到ggplot或ggmap,它可以按预期工作.所以geom_map就好了....

r map ggplot2 ggmap

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

暂时禁用 ggplot() 中已定义的美学

我们可能想aes()为ggplot()图形定义一些全局的,但在某些层中排除它们。例如假设以下示例:

foo <- data.frame(x=runif(10),y=runif(10))
bar <- data.frame(x=c(0,1),ymin=c(-.1,.9),ymax=c(.1,1.1))
p <- ggplot(foo,aes(x=x,y=y))+geom_point()
Run Code Online (Sandbox Code Playgroud)

一切都很好。但是,当尝试添加功能区时:

p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
# Error: Discrete value supplied to continuous scale
Run Code Online (Sandbox Code Playgroud)

发生此错误是因为我们已经定义了y全局的一部分aes(),也适用于geom_ribbon(),但bar没有它。

我发现了两种避免此错误的可能性,其中之一是y=y从原来的中删除ggplot(foo,aes(x=x,y=y)),但是以后每次我需要绘制一些我应该添加到不好的内容y=y中。aes()

另一种可能性是添加一个假y列bar:

bar = cbind(bar, y=0)
p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在效果很好。然而我不喜欢这样做,因为它是一个假变量。有没有办法aes()在ggplot()调用时暂时禁用已定义的geom_ribbon()?

r ggplot2 aesthetics

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

标签 统计

ggplot2 ×3

r ×3

aesthetics ×1

ggmap ×1

map ×1