在这里,我使用数据制作了一个绘图,显示了以特定方式排序的每个“bins”中对应的“d”值。
如您所见,我已明确命令它们(在 ggplot 代码中)创建下图。
有没有一种优雅的方法可以通过引入顺序来做同样的事情,正如您可能看到的那样,我已经为此示例引入了列顺序。
如果可能,我正在尝试使用forecats 包中的 fct_reorder()重写代码,或者找到任何其他可能的优雅方法来实现相同的结果,主要是因为我想重用和概括其他数据集或自定义函数。
代码看起来有点像下面,为了简单起见,我创建了一个示例数据集。
set.seed(42)
order <- as.character(c(5,6,7,8,9,1,2,3,4))
seg <- as.character(c('a', 'b', 'c','a', 'b', 'c','a', 'b', 'c'))
bins <- as.character(c('-5% - 5%','5% - 10%','10% - 15%','15% - 20%', '>20%','<-20%','-20% - -15%','-15% - -10%','-10% - -5%'))
d <- as.numeric(sample(0:100, size = 9, replace = TRUE))
df <- as.data.frame(cbind(order, seg, bins, d))
ggplot(df, aes(fill = seg, y = d, x = bins)) +geom_col()+ scale_x_discrete(limits= c('<-20%','-20% - -15%','-15% - -10%','-10% - -5%','-5% - 5%','5% - 10%','10% - 15%','15% - 20%', '>20%'))
生成的图如下:
提前感谢您的建议。:)
代码变化:
根据进来的建议,我查看了代码并将其调整为不使用 cbind(),请在此处找到调整后的代码:
set.seed(42)
order <- as.character(c(5,6,7,8,9,1,2,3,4))
seg <- as.character(c('a', 'b', 'c','a', 'b', 'c','a', 'b', 'c'))
bins <- as.character(c('-5% - 5%','5% - 10%','10% - 15%','15% - 20%', '>20%','<-20%','-20% - -15%','-15% - -10%','-10% - -5%'))
d <- as.numeric(sample(0:100, size = 9, replace = TRUE))
df <- data.frame(order, seg, bins, d)
ggplot(df, aes(fill = seg, y = d, x = bins)) +geom_col()+ scale_x_discrete(limits= c('<-20%','-20% - -15%','-15% - -10%','-10% - -5%','-5% - 5%','5% - 10%','10% - 15%','15% - 20%', '>20%'))
谢谢