R ggplot2世界地图。在传奇中打破

时间:2012-09-03 16:43:38

标签: r map ggplot2 legend

我正在尝试使用R中的ggplot2生成一个世界地图。它应该是一个基于国家的热图。我正在处理的数据来自twitter,我想显示推文的来源。有两个问题:

  1. 综合数据

    map_data("world")
    

    给我一​​张20年前的地图(苏联)。

    map_data("world2")
    

    似乎已经损坏了。或者有一些订购问题,但我不知道如何解决它。

  2. http://schloegl.net/supersambo/world2.pdf

    1. 我想更改颜色中断,不知道如何访问它。由于巴西是唯一一个易于阅读的国家,因此编辑中断并显示少于1000条推文的国家/地区之间的差异非常重要。
    2. http://schloegl.net/supersambo/world.pdf

      这是我的代码

          WD <- getwd()
          if (!is.null(WD)) setwd(WD)
      
          library(maps)
          library(plyr)
          library(ggplot2)
      
          twitter=read.csv("/Users/stephanschloegl/Studium/Diplomarbeit/rawData/c_userInfo/c_userInfo.csv",header=TRUE,check.names=FALSE,sep=";")
      
          #read geodata
          cities=read.csv("GeoWorldMap/cities.txt",header=TRUE,check.names=FALSE,sep=",")
          countries=read.csv("GeoWorldMap/countries.txt",header=TRUE,check.names=FALSE,sep=",")
      
          #find countries for twitter$timezone
          lista <- twitter$time_zone
          country_ids <- cities$CountryID[match(lista,cities$City)]
          country <- countries$Country[match(country_ids,countries$CountryId)]
      
          #FREQENCIES
          frequencies <- as.data.frame(table(country))
          names(frequencies) <- c("region","freq")
          #change 0's to NA
          frequencies$freq[frequencies$freq==0] <- NA
      
          #load world data
          world <- map_data("world2")
          #Delete Antarctica
          world <- subset(world,region!="Antarctica")
      
      
          #merge twitterdata and geodata
          world$tweets <- frequencies$freq[match(world$region,frequencies$region,nomatch=NA)]
      
          map <- qplot(long, lat, data = world, group = group,fill=tweets,geom ="polygon",ylab="",xlab="")
          #this does'nt work
          map + scale_colour_hue(name="Number of\nTweets",breaks=levels(c(10,20,100,200,1000)))
          map
      

1 个答案:

答案 0 :(得分:1)

那是因为scale_colour_hue()用于离散比例。您必须使用scale_fill_gradient(),因为您想要更改填充而不是轮廓。

    map + scale_fill_gradient(name="Number of\nTweets", trans = "log",
                           breaks = c(10, 20, 100, 200, 1000))

你去吧。你也把等级放在休息时间没有意义,推文的数量是数字。

enter image description here

您可以获取新地图here并按照该帖子中的说明进行操作。