Hi All, I would like to do the following pie chart using ggplot from an official data source ( http://www.deutscheweine.de/fileadmin/user_upload/Website/Service/Downloads/Statistik_2016-2017-neu.pdf , Tab 8, Page 14):
-- cut -- cat("# weinimport_piechart.R\n") # -- Input -------------------------------------------- d_wine_import_DE <- structure(list(Land = structure(1:24, .Label = c("Italien", "Frankreich", "Spanien", "USA", "Südafrika", "Chile", "Österreich", "Australien", "Portugal", "Griechenland", "Argentinien", "Neuseeland", "Ungarn", "Mazedonien", "Schweiz", "Dänemark", "Moldawien", "Türkei", "Belgien/Luxemburg", "Rumänien", "Ukraine", "Kroatien", "Israel", "Georgien"), class = "factor"), Menge_hl_2015 = c(5481000, 2248000, 3824000, 493000, 845000, 539000, 308000, 446000, 153000, 99000, 64000, 43000, 123000, 186000, 5000, 9000, 28000, 7000, 10000, 15000, 4000, 4000, 2000, 2000)), .Names = c("Land", "Menge_hl_2015"), class = "data.frame", row.names = c(NA, -24L)) names(d_wine_import_DE) # -- Data --------------------------------------------- d_result <- data.frame( country = d_wine_import_DE$Land, abs = d_wine_import_DE$Menge_hl_2015) %>% mutate(rel = round(abs / sum(abs) * 100, 1)) %>% dplyr::arrange(desc(abs)) %>% dplyr::mutate(rel_labs = paste(rel, "%")) %>% # rev() does not work dplyr::mutate(breaks = cumsum(abs) - (abs / 2)) # rev() does not work # -- Plot --------------------------------------------- d_result %>% ggplot() + geom_bar( aes(x = "", y = abs, fill = country), stat = "identity") + # %SOURCE% # coord_polar(): Wickham: ggplot2, Springer, 2nd Ed., p. 166 coord_polar(theta = "y", start = 0) + guides( fill = guide_legend( title = "Länder", reverse = FALSE) ) + scale_y_continuous( breaks = d_result$breaks, # simply "breaks" does not work labels = d_result$rel_labs, # simply "breaks" does not work trans = "reverse" ) + # %SOURCE% # Kassambra: Guide to Create Beautiful Graphics # in R, sthda.com, 2nd Ed., 2013, p. 136ff theme_minimal() + theme( panel.border = element_blank(), panel.grid = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank() # axis.text.x = element_text(size = 15) ) + labs( title = paste0("Weinimport nach Deutschland 2015")) -- cut -- I can not figure out how to align the labels (values in %) with the reverse printed countries. Also the breaks and labels do need the dataset name although I thought "breaks" and "rel_labs" is sufficient due to the piping operator. Can you help me by telling how to 1. get the order of the labels right 2. Why I need to reference "breaks" and "labels" completely? Kind regards Georg ______________________________________________ R-help@r-project.org 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.