Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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 如何在ggplot中的条形图上,在单个条形图内按值正确排列线段(即使在从因子更改时)_R_Ggplot2_Dplyr_Bar Chart - Fatal编程技术网

R 如何在ggplot中的条形图上,在单个条形图内按值正确排列线段(即使在从因子更改时)

R 如何在ggplot中的条形图上,在单个条形图内按值正确排列线段(即使在从因子更改时),r,ggplot2,dplyr,bar-chart,R,Ggplot2,Dplyr,Bar Chart,我试图根据值(底部条形图中的最大值,顶部条形图中的最小值)对条形图中每个条形图中的分段进行排序,但没有成功 我已经对此进行了研究,并认为这应该是可行的,但有些地方不对劲,我找不到问题所在。我尝试了这个解决方案,但没有成功 以下是一个可复制的示例: library(dplyr) my_repro <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,

我试图根据值(底部条形图中的最大值,顶部条形图中的最小值)对条形图中每个条形图中的分段进行排序,但没有成功

我已经对此进行了研究,并认为这应该是可行的,但有些地方不对劲,我找不到问题所在。我尝试了这个解决方案,但没有成功

以下是一个可复制的示例:

library(dplyr)

my_repro <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "2020-04-01", class = "factor"), 
               Grp = c("A", "A", "A", "B", "B", "B", "C", "C", "C", "D", 
                       "D", "D", "E", "E", "E"), Segment = structure(c(1L, 2L, 3L, 
                                                                       1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("Seg1", 
                                                                                                                                   "Seg2", "Seg3"), class = "factor", scores = structure(c(Seg1 = NA_real_, 
                                                                                                                                                                                           Seg2 = NA_real_, Seg3 = NA_real_), .Dim = 3L, .Dimnames = list(
                                                                                                                                                                                             c("Seg1", "Seg2", "Seg3")))), Value = c(220, 75, NA, 
                                                                                                                                                                                                                                     NA, 400, NA, 350, NA, NA, 170, NA, NA, 375, 100, 
                                                                                                                                                                                                                                     NA)), row.names = c(NA, -15L), class = c("tbl_df", "tbl", 
                                                                                                                                                                                                                                                                              "data.frame"))





   # Reorder the Group based on the Value 
   my_repro$Grp <- reorder(my_repro$Grp, -my_repro$Value)
   #my_repro$Grp <- as.character(my_repro$Grp)   # I later added this line too, no luck

   # Plot
   ggplot(my_repro, aes(x=Segment, y=Value, fill=Grp)) +
   geom_col()
库(dplyr)

my_repro从
forcats
软件包中尝试
fct_reorder
功能:

library(dplyr)
library(forcats)

my_repro <- my_repro %>% 
  group_by(Segment) %>% 
  mutate(Grp = fct_reorder(Grp, Value))

# Plot
ggplot(my_repro, aes(x=Segment, y=Value, fill=Grp)) +
  geom_col()
库(dplyr)
图书馆(供猫用)
我的报告%
分组单位(分部)%>%
变异(Grp=fct_重新排序(Grp,值))
#密谋
ggplot(我的复制,aes(x=段,y=值,填充=Grp))+
geom_col()

forcats
软件包中尝试
fct\u重新排序
功能:

library(dplyr)
library(forcats)

my_repro <- my_repro %>% 
  group_by(Segment) %>% 
  mutate(Grp = fct_reorder(Grp, Value))

# Plot
ggplot(my_repro, aes(x=Segment, y=Value, fill=Grp)) +
  geom_col()
库(dplyr)
图书馆(供猫用)
我的报告%
分组单位(分部)%>%
变异(Grp=fct_重新排序(Grp,值))
#密谋
ggplot(我的复制,aes(x=段,y=值,填充=Grp))+
geom_col()

事实证明,这也会起作用:
my_repo%groupby(Segment)%%>%mutate(Grp=reorder(Grp,Value))
不确定为什么原始方法不起作用,因为它在我前面提到的问题中起作用。关键似乎是首先使用
groupby
,这也会起作用:
my_repo%group_by(Segment)%%>%mutate(Grp=reorder(Grp,Value))
不知道为什么原始方法不起作用,因为它在我前面提到的问题中起作用。关键似乎是首先使用
group_by