# Customizing ggcharts Plots

`ggcharts` aims to shorten the distance from data visualization idea to actual plot. That means it will do much of the work for you but not everything. Some things just cannot be automated, e.g. setting titles and footnotes. This vignette will show you how you can further customize a `ggcharts` plot using `ggplot2` functions.

The data I will use comes from the 2019 Stackoverflow Developer Survey.

    library(dplyr)
    library(ggplot2)
    library(ggcharts)

    dreaded_lang <- tibble::tribble(
      ~language, ~pct,
      "VBA", 75.2,
      "Objective-C", 68.7,
      "Assembly", 64.4,
      "C", 57.5,
      "PHP", 54.2,
      "Erlang", 52.6,
      "Ruby", 49.7,
      "R", 48.3,
      "C++", 48.0,
      "Java", 46.6
    )

    (chart <- lollipop_chart(dreaded_lang, language, pct, highlight = "R"))

First of all, a good data visualization needs text. I use the `labs()` function here but you might as well use `ggtitle()`, `xlab()` and `ylab()` depending on your needs.

    chart <- chart +
      labs(
        x = NULL,
        y = "Developers Who are Developing with the Language but\nHave not Expressed Interest in Continuing to Do so",
        title = "Top 10 Most Dreaded Programming Languages",
        subtitle = "R Placed 8th",
        caption = "Source: Stackoverflow Developer Survey 2019"
      )
    print(chart)

Given that the plot displays percentages it is best practice to have the axis labels include the percentages sign. That can be achieved by adding a `scale`. Note that I use the `scale_y_continuous()` function here even though I am changing the x axis. That’s because in order to create a horizontal plot `ggcharts` uses `coord_flip()` internally which - as the name - suggests flips the axes.

    chart <- chart +
      scale_y_continuous(
        labels = scales::percent_format(scale = 1),
        expand = expand_scale(mult = c(0, .05)),
        limits = c(0, 80)
      )
    print(chart)

If you only want to change the axis limits then there’s no need to use `scale_y_continuous()` instead you can use `ylim()`.

The styling of the plot is probably the customization where you will spend most of your time. Just as with any ‘usual’ `ggplot` you can add any of the built-in themes to a `ggcharts` plot and tweak it further using the `theme()` function.

    chart <- chart +
      theme_classic(base_size = 15) +
      theme(
        plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(face = "italic"),
        axis.text = element_text(color = "black")
      )
    print(chart)