R - 组订单/ ggplot 闪避条形图问题
R - Issues with group order/ ggplot dodge barchart
我查看了其他问题,但没有找到这个确切的问题
company<-c("c1","c1","c2","c2","c2","c3","c3","c3","c4","c4", "c4")
subsegment<- c("Sub2","Sub3", "Sub1","Sub2", "Sub3", "Sub1","Sub2", "Sub3", "Sub1","Sub2", "Sub3")
values<-c(120,300,30,300,1800,10,96,277, 10, 400, 1100)
df<- data.frame(company,subsegment, values)
这是我的数据框代码,我尝试制作分组条形图:
plot.1<- ggplot(df, aes(fill=company, y=values, x=subsegment)) +
geom_bar(position="dodge", stat="identity", alpha=0.5)
我得到的图正是我想要的,每个公司的值按 SubSegment 分组...除了默认按字母顺序“Sub1”、“Sub2”、“Sub3”从左到右排序的子部分公司也一样...
我希望显示相同的图形,但首先显示“Sub3”,然后显示“Sub1”,最后显示“Sub2”
我还希望每个组(每个子段内)内的条形图按值从大到小排序,而不是仅按字母顺序排列。
附上我得到的图表图片:
希望问题足够清楚,我想得到相同的图表,但改变 x 轴上事物的顺序
要重新排序 subsegment
,请为其分配 factor
并在 levels
中指定订单。
要对闪避条形图中的条重新排序,请使用 reorder
以 values
的降序大小对闪避条进行排序。
library(tidyverse)
ggplot(df, aes(factor(subsegment, levels = c("Sub3", "Sub1", "Sub2")),
values,
fill = reorder(company, desc(values)))) +
geom_bar(position="dodge", stat="identity", alpha=0.5) +
labs(x = "subsegment", fill = "company")
我是通过操纵底层数据来做到的。我喜欢在 ggplot 调用之外进行我所有的因素处理;我认为这会让事情变得更干净。哦因素的乐趣:
df<- data.frame(company,subsegment, values) %>%
# subsegment order
mutate(reorder_subsegment = case_when(
subsegment == "Sub3" ~ 1,
subsegment == "Sub1" ~ 2,
subsegment == "Sub2" ~ 3
)) %>%
mutate(subsegment = reorder(subsegment, reorder_subsegment)) %>%
# company order
group_by(company) %>%
mutate(company_by_value = sum(values)) %>%
ungroup() %>%
mutate(company = reorder(company, -company_by_value))
ggplot(df, aes(fill=company, y=values, x=subsegment)) +
geom_col(position="dodge", alpha=0.5)
我查看了其他问题,但没有找到这个确切的问题
company<-c("c1","c1","c2","c2","c2","c3","c3","c3","c4","c4", "c4")
subsegment<- c("Sub2","Sub3", "Sub1","Sub2", "Sub3", "Sub1","Sub2", "Sub3", "Sub1","Sub2", "Sub3")
values<-c(120,300,30,300,1800,10,96,277, 10, 400, 1100)
df<- data.frame(company,subsegment, values)
这是我的数据框代码,我尝试制作分组条形图:
plot.1<- ggplot(df, aes(fill=company, y=values, x=subsegment)) +
geom_bar(position="dodge", stat="identity", alpha=0.5)
我得到的图正是我想要的,每个公司的值按 SubSegment 分组...除了默认按字母顺序“Sub1”、“Sub2”、“Sub3”从左到右排序的子部分公司也一样...
我希望显示相同的图形,但首先显示“Sub3”,然后显示“Sub1”,最后显示“Sub2” 我还希望每个组(每个子段内)内的条形图按值从大到小排序,而不是仅按字母顺序排列。
附上我得到的图表图片:
希望问题足够清楚,我想得到相同的图表,但改变 x 轴上事物的顺序
要重新排序 subsegment
,请为其分配 factor
并在 levels
中指定订单。
要对闪避条形图中的条重新排序,请使用 reorder
以 values
的降序大小对闪避条进行排序。
library(tidyverse)
ggplot(df, aes(factor(subsegment, levels = c("Sub3", "Sub1", "Sub2")),
values,
fill = reorder(company, desc(values)))) +
geom_bar(position="dodge", stat="identity", alpha=0.5) +
labs(x = "subsegment", fill = "company")
我是通过操纵底层数据来做到的。我喜欢在 ggplot 调用之外进行我所有的因素处理;我认为这会让事情变得更干净。哦因素的乐趣:
df<- data.frame(company,subsegment, values) %>%
# subsegment order
mutate(reorder_subsegment = case_when(
subsegment == "Sub3" ~ 1,
subsegment == "Sub1" ~ 2,
subsegment == "Sub2" ~ 3
)) %>%
mutate(subsegment = reorder(subsegment, reorder_subsegment)) %>%
# company order
group_by(company) %>%
mutate(company_by_value = sum(values)) %>%
ungroup() %>%
mutate(company = reorder(company, -company_by_value))
ggplot(df, aes(fill=company, y=values, x=subsegment)) +
geom_col(position="dodge", alpha=0.5)