前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R-ggplot2 空间绘图 - 房价气泡图的绘制

R-ggplot2 空间绘图 - 房价气泡图的绘制

作者头像
DataCharm
发布2021-02-22 12:07:42
1.3K0
发布2021-02-22 12:07:42
举报

目前计划推出基础图表的绘制教程推文(会同时推出R和Python两个版本),原因在于有时苦苦找不到数据,不仅导致想绘制的图表完成不了,而且也白白浪费了时间,再者也有小伙伴私信要求多些基础教程的推文,当然,如果遇到喜欢的图表我也会进行仿制和再现的。

上篇原创推文使用了geopandas进行了房价分布的地图推文教程,本期我们将使用绘图功能更加强大的ggplot2 以及其推展包进行地图绘制和图表美化工作,主要涉及的知识点如下:

  • geojsonio包对geojson数据格式读取
  • ggplot2 可视化展示
  • openxlsx 实现R灵活读取excel文件
  • ggtext包实现文本定制化操作

geojsonio包对geojson数据格式读取

这里使用的数据和上期推文的数据一样,读取geojson格式文件的代码如下:

代码语言:javascript
复制
HK <- geojson_read("香港特别行政区.json",what='sp')

即可实现R语言对geojson格式地图文件的读取。更多详细教程内容可以参考geojsonio官网。在读取完之后使用broom 包的tidy()方法进行数据灵活整理,代码如下:

代码语言:javascript
复制
library(broom)
HK_fortified <- tidy(HK)
HK_fortified

结果如下(部分):

转换成这样的数据格式后,我们就可以使用ggplot2 进行可视化绘制。

ggplot2 可视化绘制

简单绘制

我们只是对处理过的数据进行简单的绘制,代码如下:

代码语言:javascript
复制
# Plot it
library(ggplot2)

HK_map <- ggplot() +
  geom_polygon(data = HK_fortified, aes( x = long, y = lat, group = group), fill="#69b3a2", color="gray80") +
  theme_void() +
  coord_map()+
  labs(x = NULL, y = NULL,
         title = "ggplot2 + geojsonio map make",
         caption = "Visualization by DataCharm")
HK_map

可视化结果如下:

添加读取文本标签

这里我们读取带有经纬度信息的地区文本文件(csv格式)进行文本图层的添加,文本数据预览如下(部分):

这里使用了ggrepel包进行文本图层的添加,可有效避免文本重叠的问题。代码如下:

代码语言:javascript
复制
# Plot it
library(ggplot2)
library(ggrepel)
HK_map <- ggplot() +
  geom_polygon(data = HK_fortified, aes( x = long, y = lat, group = group), fill="#69b3a2", color="gray80") +
  geom_text_repel(data = name,aes(x = long,y = lat,label=label),size=4)+
  theme_void() +
  coord_map()+
  labs(x = NULL, y = NULL,
         title = "ggplot2 + geojsonio map make",
         caption = "Visualization by DataCharm")
HK_map

可视化结果如下:

散点图层添加

同样,我们使用上篇推文中的房价数据,这里的数据为xlsx 格式数据,我们需使用openxlsx 包进行excel文件数据的方便读取,代码如下:

代码语言:javascript
复制
library(openxlsx) #读取Excel 文件包

scatter <- "hk_data_select.xlsx"
scatter_df <- read.xlsx(scatter)
head(scatter_df)

部分结果如下:

接下来我们进行点图层的添加,绘图代码如下:

代码语言:javascript
复制
# Plot it
library(ggplot2)
library(ggrepel)
library(ggtext)
HK_map <- ggplot() +
  geom_polygon(data = HK_fortified, aes( x = long, y = lat, group = group), fill="#69b3a2", color="gray80") +
  geom_text_repel(data = name,aes(x = long,y = lat,label=label),size=4)+
  geom_point(data = scatter_df,aes(x = lon,y = lat,size=实用单价),color="#FFEB3B",alpha=.4)+
  theme_void() +
  coord_map()+
  labs(x = NULL, y = NULL,
         title = "ggplot2 + geojsonio map make",
         caption = "Visualization by DataCharm")
