我打算以降序绘制数据框中的每个分类列,取决于变量中的级别频率。
我已经找到了如何绘制每一列并重新排序等级,但我无法弄清楚如何将它们组合在一起。你能给我一些建议吗?
每栏的情节代码:
MERGE FundRel FR
USING #FundTemp Tmp
ON (FR.DataSourceFundName = Tmp.DataSourceFundName AND FR.PortFolioID =
Tmp.PortFolioID AND FR.DataSourceID = Tmp.DataSourceID)
WHEN MATCHED THEN
UPDATE SET FR.DataSourceFundName = Tmp.NewDataSourceFundName
, FR.CodeRedFundName = Tmp.NewCodeRedFundName
, FR.AssetClassID = Tmp.AssetClassID
, FR.SubAssetClassID = Tmp.SubAssetClassID
, FR.StrategyID = Tmp.StrategyID
, FR.SubStrategyID = Tmp.SubStrategyID
WHEN NOT MATCHED BY TARGET THEN
INSERT ([PortfolioID]
,[DataSourceID]
,[PrimaryFundID]
,[DataSourceFundName]
,[FundNumber]
,[AssetClassID]
,[SubAssetClassID]
,[StrategyID]
,[SubStrategyID]
,[CodeRedFundName])
VALUES (Tmp.[PortfolioID]
,Tmp.[DataSourceID]
,Tmp.[PrimaryFundID]
,Tmp.[DataSourceFundName]
,Tmp.FundCode
,Tmp.[AssetClassID]
,Tmp.[SubAssetClassID]
,Tmp.[StrategyID]
,Tmp.[SubStrategyID]
,Tmp.[CodeRedFundName]);
重新排序一个变量级别的代码:
require(purrr)
library(tidyr)
library(ggplot2)
diamonds %>%
keep(is.factor) %>%
gather() %>%
ggplot(aes(value)) +
facet_wrap(~ key, scales = "free") +
geom_bar()
顺便说一下,如果您觉得编写这些代码有更好的方法,请告诉我。
感谢。
答案 0 :(得分:1)
您的方法存在的问题是数据框的长形式会引入许多因素,这些因素将被绘制为geom_bar()的0。
不是依赖facet_wrap和处理长数据形式,而是替代方案。
按尺寸功能重新排序:
reorder_size <- function(x) {
factor(x, levels = names(sort(table(x), decreasing=T)))
}
使用gridExtra::grid.arrange
函数提供类似的facet_wrap样式图:
library(gridExtra)
a <- ggplot(diamonds, aes(x=reorder_size(cut))) + geom_bar()
b <- ggplot(diamonds, aes(x=reorder_size(color))) + geom_bar()
c <- ggplot(diamonds, aes(x=reorder_size(clarity))) + geom_bar()
grid.arrange(a,b,c, nrow=1)
答案 1 :(得分:1)
备选方案1
无需使用gridExtra
模拟facet_wrap
,只需在reorder_size
内加入aes
功能:
reorder_size <- function(x) {
factor(x, levels = names(sort(table(x), decreasing = TRUE)))
}
diamonds %>%
keep(is.factor) %>%
gather() %>%
ggplot(aes(x = reorder_size(value))) +
facet_wrap(~ key, scales = "free") +
geom_bar()
备选方案2
使用dplyr
按键和值计算计数分组。然后我们按reorder
内的计数降序排列值aes
。
library(dplyr)
diamonds %>%
keep(is.factor) %>%
gather() %>%
group_by(key,value) %>%
summarise(n = n()) %>%
ggplot(aes(x = reorder(value, -n), y = n)) +
facet_wrap(~ key, scales = "free") +
geom_bar(stat='identity')