在R

时间:2017-08-09 15:36:21

标签: r plot pie-chart sp

我想在我设法绘制的网格数据上绘制一个饼图。

数据:

nasafile <- "http://eosweb.larc.nasa.gov/sse/global/text/global_radiation"
nasa <- read.table(file=nasafile, skip=13, header=TRUE)

关注此帖子:R plot grid value on maps后,我使用spplot使用以下方式绘制数据:

gridded(nasa) <- c("Lon","Lat")
spplot(nasa, "Ann")

我一直在尝试使用几个函数在情节的顶部绘制饼图,但还没设法做到:

如果我在绘制地图后使用floating.pie功能,则会出错。

floating.pie(5,2, c(3,2,5,1), radius=1)  
Error in polygon(xc, yc, col = col[i], ...) : 
  plot.new has not been called yet   

绘制空图后使用par(new=TRUE),可以绘制饼图,但坐标基于新图。

有没有办法在spplot

之上绘制饼图

我检查过pieSP,但无法设法绘制它。

2 个答案:

答案 0 :(得分:1)

我不会删除其他答案,因为它可以帮助某人。

但我们可以试试这个(丑陋的饼图)。 在此选项中,您无法使用ggplot2(至少我不知道如何)

library(lattice)
library(gridBase)
library(grid) 


plot.new()
pushViewport(viewport())
plot1
pushViewport(viewport(x=.5,y=.5,width=.15,height=.15))    #this will change position of pie
#grid.rect()
par(plt = gridPLT(), new=TRUE)
pie(c(25, 25, 50))             # I've tried push "pie" like did with "plot1" but it doesn't work

grid.rect()将在饼图外部绘制一个框。 我希望它有效

world with a pie

答案 1 :(得分:0)

您可以使用ggplot2创建一个饼图并使用grid.arrange

library(gridExtra)
library(ggplot2)

#creating the pie.chart (random data)
df <- data.frame(
  group = c("Male", "Female", "Child"),
  value = c(25, 25, 50)
  )

bp <- ggplot(df, aes(x="", y=value, fill=group)) +
geom_bar(width = 1, stat = "identity")

pie <- bp + coord_polar("y", start=0)

然后,创建ssplot

gridded(nasa) <- c("Lon","Lat")
plot1 <- spplot(nasa, "Ann")

最后,这两个地块

grid.arrange(pie, plot2, nrow=2)

enter image description here