R中的ggplot的分面

本文概述

  • 介绍
  • 简单的分面用法
  • 自定义布局和重新排序
  • 贴标签面
  • 玩天秤和空间
  • 使用构面创建细分
介绍 【R中的ggplot的分面】使用构面, 可以制作多面板图并控制一个面板的比例与另一个面板的比例。
内容
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)")

R中的ggplot的分面

文章图片
你还可以绘制另一个变量, 即购买力平价调整后的GDP。
ggplot(econdata, aes(x=Country, y=GDP_PPP))+ geom_bar(stat='identity', fill="forest green")+ ylab("GDP (PPP)")

R中的ggplot的分面

文章图片
这为你提供了第二张单独的图, 类似于上一张, 但是使用了一个不同的变量。假设你要同时绘制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)

R中的ggplot的分面

文章图片
这可行, 但是你会注意到国家名称的压缩程度。让我们重新排列面板。
自定义布局和重新排序 facet_wrap()命令将自动选择要使用的列数。你可以直接使用ncol =进行指定, 如下所示:
ggplot(econdatalong, aes(x=Country, y=value))+ geom_bar(stat='identity', fill="forest green")+ facet_wrap(~measure, ncol=1)

R中的ggplot的分面

文章图片
你可能会注意到, 以上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)

R中的ggplot的分面

文章图片
你还可以进行一些额外的自定义, 例如, 使用strip.position参数将构面标签移到左侧。
ggplot(econdatalong, aes(x=Country, y=value))+ geom_bar(stat='identity', fill="forest green")+ facet_wrap(~measure, ncol=1, strip.position = "left")

R中的ggplot的分面

文章图片
贴标签面 你可能已经注意到, 从要素测度的角度来看, 这些分面具有简单的短标题。让我们整理一下, 给我们的分面打上更好的标签。为此, 你将创建一个简单的标签程序功能, 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)

R中的ggplot的分面

文章图片
玩天秤和空间 让我们使用每种经济措施来构建一个更大的多面图。
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))

R中的ggplot的分面

文章图片
那根本不好!你看不到三个面板的值。这是为什么?让我们看一下主要数据以了解原因。
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)

R中的ggplot的分面

文章图片
这样好多了。现在, 每个构面都有自己的独立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)

R中的ggplot的分面

文章图片
但是, 这有点混乱, 如果你可以将每个不同的区域放在各自的子面板中, 这不是很好吗?好吧, 有了分面, 你可以!在这里, 你将使用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)

R中的ggplot的分面

文章图片
现在更加清晰了!每个区域都有自己的一列面板, 每个指标都有自己的横条。
关于此内容, 本教程将对其进行总结。我希望你喜欢学习分面。
如果你想了解有关分面的更多信息, 请参加srcmini的Trelliscope可视化大数据课程。

    推荐阅读