Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I plot only one text in a jitter plot?

Tags:

r

ggplot2

I want to plot only once the text of the mean for the specific cluster.

So I have followed plot: enter image description here

but what I want is this:

enter image description here

code for reproduction:

price_l <- rep(c('€€-€€€', '€€-€€€', '€€€€', '€€-€€€', '€€-€€€', 
             '€€-€€€', '€€€€', '€€-€€€', '€€€€', '€€-€€€', 
             '€€-€€€', '€€-€€€', '€€-€€€', '€€-€€€', 
             '€€-€€€', '€€-€€€', '€€-€€€', '€€-€€€', '€€€€','€', '€', 
             '€', '€','€€€€', '€'),100)

avg_r <- rep(c(4.5, 3.5, 4.0, 4.0, 4.0, 3.5, 4.5, 4.0, 3.0, 4.0, 
           3.0, 5.0, 4.5, 4.0, 3.0,
           3.5, 4.5, 3.5, 3.5, 4.0, 3.0, 4.0, 4.0, 2.5, 4.5),100)


sub.df <- data.frame(price_l, avg_r)


sub.df %>%    
  group_by(price_l) %>%
  mutate(mean = mean(avg_r)) %>%
  ungroup() %>%
  ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T) +
  geom_jitter(aes(colour = price_l)) +
  geom_text(aes(label = sprintf("%.2f",mean)))
like image 288
JAdel Avatar asked May 08 '26 06:05

JAdel


2 Answers

You can set the y value manually inside the geom_text

sub.df %>%    
  group_by(price_l) %>%
  mutate(mean = mean(avg_r)) %>%
  ungroup() %>%
  ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T) +
  geom_jitter(aes(colour = price_l)) +
  geom_text(aes(y = 3.5, label = sprintf("%.2f",mean)),
            check_overlap = TRUE, size = 6, fontface = 2)

enter image description here

Or, as r2evans suggests:

sub.df %>%    
  group_by(price_l) %>%
  mutate(mean = mean(avg_r)) %>%
  ungroup() %>%
  ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T) +
  geom_jitter(aes(colour = price_l)) +
  geom_text(aes(y = mean, label = sprintf("%.2f",mean)),
            check_overlap = TRUE, size = 6, fontface = 2)

enter image description here

like image 179
Allan Cameron Avatar answered May 09 '26 19:05

Allan Cameron


We could use stat_summary(aes(label = ..y..), geom = "text", fun = mean, color="black", size = 6, fontface = 2)

sub.df %>%    
  group_by(price_l) %>%
  mutate(mean = mean(avg_r)) %>%
  ungroup() %>%
  ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T) +
  geom_jitter(aes(colour = price_l)) +
  stat_summary(aes(label = ..y..), geom = "text", fun = mean, color="black", size = 6, fontface = 2)
  

enter image description here

like image 22
TarJae Avatar answered May 09 '26 18:05

TarJae



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!