I need a bar chart that shows different segments of a dataframe, including years,
revenue sources, and revenue figures for a company. I can generate the chart,
but there are issues with the labels. They are disorganized, not properly
aligned with their respective segments, and don't have the same color as the corresponding
segment.
I have tried using base R, but most of all , I have used ggrepel and the geom_text_repel
function. The Function seems to work but renders the wrong result.
type_vec <- c(rep("ecommerce",4),rep("third_party",4),rep("retail",4),rep("services",4),
rep("marketplace",4))
year_vec <- rep(c("2010","2011","2013","2014"),5)
revenue_vec <- c(8709, 8773, 8974, 9876, 1772, 1891, 1915, 2872, 5727, 5820, 5904, 6500,
1, 2, 3, 6, 4370, 4463, 4479, 4817)
data_raw <- tibble(year=year_vec,type=type_vec,revenue=revenue_vec)
data_df <- data_raw %>%
mutate(group = as.factor(if_else(revenue < 11, "other", type ))) %>%
mutate(group = fct_relevel(group, "other", after=Inf),
label_type = if_else(year == 2014,type, NA_character_))
theme_stacked_bar <- function( ) {
theme(
legend.position = "none",
plot.margin = unit(c(2,7,2,2),"cm"),
axis.text = element_text(size=3)
)
}
data_plot <- ggplot(
data_df %>% filter(group != "other"),
aes(year, revenue, group = type)
) +
geom_bar(
stat = "identity",
data = data_df %>% filter(group == "other"),
fill = "grey85",
alpha = .5) +
geom_bar(
stat = "identity",
aes(fill = group)) +
scale_fill_brewer() +
theme_stacked_bar()
data_plot
data_plot <- data_plot +
geom_text_repel(
aes(color = group, label = label_type ),
# family = "Lato",
# fontface = "bold",
size = 8,
direction = "y",
xlim = c(2014.8, NA),
hjust = 0,
segment.size = .7,
segment.alpha = .5,
segment.linetype = "dotted",
box.padding = .4,
segment.curvature = -0.1,
segment.ncp = 3,
segment.angle = 20
) +
coord_cartesian(
clip = "off",
ylim = c(0,25000)
)
data_plot
Expected
I want the labels aligned with the right segments , also i want the words to match the color palette used
Result
I got the stacked bar chart with the labels messy and wrong colors. I am unable to organize the labels and also I am unable to add the color of the color palette used in the bars.