HK_map

可视化结果:

定制化设置

以上的代码将主要的绘图结果绘制出来,这部分要做的就是将图表进行美化处理:如配色、图例等绘图元素的定制化设置。主要代码如下:

代码语言:javascript
复制
# Plot it
library(tidyverse)
library(ggrepel)
library(ggplot2)
library(ggtext)
library(dplyr)

extrafont::loadfonts()

scatter_breaks <- c(6000,10000,15000,20000,40000,80000)
HK_map <- ggplot() +
  geom_polygon(data = HK_fortified, aes( x = long, y = lat, group = group), fill="#170000", color="gray20",
              size=.5) + 
  geom_point(data = scatter_df,aes(x=lon,y=lat,size=实用单价),colour='#BA1717')+
  geom_text_repel(data = name,aes(x = long,y = lat,label=label),size=4,color='#0DCFE3',
                  family = 'kaiti')+
 # 对点图例进行定制化设置 
  scale_size_continuous(breaks = scatter_breaks,name = '实用单价',limits =c(6000,1000000),
                       guide = guide_legend(
                                            direction = "horizontal",
                                            title.position = "left",
                                            label.position = "bottom",
                                            nrow=1))+
  labs( 
        title = "香港在售二手房分布图",
        subtitle="数据来源: <span style='color:#008354'>菜J学Python</span>",
        caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>")+
  theme_void() +
  coord_map()+
  #对绘图主题进行设置
  theme(
      plot.title = element_text(hjust = 0.5,vjust = .5, color = "white", 
                             size = 20, margin = margin(t = 4, b = 2)),
      text = element_text(family = 'kaiti',color = "white"),
      plot.subtitle = element_markdown(hjust = 0.5,vjust = .5,size=12,color = "white"),
      plot.caption = element_markdown(color = "white",face = 'bold',size = 10),
      legend.title = element_text(size = 10),
      plot.background = element_rect(fill = "black"),
      legend.position = c("bottom")
  
   )

HK_map

可视化结果如下:

ggtext 实现文本同行不同颜色设置

对一行文本不同颜色、粗细等文本属性的设置,ggtext包 可以轻松实现(这个在Python中目前还无法高效实现),这里我们只放出相应的代码,如下:

代码语言:javascript
复制
#导入ggtext包
library(ggtext)

#需要定制文本的地方
labs( 
        title = "香港在售二手房分布图",
        subtitle="数据来源: <span style='color:#008354'>菜J学Python</span>",
        caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>")+

#对绘图主题进行设置:需使用 element_markdown() 对其进行设置,和element_text()语法几乎一样
  theme(
      plot.title = element_text(hjust = 0.5,vjust = .5, color = "white", 
                             size = 20, margin = margin(t = 4, b = 2)),
      text = element_text(family = 'kaiti',color = "white"),
      plot.subtitle = element_markdown(hjust = 0.5,vjust = .5,size=12,color = "white"),
      plot.caption = element_markdown(color = "white",face = 'bold',size = 10),
      legend.title = element_text(size = 10),
      plot.background = element_rect(fill = "black"),
      legend.position = c("bottom")
  
   )

总结

本期推文介绍了使用ggplot2、geojsonio、ggrepel和ggtext 等包进行空间图表绘制,完整代码不是很多,但涉及的知识点较多,希望大家可以掌握。另外,ggplot2绘制定制化的图表真的很方便,大家可以结合自己喜好学习适合自己的工具。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • geojsonio包对geojson数据格式读取
  • ggplot2 可视化绘制
    • 简单绘制
      • 添加读取文本标签
        • 散点图层添加
          • 定制化设置
            • ggtext 实现文本同行不同颜色设置
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档