R:在 ggplot2 条形图中为每个方面绘制一组独特的因素
R: draw unique set of factors for each facet in ggplot2 barchart
假设我们有一组分布在不同大陆的商品(苹果、香蕉、土豆等)。我们通过 ggplot2
包中的分面条形图可视化它们在各大洲的分布,这些商品(在 "stuff" 字段后面称为)作为要在 x 轴上显示的因素。如数据所示,每个大陆都有自己的一套东西,尽管某些商品(香蕉)在两个或多个大陆上可能很常见。这是短格式的数据示例。字段 "medium" 和 "giant" 将市场进一步细分为中型和大型(以不同颜色绘制)。
data<-read.csv(text="continent,stuff,average,giant
North America,apples,20,30
North America,bananas,25,32
Europe,bananas,15,25
Europe,potatoes,10,20
Europe,mosquitoes,13,17
Asia,snakes,26,35
Asia,snails,7,15
Asia,pandas,10,20")
首先我们将数据缩减为长格式,然后通过 geom_col()
和分面技术绘制它:
library(dplyr)
library(tidyr)
library(ggplot2)
data.tidied<-data %>%
gather(key=size, value=val,-continent,-stuff)
ggplot(data.tidied,aes(x=stuff,y=val,fill=size))+
geom_col(position="dodge")+
facet_grid(~continent)+coord_flip()
这东西的所有因素在各大洲都是一致的,虽然大部分都不需要,所以有很多差距。但是我们在北美和欧洲不需要任何蜗牛,很自然地只有亚洲方面有这个字段等等。 (为了使事情更清楚,您可能会将 apples/bananas/potatoes 视为某些地理区域,对于一个大陆来说是独一无二的:我们在欧洲没有任何加利福尼亚州)。那么:如何使用 ggplot
的分面技术(或任何替代方法)来显示这种情况?即:如何为每个方面绘制一组独特的因素?
您可以使用 facet_wrap
代替 facet_grid
并指定 scales = "free_y"
(翻转轴时必须为 free_y
)。但在我看来,这让图表看起来有点奇怪。
data %>%
gather(size, val, -continent, -stuff) %>%
ggplot(aes(stuff, val)) +
geom_col(aes(fill = size), position = "dodge") +
facet_wrap(~continent, scales = "free_y") +
coord_flip()
假设我们有一组分布在不同大陆的商品(苹果、香蕉、土豆等)。我们通过 ggplot2
包中的分面条形图可视化它们在各大洲的分布,这些商品(在 "stuff" 字段后面称为)作为要在 x 轴上显示的因素。如数据所示,每个大陆都有自己的一套东西,尽管某些商品(香蕉)在两个或多个大陆上可能很常见。这是短格式的数据示例。字段 "medium" 和 "giant" 将市场进一步细分为中型和大型(以不同颜色绘制)。
data<-read.csv(text="continent,stuff,average,giant
North America,apples,20,30
North America,bananas,25,32
Europe,bananas,15,25
Europe,potatoes,10,20
Europe,mosquitoes,13,17
Asia,snakes,26,35
Asia,snails,7,15
Asia,pandas,10,20")
首先我们将数据缩减为长格式,然后通过 geom_col()
和分面技术绘制它:
library(dplyr)
library(tidyr)
library(ggplot2)
data.tidied<-data %>%
gather(key=size, value=val,-continent,-stuff)
ggplot(data.tidied,aes(x=stuff,y=val,fill=size))+
geom_col(position="dodge")+
facet_grid(~continent)+coord_flip()
这东西的所有因素在各大洲都是一致的,虽然大部分都不需要,所以有很多差距。但是我们在北美和欧洲不需要任何蜗牛,很自然地只有亚洲方面有这个字段等等。 (为了使事情更清楚,您可能会将 apples/bananas/potatoes 视为某些地理区域,对于一个大陆来说是独一无二的:我们在欧洲没有任何加利福尼亚州)。那么:如何使用 ggplot
的分面技术(或任何替代方法)来显示这种情况?即:如何为每个方面绘制一组独特的因素?
您可以使用 facet_wrap
代替 facet_grid
并指定 scales = "free_y"
(翻转轴时必须为 free_y
)。但在我看来,这让图表看起来有点奇怪。
data %>%
gather(size, val, -continent, -stuff) %>%
ggplot(aes(stuff, val)) +
geom_col(aes(fill = size), position = "dodge") +
facet_wrap(~continent, scales = "free_y") +
coord_flip()