Skip to content
Back to formatted view

Raw Message

Message-ID: <d3da5fd6-2b61-b5d1-9297-7282440f22d2@sapo.pt>
Date: 2021-08-19T20:47:36Z
From: Rui Barradas
Subject: Help needed in double bar plot made using ggplot2
In-Reply-To: <190940195.286206.1629405332904@mail.yahoo.com>

Hello,

Glad it helped.

As for making everything red, that only happens with the 2nd geom_text I 
posted. And this is because color = "red" is not in aes().

In the 1st geom_text, I have aes( etc , color = gender)
and this makes the color depend on gender.

To make the text and bars colors the same, put color = gender in the 
initial call to ggplot. Like this, all geom_ (layers) will inherit that 
aesthetic.

And you don't need group = gender, fill or color already group the data.


ggplot(aes(x=year, y=percentage, fill=gender, color=gender), data = 
graph_text)+
   rest_of_code


Hope this helps,

Rui Barradas

?s 21:35 de 19/08/21, bharat rawlley escreveu:
> Thank you very much for the elaborate response, Dr. Barradas! It was 
> extremely helpful!
> 
> This resolves all my queries except one; I am unable to assign aesthetic 
> colors in a way that the bar and text colors remain the same. I am not 
> sure how to exactly assign color outside of aes. I used the following 
> code which made everything red (and I want only text on top of the red 
> bars to be red, rest to be blue according to their bar colors)
> 
> ggplot(aes(x=year, y=percentage, group=gender, fill=gender), data = 
> graph_text)+
>  ? geom_bar(position = 'dodge', stat='identity')+
>  ? theme_classic()+
>  ? geom_text(aes(label = percentage), size = 5, position = 
> position_dodge(width = 0.9), vjust=0, color = "Red") +
>  ? scale_y_continuous(limits=c(0, 1.1*ymax))
> 
> Thank you very much for your time and help, Dr. Barradas!
> 
> 
> On Thursday, 19 August, 2021, 02:07:44 pm GMT-4, Rui Barradas 
> <ruipbarradas at sapo.pt> wrote:
> 
> 
> Hello,
> 
> First, sample data.
> 
> set.seed(2021)
> year <- rep(2016:2019, 2)
> percentage <- runif(length(year), 0.25, 0.70)
> gender <- rep(c("M", "F"), each = 4)
> graph_text <- data.frame(year, percentage, gender)
> 
> 
> 1) You have expand = c(0,0). Like this there is no space above the
> greatest bar. In order to make room, change to limits = c(0, ymax + 10
> percent).
> 
> 2) Make the width of the bars larger, position_dodge(width = 0.9)
> 
> 3) Assign a aesthetic color in geom_text, if you want the bars and text
> colors to be the same, assign a value outside aes() if you want only one
> color for the text. See at the end.
> 
> 4) Not asked but I use scales::percent to make the percentages
> automatic. Change back to your code if not needed.
> 
> 
> 
> ymax <- max(graph_text$percentage)
> 
> ggplot(aes(x=year, y=percentage, group=gender, fill=gender), data =
> graph_text)+
>  ? geom_bar(position = 'dodge', stat='identity')+
>  ? geom_text(
>  ? ? aes(label = scales::percent(percentage, accuracy = 0.1), color =
> gender),
>  ? ? position = position_dodge(width = 0.9),
>  ? ? size = 5,
>  ? ? vjust = 0
>  ? )+
>  ? scale_y_continuous(
>  ? ? limits = c(0, 1.1*ymax),
>  ? ? labels = scales::percent
>  ? )+
>  ? theme_classic()
> 
> 
> The following geom_text will change the text labels color to red.
> 
> 
>  ? geom_text(
>  ? ? aes(label = scales::percent(percentage, accuracy = 0.1)),
>  ? ? position = position_dodge(width = 0.9),
>  ? ? #
>  ? ? color = "red",
>  ? ? #
>  ? ? size = 5,
>  ? ? vjust = 0
>  ? )
> 
> 
> 
> Hope this helps,
> 
> Rui Barradas
> 
> ?s 17:52 de 19/08/21, bharat rawlley via R-help escreveu:
>  > Hello
>  > I have tried to create the following graph using ggplot2 using the 
> following code -
>  > ggplot(aes(x=year, y=percentage, group=gender, fill=gender), data = 
> graph_text)+? geom_bar(position = 'dodge', stat='identity')+  
> scale_y_continuous(expand = c(0,0))+? theme_classic()+  
> geom_text(aes(label = percentage), size = 5, position = 
> position_dodge(width = 0.5), vjust=0)
>  >
>  >
>  > I wanted to ask
>  > 1) In the last plot why is the label on top not showing up even when 
> I save the image as a pdf?
>  > 2) Is there anyway to make the labels appear in the middle of the 
> bar? It is aligned to the left right now
>  > 3) Is there any way to change the colour of the labels on the top of 
> the bars?
>  > Thank you!
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  >
>  > ______________________________________________
>  > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To 
> UNSUBSCRIBE and more, see
>  > https://stat.ethz.ch/mailman/listinfo/r-help 
> <https://stat.ethz.ch/mailman/listinfo/r-help>
>  > PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html 
> <http://www.R-project.org/posting-guide.html>
>  > and provide commented, minimal, self-contained, reproducible code.
>  >