R:在地图上绘制圆形直方图/玫瑰图 [英] R: plot circular histograms/rose diagrams on map
问题描述
我试图在地图上的特定坐标上绘制玫瑰图/圆形直方图,类似于在软件包mapplots
中在地图上绘制饼图.
I am trying to plot rose diagrams/ circular histograms on specific coordinates on a map analogous to drawing pie charts on a map as in the package mapplots
.
下面是一个用mapplots
生成的示例(有关代码,请参见下文),我想用玫瑰图替换饼图.
Below is an example generated with mapplots
(see below for code), I'd like to replace the pie charts with rose diagrams
软件包circular
使我能够绘制玫瑰图,但无法将其与mapplots
软件包集成.对实现此目标的替代软件包或代码有何建议?
The package circular
lets me plot the rose diagrams, but I am unable to integrate it with the mapplots
package. Any suggestions for alternative packages or code to achieve this?
回答有关制作地图的代码的问题.这些都是基于mapplots
包的.我为地图下载了shapefile(我认为来自 http://www.freegisdata.org/)
In response to the question for the code to make the map. It's all based on the mapplots
package. I downloaded a shapefile for the map (I think from http://www.freegisdata.org/)
library(mapplots)
library(shapefiles)
xlim = c(-180, 180)
ylim = c(-90, 90)
#load shapefile
wmap = read.shapefile ("xxx")
# define x,y,z for pies
x <- c(-100, 100)
y <- c(50, -50)
z1 <- c(0.25, 0.25, 0.5)
z2 <- c(0.5, 0.2, 0.3)
z <- rbind(z1,z2)
# define radii of the pies
r <- c(5, 10)
# it's easier to have all data in a single df
plot(NA, xlim = xlim, ylim = ylim, cex = 0.75, xlab = NA, ylab = NA)
draw.shape(wmap, col = "grey", border = "NA")
draw.pie(x,y,z,radius = r, col=c("blue", "yellow", "red"))
legend.pie (x = -160, y = -70, labels = c("0", "1", "2"), radius = 5,
bty = "n", cex = 0.5, label.dist=1.5, col = c("blue", "yellow", "red"))
然后可以使用legend.bubble添加饼图大小的图例
the legend for the pie size can then be added using legend.bubble
推荐答案
我在包Hmisc
中发现了subplot(),它似乎完全符合我的要求.下面是我的解决方案(背景中没有地图,可以使用mapplots
进行绘制).我愿意就如何改善这一点提出建议...
I discovered subplot() in the package Hmisc
, which seems to do exactly what I wanted. Below is my solution (without the map in the background, which can be plotted using mapplots
). I am open to suggestions on how to improve this though...
library(Hmisc)
library (circular)
dat <- data.frame(replicate(2,sample(0:360,10,rep=TRUE)))
lat <- c(50, -40)
lon <- c(-100, 20)
# convert to class circular
cir.dat <- as.circular (dat, type ='angles', units = 'degrees', template = 'geographic', modulo = 'asis', zero = 'pi/2', rotation = 'clock')
# function for subplot, plots relative frequencies, see rose.diag for how to adjust the plot
sub.rose <- function(x){
nu <- sum(!is.na(x))
de <- max(hist(x, breaks = (seq(0, 360, 30)), plot = FALSE)$counts)
prop <- nu/de
rose.diag(x, bins = 12, ticks = FALSE, axes = FALSE,
radii.scale = 'linear',
border = NA,
prop = prop,
col = 'black'
)
}
plot(NA, xlim = xlim, ylim = ylim)
for(i in 1:length(lat)){
subplot(sub.rose(cir.dat[,i]), x = lon[i], y = lat[i], size = c(1, 1))
}
这篇关于R:在地图上绘制圆形直方图/玫瑰图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!