本文概述
- 介绍
- 简单的分面用法
- 自定义布局和重新排序
- 贴标签面
- 玩天秤和空间
- 使用构面创建细分
内容
1)简单的分面用法
2)自定义布局并重新排序
3)刻面
4)玩天秤和空间
5)使用构面创建细分
简单的分面用法 如果你完全熟悉ggplot, 则将了解ggplot()函数的调用的基本结构。有关ggplot的介绍, 你可以在此处查看srcmini ggplot课程。调用ggplot时, 你需要提供一个数据源(通常是一个数据框), 然后要求ggplot将我们数据源中的不同变量映射到不同的外观, 例如x轴或y轴的位置或我们的点或条的颜色。使用构面, 你可以获得映射变量的其他方法。为了说明这一点, 你将使用以下数据集, 其中包括一些国家/地区的经济指标。其中大多数是GDP(每个国家的国内生产总值)的变体。
print(econdata)
##CountryGDP_nomGDP_PPP GDP_nom_per_capita GDP_PPP_per_capita
## 1USA 19390600 193906005950159495
## 2Canada165241217692704507748141
## 3China 12014610 23159107864316807
## 4Japan487213554288133844042659
## 5France258356028357463986943550
## 6 Germany368481641707904455050206
## 7Sweden36848165209375321851264
## 8 Ireland3339943436827063872632
##GNI_per_capitaRegion
## 158270 North America
## 242870 North America
## 38690Asia
## 438550Asia
## 537970Europe
## 643490Europe
## 752590Europe
## 855290Europe
存在以下变量:
国家:不言自明!
GDP_nom:国内生产总值(美元)名义价值
GDP_PPP:受不同购买力控制的国内生产总值
GDP_nom_per_capita:人均国内生产总值名义价值(美元)
GDP_PPP_per_capita:受人均购买力控制的国内生产总值
GNI_per_capita:每个国家的人均国民总收入。
地区:国家/地区所在的世界地区。
首先, 让我们对每个国家的名义GDP进行简单绘制。
ggplot(econdata, aes(x=Country, y=GDP_nom))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (nominal)")
文章图片
你还可以绘制另一个变量, 即购买力平价调整后的GDP。
ggplot(econdata, aes(x=Country, y=GDP_PPP))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (PPP)")
文章图片
这为你提供了第二张单独的图, 类似于上一张, 但是使用了一个不同的变量。假设你要同时绘制GDP(名义)和GDP(PPP)。你将使用构面来执行此操作。首先, 你需要重新格式化数据, 将数据从” 宽” 格式(每个变量在其自己的列中)更改为” 长” 格式, 在此你将一列用于度量, 另一列用于关键变量, 从而告诉我们我们在每一行中使用的度量。
econdatalong <
- gather(econdata, key="measure", http://www.srcmini.com/http://www.srcmini.com/http://www.srcmini.com/value="value", c("GDP_nom", "GDP_PPP"))
一旦获得了这种格式的数据, 就可以使用我们的键变量来进行刻面绘制。让我们构建一个简单的图, 同时显示名义GDP(来自我们的第一个图)和GDP(PPP)(来自我们的第二个图)。为此, 你只需修改代码以添加+ facet_wrap()并指定?measure(我们的关键变量)应用于构面。
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure)
文章图片
这可行, 但是你会注意到国家名称的压缩程度。让我们重新排列面板。
自定义布局和重新排序 facet_wrap()命令将自动选择要使用的列数。你可以直接使用ncol =进行指定, 如下所示:
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)
文章图片
你可能会注意到, 以上x轴上的国家/地区按字母顺序排列。如果要更改此设置, 最简单的方法是设置” 国家/地区” 因子的级别。让我们执行此重新排序, 以总名义GDP的顺序排列国家/地区。
econdata$Country <
- factor(econdata$Country, levels= econdata$Country[order(econdata$GDP_nom)])econdatalong <
- gather(econdata, key="measure", http://www.srcmini.com/http://www.srcmini.com/http://www.srcmini.com/value="value", c("GDP_nom", "GDP_PPP"))ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)
文章图片
你还可以进行一些额外的自定义, 例如, 使用strip.position参数将构面标签移到左侧。
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, strip.position = "left")
文章图片
贴标签面 你可能已经注意到, 从要素测度的角度来看, 这些分面具有简单的短标题。让我们整理一下, 给我们的分面打上更好的标签。为此, 你将创建一个简单的标签程序功能, variable_labeller, 当要求输入variable_names的值之一时, 该函数将返回适当的名称。然后, 将此函数传递给facet_wrap的labeller参数。
variable_names <
- list(
"GDP_nom" = "GDP (nominal)" , "GDP_PPP" = "GDP (purchasing power parity)"
)variable_labeller <
- function(variable, value){
return(variable_names[value])
}ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, labeller=variable_labeller)
文章图片
玩天秤和空间 让我们使用每种经济措施来构建一个更大的多面图。
econdatalong <
- gather(econdata, key="measure", http://www.srcmini.com/http://www.srcmini.com/http://www.srcmini.com/value="value", c( "GDP_nom" , "GDP_PPP" , "GDP_nom_per_capita", "GDP_PPP_per_capita" , "GNI_per_capita"))variable_names <
- list(
"GDP_nom" = "GDP (nominal)" , "GDP_PPP" = "GDP (purchasing power parity)", "GDP_nom_per_capita" = "GDP (nominal) per capita", "GDP_PPP_per_capita" = "GDP (purchasing power parity) per capita", "GNI_per_capita"= "GNI per capita"
)variable_labeller <
- function(variable, value){
return(variable_names[value])
}ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, labeller= variable_labeller)+
scale_y_continuous(breaks = pretty(econdatalong$value, n = 10))
文章图片
那根本不好!你看不到三个面板的值。这是为什么?让我们看一下主要数据以了解原因。
summary(econdata)
##CountryGDP_nomGDP_PPPGDP_nom_per_capita
##Ireland:1Min.:333994Min.:343682Min.: 8643
##Canada :11st Qu.: 23507731st Qu.: 14571871st Qu.:39512
##France :1Median : 3684816Median : 3503268Median :44814
##Germany:1Mean: 6027118Mean: 7202368Mean:44992
##Sweden :13rd Qu.: 66577543rd Qu.: 89192603rd Qu.:54789
##Japan:1Max.:19390600Max.:23159107Max.:70638
##(Other):2
##GDP_PPP_per_capita GNI_per_capitaRegion
##Min.:16807Min.: 8690Asia:2
##1st Qu.:433271st Qu.:38405Europe:4
##Median :49174Median :43180North America:2
##Mean:48094Mean:42215
##3rd Qu.:533223rd Qu.:53265
##Max.:72632Max.:58270
##
如果查看每列, 你会发现每列中的值范围都在几个数量级上。默认情况下, 构面将对X轴和Y轴使用相同的限制和范围。要更改此设置, 可以将此代码段添加到构面代码中:scales =” free_y” , 以便每个构面将使用其自己的独立尺度。
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)
文章图片
这样好多了。现在, 每个构面都有自己的独立y轴。
使用构面创建细分 你可能已经注意到, 我们的数据集还包含变量Region, 这表示该国家/地区位于哪个区域。你可以使用此变量根据区域为条形着色, 如下所示:
ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
geom_bar(stat='identity')+
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)
文章图片
但是, 这有点混乱, 如果你可以将每个不同的区域放在各自的子面板中, 这不是很好吗?好吧, 有了分面, 你可以!在这里, 你将使用facet_grid而不是facet_wrap, 因为这样可以轻松地将我们的构面映射到两个变量Region和measure, 这两个变量都分布在绘图网格的行和列中。请注意, 你还设置了scales =” free” 和space =” free” , 以允许我们的不同面板占用不同的空间量。你还需要创建一个新的labeller函数, 该函数将为行和标签生成名称。
variable_names <
- list(
"GDP_nom" = "GDP \n(nominal)" , "GDP_PPP" = "GDP \n(PPP)", "GDP_nom_per_capita" = "GDP (nominal)\n per capita", "GDP_PPP_per_capita" = "GDP (PPP)\n per capita", "GNI_per_capita"= "GNI \nper capita"
)region_names <
- levels(econdata$Region)variable_labeller2 <
- function(variable, value){
if (variable=='measure') {
return(variable_names[value])
} else {
return(region_names)
}
}ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
geom_bar(stat='identity')+
facet_grid(measure~Region, scales="free", space="free_x", labeller= variable_labeller2)
文章图片
现在更加清晰了!每个区域都有自己的一列面板, 每个指标都有自己的横条。
关于此内容, 本教程将对其进行总结。我希望你喜欢学习分面。
如果你想了解有关分面的更多信息, 请参加srcmini的Trelliscope可视化大数据课程。
推荐阅读
- 机器学习黑色星期五数据集分析
- OVERLAPPED 结构
- Xamarin 绑定安卓第三方库恢复原始参数问题
- Android——ViewHolder的作用与用法
- 微信域名防屏蔽技术,APP推广微信域名怎么避免防红,如何防拦截()
- exception disappear when forgot to await an async method
- Android创建列表并为列表添加数据
- kibana设置mapping
- GT性能测试Android版使用说明