Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么堆叠条形图与表中的值不匹配?_R_Ggplot2_Bar Chart_Tidyverse_Stacked Chart - Fatal编程技术网

R 为什么堆叠条形图与表中的值不匹配?

R 为什么堆叠条形图与表中的值不匹配?,r,ggplot2,bar-chart,tidyverse,stacked-chart,R,Ggplot2,Bar Chart,Tidyverse,Stacked Chart,我有一个数据集,其中包含城市以及这些城市中用于外出的特定物品的价格(例如出租车、饮料、晚餐等)-数据集可在以下位置找到: 我计算了派对之夜和约会之夜的总费用: CostNightPrepared <- CostNight %>% group_by(City, Category) %>% mutate(TotalCost = sum(Cost, na.rm = TRUE))%>% arrange(desc(Category), TotalCost)

我有一个数据集,其中包含城市以及这些城市中用于外出的特定物品的价格(例如出租车、饮料、晚餐等)-数据集可在以下位置找到:

我计算了派对之夜和约会之夜的总费用:

    CostNightPrepared <- CostNight  %>%
  group_by(City, Category) %>%
  mutate(TotalCost = sum(Cost, na.rm = TRUE))%>%
  arrange(desc(Category), TotalCost)
costname%
组别(城市、类别)%>%
变异(总成本=总和(成本,na.rm=真))%>%
安排(描述(类别)、总成本)
要将其绘制出来:

Visual <- ggplot(CostNightPrepared, aes(TotalCost, fct_rev(fct_reorder(City, TotalCost)), fill=Category)) + 
geom_col(position = "stack") +
geom_text(aes(label = round(TotalCost, 1)), position = position_dodge(1))

Visual我想你想要的是
summary
而不是
mutate
。通过使用
mutate
,您可以获得每一行的城市/类别总数,然后将这些行中的每一行输入ggplot2。 您确实希望每个城市/类别组合有一行,这就是Summary生成的结果

可复制示例:

mtcars %>%
head() %>%
  group_by(carb, gear) %>%
  mutate(total_wt = sum(wt)) %>%
  ungroup() -> mtcars_summary
    
#mtcars_summary
## A tibble: 6 x 12
#    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb total_wt
#  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>    <dbl>
#1  21       6   160   110  3.9   2.62  16.5     0     1     4     4     5.50
#2  21       6   160   110  3.9   2.88  17.0     0     1     4     4     5.50
#3  22.8     4   108    93  3.85  2.32  18.6     1     1     4     1     2.32
#4  21.4     6   258   110  3.08  3.22  19.4     1     0     3     1     6.68
#5  18.7     8   360   175  3.15  3.44  17.0     0     0     3     2     3.44
#6  18.1     6   225   105  2.76  3.46  20.2     1     0     3     1     6.68

如果我们将
mutate
替换为
summary
,我们将得到更多您所期望的,即输入到条形图中的输入不会对原始数据中的每个元素重复:

#mtcars_summary
## A tibble: 4 x 3
#   carb  gear total_wt
#  <dbl> <dbl>    <dbl>
#1     1     3     6.68
#2     1     4     2.32
#3     2     3     3.44
#4     4     4     5.50
#mtcars#总结
##一个tibble:4x3
#carb齿轮总重量
#       
#1     1     3     6.68
#2     1     4     2.32
#3     2     3     3.44
#4     4     4     5.50

如果
geom\u col
具有位置堆栈,则必须具有
geom\u text
。立场必须一致。我认为我的问题可能听起来有误导性。问题不在于列末尾的黑色数字!(这样做只是为了显示列的精确值)。问题是列与X轴上的数字不匹配,但仍然不正确?在复制的示例中,您仍然有例如6.7作为值,但该列在X轴上通过了7.5标记。我使用了“summary()”函数而不是“mutate()”,它确实在X轴上给了我一个更接近的结果,但它仍然不正确-列的值与X轴的值不匹配6.7是3档部分的和,2.3是4档部分的和,6.7+2.3=9。在堆叠条形图中,总计将是组件的总和?您是否希望在文本中显示累计总和?您是否希望所有条形图都像减淡版一样从基线开始?为了澄清,您是希望修正文本,使其显示与累积x位置相关的累积总数,还是希望条形图不堆叠,以便每个条形图仅与其自身值一样长?(你已经完成了第二个版本的闪避——也许你想让条形图重叠?)也许你想这样:试试
ggplot(CostNightPrepared%>%arrange(Category),…
ggplot(CostNightPrepared%>%arrange(desc(Category)),…
ggplot(mtcars_summary, aes(total_wt, 
                           carb %>% as_factor %>% fct_reorder(total_wt), 
                           fill = as.character(gear))) +
  geom_col(position = "stack") +
  geom_text(aes(label = round(total_wt, 1)), position = position_dodge(1))
#mtcars_summary
## A tibble: 4 x 3
#   carb  gear total_wt
#  <dbl> <dbl>    <dbl>
#1     1     3     6.68
#2     1     4     2.32
#3     2     3     3.44
#4     4     4     5.50