这可能是一个愿望清单的事情,不确定(即可能需要为此创建geom_pie).今天我看到了一张地图(LINK),上面有饼图.

我不想讨论饼图的优点,这更多的是我可以在ggplot中做这个练习吗?
我提供了一个下面的数据集(从我的下拉框中加载),其中包含制作纽约州地图的地图数据和一些关于各县种族百分比的纯粹数据.我将这种种族构成作为与主数据集的合并以及作为单独的数据集称为密钥.我也认为布莱恩古德里奇在关于居中县名的另一篇文章(HERE)中对我的回应将有助于这个概念.
我们如何用ggplot2制作上面的地图?
数据集和没有饼图的地图:
load(url("http://dl.dropbox.com/u/61803503/nycounty.RData"))
head(ny); head(key) #view the data set from my drop box
library(ggplot2)
ggplot(ny, aes(long, lat, group=group)) + geom_polygon(colour='black', fill=NA)
# Now how can we plot a pie chart of race on each county
# (sizing of the pie would also be controllable via a size
# parameter like other `geom_` functions).
Run Code Online (Sandbox Code Playgroud)
提前感谢您的想法.
编辑:我刚看到junkcharts的另一个案例,它尖叫着这种类型的能力:

我也发现了类似的答案像这样的问题,但大部分都是使用包rworldmap,ggmap,ggsubplot或geom_subplot2d.例如,在此处或此处查看.
我想知道如何将其他ggplot对象(如条形图)绘制到地图上,这是从shapefile创建的.我正在使用的那个可以在这里下载.
编辑
正如@beetroot正确指出的那样,可以在上面发布的链接下下载的新文件发生了显着变化.因此,调整shapefile等的名称.
library(rgdal)
library(ggplot2)
library(rgeos)
library(maptools)
map.det<- readOGR(dsn="<path to your directory>/swissBOUNDARIES3D100216/swissBOUNDARIES3D/V200/SHAPEFILE_LV03", layer="VECTOR200_KANTONSGEBIET")
map.kt <- map.det[map.det@data$KANTONSNUM=="CH01000000"|map.det@data$KANTONSNUM=="CH19000000",]
#get centroids
map.test.centroids <- gCentroid(map.kt, byid=T)
map.test.centroids <- as.data.frame(map.test.centroids)
map.test.centroids$KANTONSNR <- row.names(map.test.centroids)
#create df for ggplot
kt_geom <- fortify(map.kt, region="KANTONSNUM")
#Plot map
map.test <- ggplot(NULL)+
geom_polygon(data=kt_geom, aes(long, lat, group=group), fill="white")+
coord_fixed()+
geom_path(data=kt_geom, color="gray48", mapping=aes(long, lat, group=group), size=0.2)+
geom_point(data=map.test.centroids, aes(x=x, y=y), size=9, alpha=6/10)
mapp
Run Code Online (Sandbox Code Playgroud)
但是,我在组合两个地图时遇到了困难map.test,例如地图,例如,这个:
geo_data <- …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ggmappackage/get_map功能(请参阅下面的代码)结合使用获取整个世界的简单栅格地图ggplot2.缩放级别仅朝向"3",并且不允许进一步缩小
获得一张世界地图似乎是不可能的(如说明中所述ggmap:( "maps of the whole world currently not supported").也许由于缺乏理解为什么这是不可能/不支持的,有没有一种解决方案可以获得世界地图视图?
关于问题的编辑/更新:我试图按照建议使用世界地图 - 但由于某种原因我不明白为什么它不允许我在图中绘制点(这是最初的目标,并且确实有效in ggmap) - 觉得我做了一些愚蠢的事情/犯了一些基本的错误.我收到错误消息"Error in eval(expr, envir, enclos) : object 'group' not found"
编辑 - 不幸的是我使用OpenStreetMap收到错误消息(java错误.正在修复此问题 - 但非OpenStreetMap解决方案会很棒......)
总结一下 - 这种ggmap方法有效geom_point,但我不能得到一个完整的世界地图.这种worldmap方法应该有效,但由于某种原因无法获得积分.....
以下新代码:
ggmap 做法:
library(ggmap)
library(ggplot2)
reclat=c(50,20,30,40)
reclong=c(30,40,30,50)
points=as.data.frame(cbind(reclat,reclong))
al1 = get_map(location = 'Europe', zoom = 3, color="bw",maptype = "satellite")
map = ggmap(al1)
map
#this works
map+geom_point(data=points, aes(x=reclong, y=reclat, colour="red"))
Run Code Online (Sandbox Code Playgroud)
worldmap 做法:
world …Run Code Online (Sandbox Code Playgroud) 我试图在地图上绘制垂直条形图.我在线浏览了一些例子,但不知怎的.
我的数据目前采用以下格式:
University| Count | Category | lat | long
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试执行的代码:
library(ggplot2)
library(ggmap)
library(ggsubplot)
df1 <- data.frame(
University = c(rep("University1", 4), rep("University2", 4), rep("University3", 4),
rep("University4", 4)),
Count = sample(1:10, 16, replace = T),
Category = rep(c("A", "B", "C", "D")),
lat = c(rep(10.902469, 4), rep(17.921959, 4), rep(18.606910, 4), rep(13.202366, 4)),
long = c(rep(76.90020, 4), rep(83.42510, 4), rep(73.87501, 4), rep(77.62340, 4))
)
india <- get_map("India", zoom = 5)
p <- ggmap(india)
p + geom_subplot(data = df1, mapping=aes(x = long, y = …Run Code Online (Sandbox Code Playgroud) 以下是来自state.x77数据集的美国州示例数据:
mydf = structure(list(usa_state = structure(1:5, .Label = c("Alabama",
"Alaska", "Arizona", "Arkansas", "California"), class = "factor"),
Life.Exp = c(69.05, 69.31, 70.55, 70.66, 71.71), HS.Grad = c(41.3,
66.7, 58.1, 39.9, 62.6)), .Names = c("usa_state", "Life.Exp",
"HS.Grad"), class = "data.frame", row.names = c(NA, -5L))
> mydf
usa_state Life.Exp HS.Grad
1 Alabama 69.05 41.3
2 Alaska 69.31 66.7
3 Arizona 70.55 58.1
4 Arkansas 70.66 39.9
5 California 71.71 62.6
>
Run Code Online (Sandbox Code Playgroud)
我想在美国州地图上绘制它.我可以使用以下代码绘制地图:
all_states <- map_data("state")
ggplot() + geom_polygon( data=all_states, aes(x=long, y=lat, group = …Run Code Online (Sandbox Code Playgroud) 我试图在地图上绘制多个条形图,我只是在寻找一个开始的地方。我已经看过几个问题(如下所示)。
然而,所有这些似乎都过时了。
以下是我试图绘制的数据。我希望在一张地图上绘制 4 个地块,每个地理位置都有一个。我希望每个地块都是每个位置的每个目的的计数。
geoloc purpose count
1 Eastern Atlantic Behavior 4
2 Eastern Atlantic Impacts/Fisheries 7
3 Eastern Atlantic Knowledge 8
4 Eastern Atlantic Migration/Habitat Selection 2
5 Eastern Atlantic Movement 10
7 Eastern Pacific Behavior 1
8 Eastern Pacific Impacts/Fisheries 1
9 Eastern Pacific Knowledge 3
10 Eastern Pacific Migration/Habitat Selection 2
11 Eastern Pacific Movement 4
13 Southwestern Pacific Behavior 3
14 Southwestern Pacific Movement 7
15 Western Atlantic Behavior 8 …Run Code Online (Sandbox Code Playgroud) 我想将条形图添加到 ggplot2 中的地图中。存在类似的问题(这个和这个),但他们的答案涉及 ggsubplot,它已被弃用。
geom_scatterpie()提供了一种使用饼图执行此操作的方法(示例 1,也请参阅示例 2),但饼图在视觉上不如条形图直观。同样,我们可以使用此处的geom_sf(size=)说明将气泡大小绘制到地图上。那么有没有办法用 bar 来做到这一点呢?
每个位置制作一根酒吧的可重复示例:
# devtools::install_github("hrbrmstr/albersusa")
library(albersusa)
library(sf)
library(ggplot2)
# make a map
statesus <- fortify(usa_sf("laea"))
p <- ggplot() +
geom_sf(data=statesus, size=0.4)
# set up the data
lat <- c(-68.24, -109.88, -80.88, -113.85)
lon <- c(44.35, 38.24, 25.37, 48.75)
park <- c("Acadia", "Canyonlands", "Everglades", "Glacier")
proportion <- c(0.10, 0.80, 0.05, 0.45) # bar heights
parkdat <- data.frame(lat=lat, lon=lon, park=park, proportion=proportion)
parkdatsf <- …Run Code Online (Sandbox Code Playgroud)