繁体   English   中英

重新排列facet_grid并将其放入ggplot2的geom_bar中

[英]Reorder facet_grid and factor in ggplot2’s geom_bar

我在获取小图内因子的校正器顺序时遇到问题。

我有一个包含三个变量的数据集: RegionStore.TypeAvg.Value RegionStore.Type是因子类型, Avg.Value是数字。 我正在使用带有geom_bar()函数的条形图格式的R中的ggplot2绘图系统。

期望的结果:我希望Supercenter成为facet_grid()的第一类,其次是Market和Mart。 在每个构面内,我希望Region 1-7按Avg.Value降序排序。

可重现的示例:每个Region有3个Store.Type ,总共进行了21次Avg.Value观察。 我的原始数据集大于3k观察值。

#Create dataset
#avg value
Avg.Value <- as.vector(as.numeric(1:21))
#Regions
ab <- c("Region 1","Region 2","Region 3", "Region 4", "Region 5", "Region 6", "Region 7")
b <- 3 # Or some other number
ab <- sapply(ab, function (x) rep(x,b))
Region <- as.vector(ab)
#Chains
Store.Type <- c("Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market", 
                "Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market",
                "Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market",
                "Supercenter", "Mart", "Market")
#Combine dataset
avgRes <- data.frame(Avg.Value, Region, Store.Type)
#Graph
library(ggplot2)
ch <- ggplot(avgRes, aes(x = Region, y = Avg.Value))
cha <- ch + geom_bar(stat = "identity") 
chan <- cha + facet_grid(. ~ Store.Type) 
chang <- chan + theme(axis.text.x = element_text(angle = 90, hjust = 1))
chang + ggtitle("Chart")

条形图:

在此处输入图片说明

编辑:我也想要带有蓝色阴影的计数图例。

我要做的第一件事是翻转数据集中的第二个范围,否则区域将始终处于1到7的顺序,并且您无法确定它是否有效。

#Create dataset avg value 
Avg.Value <- as.vector(as.numeric(c(1:7,14:8,15:21)))
#Regions
ab <- c("Region 1","Region 2","Region 3", "Region 4", "Region 5", "Region 6", "Region 7")
b <- 3 # Or some other number
ab <- sapply(ab, function (x) rep(x,b))
Region <- as.vector(ab)
#Chains
Store.Type <- c("Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market", 
                "Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market",
                "Supercenter", "Mart", "Market", "Supercenter", "Mart", "Market",
                "Supercenter", "Mart", "Market")
#Combine dataset
avgRes <- data.frame(Avg.Value, Region, Store.Type)

然后,我们需要重新排序avgRes $ Store.Type的级别

avgRes$Store.Type <- factor(avgRes$Store.Type, levels = c("Supercenter", "Market", "Mart"))

下一个问题是ggplot无法为每个构面划分Region的顺序,因此我们将不得不添加一个唯一的order变量。 之后,我们可以使用该变量重新排序。 这是从这里的答案中得出的。

avgRes$ordvar <- paste(avgRes$Store.Type,avgRes$Region,sep="_")

#Graph
library(ggplot2)
ch <- ggplot(avgRes, aes(x = reorder(ordvar,Avg.Value), y = Avg.Value)) # reorder ordvar by value
cha <- ch + geom_bar(stat = "identity") 
chan <- cha + facet_grid(. ~ Store.Type, scale="free_x") #added "free_x", or you will have a lot of blank values in your plot
chang <- chan + theme(axis.text.x = element_text(angle = 90, hjust = 1))
chang + ggtitle("Chart")

在此处输入图片说明

请注意,标签现在为Store.Type_Region。 如果您不满意,可以在这里找到如何使用功能修复该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM