The code supplied is not proper for several reasons including not being on 
multiple lines properly and use of variables not defined.

"percentage" is a field in data.frame "email" not in "graph_text" and of course 
you need to load libraries properly to use the functions.

I rewrote and fixed a few errors to look like this:

library(tidyverse)

graph_text <- structure(list(percentage = c(57.14, 29.76, 69.32, 28.41, 57.89, 
34.21, 58.59, 33.33, 48.42, 42.11, 59.77, 29.89, 72.13, 18.03, 53.33, 33.33, 
55.1, 40.82, 46.55, 37.93),
                             year = c(2020L, 2020L, 2019L, 2019L, 2018L, 2018L, 
2017L, 2017L, 2016L, 2016L, 2015L, 2015L, 2014L, 2014L, 2013L, 2013L, 2012L, 
2012L, 2011L, 2011L), 
                             gender = c("male", "female", "male", "female", 
"male", "female", "male", "female", "male", "female", "male", "female", "male", 
"female", "male", "female", "male", "female", "male", "female")), 
                        class = "data.frame", 
                        row.names = c(NA, -20L))

ymax <- max(graph_text$percentage)

ggplot(data = graph_text, 
       aes(x=year, 
           y=percentage, 
           color = gender, 
           fill=gender)) +  
  geom_bar(position = 'dodge', 
           stat='identity') +  
  theme_classic() +  
  geom_text(aes(label = percentage), 
            size = 4, 
            position = position_dodge(width = 1.1), 
            vjust=-0.2) +   
  scale_y_continuous(limits=c(0, 1.4*ymax))


And interestingly, it showed the years as 2010.0, 2012.5 and every 2.5 years 
thereafter, like the first version you showed. 

What you are asking for is straightforward enough if you do some simple queries 
on how to set the x axis up. You want integers shown as it they were years that 
presumably start with some year near the minimum and continue toward the 
maximum.  Do you want every year or just every N years?

One low-tech solution is to change year from an integer to a factor of integers 
or characters like this:

graph_text$year <- as.factor(graph_text$year)

The labels now look reasonable.

I won't solve your other issues but there are documented ways. Bold text is an 
example that can be changed in many places. In this case, note the addition to 
the following part from above:

fontface="bold

as in:

  geom_text(aes(label = percentage), 
            size = 4, 
            position = position_dodge(width = 1.1), 
            vjust=-0.2,
            fontface="bold") +








-----Original Message-----
From: R-help <[email protected]> On Behalf Of bharat rawlley via 
R-help
Sent: Saturday, August 21, 2021 6:24 PM
To: Bert Gunter <[email protected]>
Cc: R-help Mailing List <[email protected]>
Subject: Re: [R] Help needed with ggplot2

 Thank you, I have tried to do a better job here - 



Data - 
email <- structure(list(percentage = c(57.14, 29.76, 69.32, 28.41, 57.89,       
                                 34.21, 58.59, 33.33, 48.42, 42.11, 59.77, 
29.89, 72.13, 18.03,                                        53.33, 33.33, 55.1, 
40.82, 46.55, 37.93), year = c(2020L, 2020L,                                    
                                                       2019L, 2019L, 2018L, 
2018L, 2017L, 2017L, 2016L, 2016L, 2015L,                                       
                                                    2015L, 2014L, 2014L, 2013L, 
2013L, 2012L, 2012L, 2011L, 2011L                                       ), 
gender = c("male", "female", "male", "female", "male", "female",                
                                      "male", "female", "male", "female", 
"male", "female", "male",                                                      
"female", "male", "female", "male", "female", "male", "female"                  
                     )), class = "data.frame", row.names = 
 c(NA, -20L))



Code - 
ymax <- max(graph_text$percentage)ggplot(aes(x=year, y=percentage, color = 
gender, fill=gender, data = graph_text)+  geom_bar(position = 'dodge', 
stat='identity')+  theme_classic()+  geom_text(aes(label = percentage), size = 
4, position = position_dodge(width = 1.1), vjust=-0.2) +   
scale_y_continuous(limits=c(0, 1.4*ymax))



Session info - 
R version 4.1.0 (2021-05-18)Platform: x86_64-w64-mingw32/x64 (64-bit)Running 
under: Windows 10 x64 (build 19042)
Matrix products: default
locale:[1] LC_COLLATE=English_India.1252  LC_CTYPE=English_India.1252    
LC_MONETARY=English_India.1252[4] LC_NUMERIC=C                   
LC_TIME=English_India.1252    
attached base packages:[1] stats     graphics  grDevices utils     datasets  
methods   base     
loaded via a namespace (and not attached): [1] fansi_0.5.0      
assertthat_0.2.1 dplyr_1.0.6      crayon_1.4.1     utf8_1.2.1       [6] 
grid_4.1.0       R6_2.5.0         DBI_1.1.1        lifecycle_1.0.0  
gtable_0.3.0    [11] magrittr_2.0.1   scales_1.1.1     ggplot2_3.3.3    
pillar_1.6.1     rlang_0.4.11    [16] generics_0.1.0   vctrs_0.3.8      
ellipsis_0.3.2   tools_4.1.0      glue_1.4.2      [21] purrr_0.3.4      
munsell_0.5.0    compiler_4.1.0   pkgconfig_2.0.3  colorspace_2.0-1[26] 
tidyselect_1.1.1 tibble_3.1.2    


I have the following questions - 
Q1 How can I make the years appear on x axis as 2011, 2012, 2013, 2014 and so 
on (earlier they were showing up as 2012.5 etc. which has disappeared now for 
reason I do not know)
Q2 Is there any way to create a small gap between the red and blue bars for 
aesthetic purposes
Q3 Is there anyway to make the text on top of the bars bolder or thicker? 
Thank you




    On Saturday, 21 August, 2021, 05:57:09 pm GMT-4, Bert Gunter 
<[email protected]> wrote:  
 
 See ?dput for how to provide a reproducible example (a reprex). Or see here:
https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example

It will improve your chance of getting a helpful and quick response.

Cheers,
Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )

On Sat, Aug 21, 2021 at 2:47 PM bharat rawlley via R-help
<[email protected]> wrote:
>
>
> Hello, on using the following code for the following data, the graph I get 
> has an x axis where years are mentioned as 2012.5, 2017.5 etc.
>
> I have the following questions -
> Q1 How can I make the years on x axis as 2011, 2012, 2013, 2014 and so on..
> Q2 Is there any way to create a small gap between the red and blue bars for 
> aesthetic purposes
> Q3 Is there anyway to make the text on top of the bars bolder or thicker?
> Thank you
>
> code -
> ymax <- max(graph_text$percentage)ggplot(aes(x=year, y=percentage, color = 
> gender, fill=gender), data = graph_text)+  geom_bar(position = 'dodge', 
> stat='identity')+  theme_classic()+  geom_text(aes(label = percentage), size 
> = 4, position = position_dodge(width = 1.1), vjust=-0.2) +  
> scale_y_continuous(limits=c(0, 1.4*ymax))
>
>
> | 57.14 | 2020 |  male |
> | 29.76 | 2020  | female |
> | 69.32 | 2019  | male |
> | 28.41 | 2019 |  female |
> | 57.89 | 2018 |  male |
> | 34.21 | 2018  | female |
> | 58.59 | 2017 |  male |
> | 33.33 | 2017  | female |
> | 48.42 | 2016  | male |
> | 42.11 | 2016 |  female |
> | 59.77 | 2015 |  male |
> | 29.89 | 2015 |  female |
> | 72.13 | 2014 |  male |
> | 18.03 | 2014 |  female |
> | 53.33 | 2013 |  male |
> | 33.33 | 2013 |  female |
> | 55.1 | 2012 |  male |
> | 40.82 | 2012  | female |
> | 46.55 | 2011  | male |
> | 37.93 | 2011  | female |
>
>
>
>
>
> ______________________________________________
> [email protected] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
  

______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to