数据科学不仅仅是关于模型的复杂性和精密性,更重要的是利用数据洞察来解决问题。为了实施这些解决方案,相关利益方需要理解提出的建议。在创建有效的可视化时,一个挑战是制作能够自解释的图像。本文将介绍如何使用动画GIF图像(Graphics Interchangeable format)来实现这一点,这在想要展示基于时间/流程的故事时特别有用。通过在图像中使用动画,可以为特定参数随时间绘制可比较的数据。换句话说,这很容易理解和看到某些参数随时间的增长。
假设想要展示不同大陆/国家的GDP和预期寿命随时间的变化。认为最好的表示方式是什么?可能会想到多种选项,比如创建一个3D图表,将GDP、预期寿命和时间放在三个图表上,并为每个大陆/国家绘制线条。但问题是人眼在解释2D中的3D可视化方面非常糟糕,尤其是当数据太多时。因此,这个选项行不通。或者创建两个并排的图表——一个显示随时间变化的GDP,另一个显示预期寿命随时间变化。虽然这是一个二维图表,但留给用户很多解释的空间。用户需要选择一个国家,查看其在每个图表上的运动,然后进行相关性分析。
gganimate包的最新发展使得这成为可能并变得更容易。到本文结束时,将能够制作自己的.gif文件,并创建自己的自定义框架,以在全球或本地范围内比较不同的参数。
请安装以下包:
ggmap
gganimate
dplyr
animation
除了上述R语言库外,还需要在系统中安装Image Magick软件。可以从以下链接下载并安装:
本文试图制作1965-2016年地震数据的.gif文件。与其静态查看地图上的所有值,不如绘制逐年的全球地震活动。地震数据集可在以下链接找到:
数据集包含了1965年至2016年的全球地震活动数据。请访问上述链接并向下滚动以获取.csv文件。
从.csv文件中,仅选择了一些参数以简化问题。
Date
Time
Latitude
Longitude
Type
Depth
Magnitude
ID
## 读取数据集并加载必要的包
library(plyr)
library(dplyr)
library(ggmap)
library(ggplot2)
library(gganimate)
EQ=read.csv("eq.csv",stringsAsFactors = FALSE)
names(EQ)
## 仅选择震级大于或等于7的数据。
EQ<-EQ%>%filter(Magnitude>=7)
## 将日期拆分为年、月和日
## 这是为了得到动画中重要的帧。换句话说,方法的核心是将
## frame(如动画中的时间点)视为另一个维度,就像x、y、大小、颜色等。
## 因此,数据中的变量可以像其他变量一样映射到frame。
## 将日期转换为字符以拆分列
EQ$Date<-as.character(EQ$Date)
## 拆分日期并创建列表
list<-strsplit(EQ$Date,"-")
## 将列表转换为数据框
library(plyr)
EQ_Date1<-ldply(list)
colnames(EQ_Date1)<-c("Day","Month","Year")
## 与主数据框列绑定
EQ<-cbind(EQ,EQ_Date1)
names(EQ)
## 将日期转换为数字
EQ$Year=as.numeric(EQ$Year)
## 获取世界地图以绘制
library(ggmap)
world<-map_data("world")
## 从世界地图中移除南极洲区域
world <- world[world$region != "Antarctica",]
map<-ggplot()+geom_map(data=world,map=world,aes(x=long,y=lat,map_id=region),color='#333300',fill='#663300')
#Plot points on world Map
p <- map + geom_point(data = EQ, aes(x = Longitude, y = Latitude, frame = Year, cumulative = TRUE,size=EQ$Magnitude), alpha = 0.3, size = 2.5,color="#336600")+ geom_jitter(width = 0.1) +labs(title = "Earthquake above 7 point on richter scale")+theme_void()
# Plot .gif file using gganimate function
gganimate(p)
library(animation)
ani.options(interval=0.15)
gganimate(p)
Earthquake – 1.5x speed