R ggplot将截止线添加到叠加条形图中,条件:达到阈值
我想画一条垂直线,将占据最大市场份额的竞争对手与其他竞争对手分开,比如70%的市场份额。 下面是示例数据R ggplot将截止线添加到叠加条形图中,条件:达到阈值,r,ggplot2,dplyr,tidyverse,R,Ggplot2,Dplyr,Tidyverse,我想画一条垂直线,将占据最大市场份额的竞争对手与其他竞争对手分开,比如70%的市场份额。 下面是示例数据 # Example data data<- tibble::tribble( ~CUSTOMER, ~COMPETITOR, ~VALUE, "AAA", "XXX", 123400, "AAA", "YYY", 10000, "AAA", "ZZZ", 80000, "AAA", "YYY",
# Example data
data<- tibble::tribble(
~CUSTOMER, ~COMPETITOR, ~VALUE,
"AAA", "XXX", 123400,
"AAA", "YYY", 10000,
"AAA", "ZZZ", 80000,
"AAA", "YYY", 60000,
"BBB", "XXX", 110000,
"BBB", "YYY", 20000,
"BBB", "ZZZ", 10000,
"BBB", "YYY", 80000,
"CCC", "YYY", 30000,
"CCC", "ZZZ", 12000,
"DDD", "YYY", 7000,
"CCC", "VVV", 10000)
如何添加到这个堆叠的条形图中,这是一条将竞争对手划分为门槛的线,比如说70%基于COMP_PARETO列,该列包含累计销售额的%。如果x轴是数字的,但它们是分类的,这将很容易 @JackekKotowski,你的代码有问题。不能复制它。获取错误,
在mutate\u impl(.data,dots)中出错:求值错误:未找到对象“total\u VALUE”。
看起来像变量,total\u VALUE
在给定代码中未定义。@JacekKotowski,还有,col\u competitors
和unit\u mln()
;前者是您试图添加到绘图中的内容,而后者是某个函数-来自软件包或自定义?您是否尝试添加了geom_hline
,但由于某种原因,它不起作用?因为x是离散的不会有什么区别。@camille如果x轴是分类的,而不是数字的,我不知道如何添加hline。试着像x是数字一样添加hline。它应该以同样的方式工作,尝试也没有坏处
library (tidyverse)
df_COMP<- data %>% # totals and pareto for COMPETITOR
group_by(COMPETITOR) %>%
summarise(COMP_VALUE=sum(VALUE)) %>%
arrange(desc(COMP_VALUE)) %>%
mutate(COMP_PARETO=cumsum(COMP_VALUE)/total_VALUE) %>%
ungroup()
df_COMP %>%
ggplot(aes(x = fct_reorder(COMPETITOR, -COMP_VALUE),
y = COMP_VALUE)) +
geom_col(alpha=0.4, aes(fill=COMPETITOR), col = "darkgray", show.legend = F)+
ggtitle(" ")+
theme_bw(base_size = 11)+ col_competitors +
theme(axis.text.x = element_text(angle = 90, hjust=1, vjust=0.5, size=10),
axis.title=element_blank(),
axis.ticks=element_blank())+
scale_y_continuous(labels = function(n){unit_mln(n)},
sec.axis = sec_axis(~. / sum(df_COMP$COMP_VALUE), labels = scales::percent))+
scale_x_discrete()+
geom_text(aes(label = unit_mln(COMP_VALUE)), size = 3, position = position_stack(vjust = 0.5))