I have data from different countries from two groups of samples (control and test). And, calculated three different indices alpha, beta and gamma. I have a large dataframe containing all the data. Here is a reproducible example of my dataframe (df):

df <- structure(list(
    SampleID = c("SRR490_profile", "SRR467268_profile",
                 "SRR467265_profile", "SRR467264_profile",
                 "SRR467263_profile", "SRR467258_profile",
                 "SRR467250_profile", "SRR467244_profile",
                 "SRR467242_profile", "SRR467227_profile",
                 "ERR710432_profile", "ERR710430_profile",
                 "ERR710429_profile", "SRR232646_profile",
                 "SRR232622_profile", "SRR232619_profile",
                 "SRR232617_profile", "SRR232616_profile",
                 "SRR232614_profile", "SRR232612_profile",
                 "HJ4386_profile", "HJ4382_profile",
                 "HJ4380_profile", "HJ4379_profile",
                 "HJ4377_profile", "HJ4375_profile",
                 "HJ4374_profile", "HJ4373_profile",
                 "HJ4372_profile", "HJ4370_profile",
                 "KLM3246730_profile", "KLM3246729_profile",
                 "KLM3246725_profile", "KLM3246722_profile",
                 "KLM3246721_profile", "KLM3246714_profile",
                 "KLM3246713_profile", "KLM3246712_profile",
                 "KLM3246711_profile", "KLM3246705_profile"),
    type = c("test", "control", "control", "control",
             "control", "test", "test", "test", "control",
             "control", "control", "test", "control",
             "control", "control", "control", "control",
             "test", "control", "test", "control", "control",
             "control", "control", "control", "test",
             "control", "test", "test", "control", "control",
             "test", "test", "test", "control", "test",
             "control", "test", "test", "test"),
    variable = c("gamma", "alpha", "beta", "gamma", "alpha", "beta",
                 "gamma", "alpha", "beta", "gamma", "alpha", "alpha",
                 "beta", "gamma", "alpha", "beta", "gamma", "alpha",
                 "beta", "gamma", "alpha", "alpha", "alpha", "beta",
                 "beta", "gamma", "alpha", "beta", "gamma", "alpha",
                 "beta", "gamma", "alpha", "beta", "gamma", "alpha",
                 "beta", "gamma", "alpha", "beta"),
    value = c(95, 90, 109, 112, 128, 109, 90, 87, 90, 99, 129, 101, 113,
              100, 111, 102, 99, 105, 85, 94, 133, 117, 116, 83, 113, 126,
              90, 128, 107, 121, 88, 109, 82, 42, 67, 100, 88, 101, 127,
    StudyID = c("swiss", "swiss", "swiss", "swiss", "swiss", "swiss",
                "swiss", "swiss", "swiss", "swiss", "australian",
                "australian", "australian", "australian", "australian",
                "australian", "australian", "australian", "australian",
                "australian", "thai", "thai", "thai", "thai", "thai",
                "thai", "thai", "thai", "thai", "thai", "english",
                "english", "english", "english", "english", "english",
                "english", "english", "english", "english")),
    row.names = c(NA, -40L),
    class = c("tbl_df", "tbl", "data.frame"))

Now, I want an image for each index containing barplots for two groups (control and test) and Y-axis showing the StudyID names (i.e., country names) like the following (this image shows plots for two indices alpha and beta): enter image description here Is this possible from my data? Can anyone give me a solution?

Thanks in advance


2 Answers 2


If you're not wedded to a dot and whiskers plot as the one show, I'd probably plot this dataset as a boxplot with ggplot:

ggplot(df,aes(x=value,y=StudyID,colour=type)) +
geom_boxplot() +

The ggplot2 function stat_summary or stat_summary_bin should get you most of the way there, something like this [not tested]:


df %>%
  ggplot() +
  aes(x=value, y=StudyID, colour=type) +
  stat_summary() +

See ?stat_summary for more information.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.