微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何订购闪避条形图?

如何解决如何订购闪避条形图?

我在按降序排列躲避条形图时遇到问题。数据集包含城市和这些城市中特定物品的价格(例如出租车、饮料、晚餐等) - 数据集可在此处找到:https://data.world/makeovermonday/2018w48

正则表达式:

City <- c("Mexico City","Prague","Moscow","Mexico City","Moscow")
Category <- c("Date Night","Date Night","Party Night","Party Night")
TotalCost <- c(84.82,86.52,20.35,46.29,19,26.56)

CostNightPrepared <- data.frame(City,Category,TotalCost)

修改了数据集,只显示City Category(夜间外出类型)和TotalCost(每个城市每个类别的总价格):

CostNightPrepared <- CostNight  %>%
  group_by(City,Category) %>%
  summarize(TotalCost = sum(Cost,na.rm = TRUE))%>%
  arrange(Category,TotalCost)

要可视化数据集:

ggplot(CostNightPrepared,aes(TotalCost,fct_rev(fct_reorder(City,TotalCost)),fill=Category)) + 
  geom_bar(stat="identity",position = position_dodge(width = 0.5))

如您所见,我使用了 fct_revfct_reorder(),但输出仍然是这样的:

enter image description here

如何按降序排列“派对之夜”类别的闪避(重叠)条形图?

解决方法

首先过滤 'Party night' 的数据,汇总数据并按 Cost 的升序提取城市名称。

CostNightPrepared %>%
  filter(Category == 'Party night') %>%
  group_by(City) %>%
  summarise(aveg = mean(Cost)) %>%
  arrange(aveg) %>%
  pull(City) -> lvls

重新排列因子水平,汇总数据并绘制图表。

CostNightPrepared %>%
  mutate(City = factor(City,lvls)) %>%
  group_by(City,Category) %>%
  summarise(Cost = mean(Cost)) %>%
  ggplot(aes(Cost,City,fill=Category)) + 
  geom_bar(stat="identity",position = position_dodge(width = 0.5))

enter image description here

,
 CostNightPrepared %>%
    left_join(
      CostNightPrepared %>%
        filter(Category == "Party Night") %>%
        arrange(-TotalCost) %>%
        mutate(order = row_number()) %>%
        select(City,order)
    ) %>%
    
  ggplot(aes(TotalCost,forcats::fct_reorder(City,-order),position = position_dodge(width = 0.5))
,

有点麻烦,但解决此问题的一种方法是使用 fct_inorder。这按照 City 中的值首次出现在数据框中的顺序对它们进行排序。将此与 arrange 结合以设置您需要的顺序:

library(tidyverse)

CostNightPrepared %>% 
  ungroup() %>% 
  mutate(Category = fct_relevel(Category,"Party night")) %>% 
  arrange(Category,TotalCost) %>% 
  mutate(City = fct_inorder(City)) %>% 
  ggplot(aes(x = TotalCost,y = City,fill = Category)) +
  geom_bar(stat = "identity",position = "dodge")

'Party night' 类别已重新分级,以确保它在 arrange 步骤中排在最前面。如果需要,您可以将其重新调回。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。