使用ggplot2映射子图

时间:2013-08-02 02:40:42

标签: r ggplot2 subplot bar-chart

我试图使用ggplot2在地图内绘制子图。有一个问题需要处理 这个问题已经存在,但我相信这个差异就是子图没有了 与地图信息有很大关系。要完成这个问题,请运行代码直到 问题

library(ggplot2)
library(plyr)
library(reshape2)

获取地图信息

con <- url("http://gadm.org/data/rda/ARG_adm2.RData")
print(load(con))
close(con)

ggmap <- fortify(gadm, region = "NAME_1") 

清除背景(现在运行这两个,将在以后使用)

theme_martin <- 
  theme(
    axis.line=element_blank(),
    axis.text.x=element_blank(),
    axis.text.y=element_blank(),
    axis.ticks=element_blank(),
    axis.ticks.length=unit(0.3, "lines"),
    axis.ticks.margin=unit(0.5, "lines"),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    legend.background=element_rect(fill="white", colour=NA),
    legend.key=element_rect(colour="white"),
    legend.key.size=unit(1.2, "lines"),
    legend.position= "bottom",
    legend.text=element_text(size=rel(0.8)),
    legend.title=element_text(size=rel(0.8), face="bold", hjust=0),
    panel.background=element_blank(),
    panel.border=element_blank(),
    panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    panel.margin=unit(0, "lines"),
    plot.background=element_blank(),
    plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"),
    plot.title=element_text(size=rel(1.2)),
    strip.background=element_rect(fill="grey90", colour="grey50"),
    strip.text.x=element_text(size=rel(0.8)),
    strip.text.y=element_text(size=rel(0.8), angle=-90) 
  )


theme_martin_2 <- 
  theme(
    axis.text.y=element_blank(),
    axis.ticks=element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    legend.background=element_rect(fill="white", colour=NA),
    legend.key=element_rect(colour="white"),
    legend.key.size=unit(1.2, "lines"),
    legend.position="right",
    legend.text=element_text(size=rel(0.8)),
    legend.title=element_text(size=rel(0.8), face="bold", hjust=0),
    panel.background=element_blank(),
    panel.border=element_blank(),
    panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    panel.margin=unit(0, "lines"),
    plot.background=element_blank(),
    plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"),
    plot.title=element_text(size=rel(1.2)),
    strip.background=element_rect(fill="grey90", colour="grey50"),
    strip.text.x=element_text(size=rel(0.8)),
    strip.text.y=element_text(size=rel(0.8), angle=-90) 
  )

绘图地图

p <- ggplot(data=ggmap, aes(x=long, y=lat)) 
p <- p + geom_polygon(data=ggmap, colour="white", fill = "#00BFC4", aes(group=group))
p <- p + coord_map(xlim=-c(77, 53), ylim=-c(56,20))
p <- p + theme_martin
p

我的数据框

df_wide <- data.frame(PROV = c("BUENOS AIRES", "TUCUMAN", "SANTA CRUZ"), 
                      Var1 = c(15, 12, 8), Var2 = c(20, 10, 15), Var3 = c(5, 7, 8),
                      long = c(-32.971804, -28.459033, -43.452919), 
                      lat = c(-54.056168,-64.714966,-67.175903))

df_long <- melt(df_wide[,1:4])
df_long <- join(df_long, df_wide, type = "inner")
df_long <- df_long[,c(1:3, 7:8)]

df_1 <- subset(df_long, PROV == "BUENOS AIRES")
df_2 <- subset(df_long, PROV == "TUCUMAN")
df_3 <- subset(df_long, PROV == "SANTA CRUZ")

col_bar <- c("#00BA38", "#00BFC4", "#D7BA00")

问题

如何使用ggplot或基本图形(如下图(sub_plot_i))向此图添加条形图? 我想在每个数据框中表示的地理坐标处添加它们: 例如: 位于df_1[1,4:5]的BUENOS AIRES条形图 位于df_2[1,4:5]的TUCUMAN条形图 SANTA CRUZ条形图位于df_3[1,4:5]

sub_plot_1 <- ggplot(df_1, aes(x = factor(variable), y = value))
sub_plot_1 <- sub_plot_1 + geom_bar(data=df_1, stat = "identity", fill = col_bar) 
sub_plot_1 <- sub_plot_1 + geom_text(aes(label=value), colour= col_bar, size = 7, vjust = -1)
sub_plot_1 <- sub_plot_1 + theme_martin_2

sub_plot_2 <- ggplot(df_2, aes(x = factor(variable), y = value))
sub_plot_2 <- sub_plot_2 + geom_bar(data=df_2, stat = "identity", fill = col_bar) 
sub_plot_2 <- sub_plot_2 + geom_text(aes(label=value), colour= col_bar, size = 7, vjust = -1)
sub_plot_2 <- sub_plot_2 + theme_martin_2

sub_plot_3 <- ggplot(df_3, aes(x = factor(variable), y = value))
sub_plot_3 <- sub_plot_3 + geom_bar(data=df_2, stat = "identity", fill = col_bar) 
sub_plot_3 <- sub_plot_3 + geom_text(aes(label=value), colour= col_bar, size = 7, vjust = -1)
sub_plot_3 <- sub_plot_3 + theme_martin_2

print(sub_plot_1)
print(sub_plot_2)
print(sub_plot_3)

我已经尝试过这个Plotting bar charts on map using ggplot2?问题中的建议,但他们似乎没有处理同样的问题 我试过ggsubplot()但它没有那么好用。 我也尝试将两个地块打印在一起,但也没有用。

我遇到的问题以及为什么我认为这个问题与链接问题不同 是条形图与地图信息无关。 这些是来自几乎所有外部信息的条形图,也是最重要的事情 地图和条形图是条形图的位置。

0 个答案:

没有答案