This is a reproduction of the (simple) bar plot of chapter 6.1.1 in Datendesign mit R with ggplot2. To download the data you can use the following lines: dir.create(&quot;data&quot;) writeLines(&quot;*&quot;, &quot;data/.gitignore&quot;) download.file(&quot;http://www.datendesign-r.de/alle_daten.zip&quot;, &quot;data/alle_daten.zip&quot;) unzip(&quot;data/alle_daten.zip&quot;, exdir = &quot;data&quot;) And to download the original script and the base R version of this plot: download.file(&quot;http://www.datendesign-r.de/beispielcode.zip&quot;, &quot;data/beispielcode.zip&quot;) unzip(&quot;data/beispielcode.zip&quot;, exdir = &quot;data&quot;) After downloading check out the original pdf version of this plot in data/beispielcode/pdf/balkendiagramm_einfach.pdf. Preparing Data Here are some steps to modify the data such that it can be easily used with ggplot2. # remember to adjust the path ipsos &lt;- openxlsx::read.xlsx(&quot;../data/alle_daten/ipsos.xlsx&quot;) ipsos &lt;- ipsos[order(ipsos$Wert),] ipsos$Land &lt;- ordered(ipsos$Land, ipsos$Land) ipsos$textFamily &lt;- ifelse(ipsos$Land %in% c(&quot;Deutschland&quot;,&quot;Brasilien&quot;), &quot;Lato Black&quot;, &quot;Lato Light&quot;) ipsos$labels &lt;- paste0(ipsos$Land, ifelse(ipsos$Wert &lt; 10, &quot; &quot;, &quot; &quot;), ipsos$Wert) rect &lt;- data.frame( ymin = seq(0, 80, 20), ymax = seq(20, 100, 20), xmin = 0.5, xmax = 16.5, colour = rep(c(grDevices::rgb(191,239,255,80,maxColorValue=255), grDevices::rgb(191,239,255,120,maxColorValue=255)), length.out = 5)) The Basic Plot First we add the geoms, then modifications to the scales and flip of the coordinate system. The remaining code is just modifying the appearance. library(&quot;ggplot2&quot;) ggBar &lt;- ggplot(ipsos) + geom_bar(aes(x = Land, y = Wert), stat = &quot;identity&quot;, fill = &quot;grey&quot;) + geom_bar(aes(x = Land, y = ifelse(Land %in% c(&quot;Brasilien&quot;, &quot;Deutschland&quot;), Wert, NA)), stat = &quot;identity&quot;, fill = rgb(255,0,210,maxColorValue=255)) + geom_rect(data = rect, mapping = aes(ymin = ymin, ymax = ymax, xmin = xmin, xmax = xmax), fill = rect$colour) + geom_hline(aes(yintercept = 45), colour = &quot;skyblue3&quot;) + scale_y_continuous(breaks = seq(0, 100, 20), limits = c(0, 100), expand = c(0, 0)) + scale_x_discrete(labels = ipsos$labels) + coord_flip() + labs(y = NULL, x = NULL, title = NULL) + theme_minimal() + theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank(), axis.ticks = element_blank(), axis.text.y = element_text( family = ipsos$textFamily), text = element_text(family = &quot;Lato Light&quot;)) ggBar Annotations and Layout Of course you can simply add the title and text annotations to the plot using ggplot2, but I didn’t find a way to do the exact placement comparable to the original version without the package grid. library(&quot;grid&quot;) vp_make &lt;- function(x, y, w, h) viewport(x = x, y = y, width = w, height = h, just = c(&quot;left&quot;, &quot;bottom&quot;)) main &lt;- vp_make(0.05, 0.05, 0.9, 0.8) title &lt;- vp_make(0, 0.9, 0.6, 0.1) subtitle &lt;- vp_make(0, 0.85, 0.4, 0.05) footnote &lt;- vp_make(0.55, 0, 0.4, 0.05) annotation1 &lt;- vp_make(0.7, 0.85, 0.225, 0.05) annotation2 &lt;- vp_make(0.4, 0.85, 0.13, 0.05) # To see which space these viewports will use: grid.rect(gp = gpar(lty = &quot;dashed&quot;)) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = main) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = title) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = subtitle) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = footnote) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = annotation1) grid.rect(gp = gpar(col = &quot;grey&quot;), vp = annotation2) And now we can add the final annotations to the plot: # pdf_datei&lt;-&quot;balkendiagramme_einfach.pdf&quot; # cairo_pdf(bg = &quot;grey98&quot;, pdf_datei, width=9, height=6.5) grid.newpage() print(ggBar, vp = main) grid.text(&quot;'Ich glaube fest an Gott oder ein höheres Wesen'&quot;, gp = gpar(fontfamily = &quot;Lato Black&quot;, fontsize = 14), just = &quot;left&quot;, x = 0.05, vp = title) grid.text(&quot;...sagten 2010 in:&quot;, gp = gpar(fontfamily = &quot;Lato Light&quot;, fontsize = 12), just = &quot;left&quot;, x = 0.05, vp = subtitle) grid.text(&quot;Quelle: www.ipsos-na.com, Design: Stefan Fichtel, ixtract&quot;, gp = gpar(fontfamily = &quot;Lato Light&quot;, fontsize = 9), just = &quot;right&quot;, x = 0.95, vp = footnote) grid.text(&quot;Alle Angaben in Prozent&quot;, gp = gpar(fontfamily = &quot;Lato Light&quot;, fontsize = 9), just = &quot;right&quot;, x = 1, y = 0.55, vp = annotation1) grid.text(&quot;Durchschnitt: 45&quot;, gp = gpar(fontfamily = &quot;Lato Light&quot;, fontsize = 9), just = &quot;right&quot;, x = 0.95, y = 0.55, vp = annotation2) # dev.off()