{"id":16062,"date":"2020-05-05T16:50:11","date_gmt":"2020-05-05T15:50:11","guid":{"rendered":"https:\/\/www.datanovia.com\/en\/?p=16062"},"modified":"2020-05-05T18:18:42","modified_gmt":"2020-05-05T17:18:42","slug":"ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot","status":"publish","type":"post","link":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/","title":{"rendered":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT"},"content":{"rendered":"<p>&nbsp;<\/p>\n<div id=\"rdoc\">\n<p>This article describes how to <strong>add p-values generated elsewhere to a ggplot<\/strong> using the ggpubr package. The following key ggpubr functions will be used:<\/p>\n<ul>\n<li><code>stat_pvalue_manual()<\/code>: Add manually p-values to a ggplot, such as box blots, dot plots and stripcharts.<\/li>\n<li><code>geom_bracket()<\/code>: Add brackets with label annotation to a ggplot. Helpers for adding p-value or significance levels to a plot.<\/li>\n<\/ul>\n<p>You will learn how to:<\/p>\n<ul>\n<li>Add custom p-values created from elsewhere<\/li>\n<li>Add p-values obtained from the <a href=\"https:\/\/rpkgs.datanovia.com\/rstatix\/\">rstatix R package<\/a><\/li>\n<li>Add brackets with custom p-value labels to a ggplot<\/li>\n<\/ul>\n<p>Contents:<\/p>\n<div id=\"TOC\">\n<ul>\n<li><a href=\"#prerequisites\">Prerequisites<\/a><\/li>\n<li><a href=\"#data-preparation\">Data preparation<\/a><\/li>\n<li><a href=\"#add-p-values-computed-from-elsewhere\">Add p-values computed from elsewhere<\/a><\/li>\n<li><a href=\"#add-p-values-obtained-from-the-rstatix-package\">Add p-values obtained from the rstatix package<\/a>\n<ul>\n<li><a href=\"#create-a-simple-box-plot\">Create a simple box plot<\/a><\/li>\n<li><a href=\"#pairwise-comparisons\">Pairwise comparisons<\/a><\/li>\n<li><a href=\"#faceted-plots\">Faceted plots<\/a><\/li>\n<li><a href=\"#grouped-plots\">Grouped plots<\/a><\/li>\n<li><a href=\"#specify-manually-the-y-position-of-the-p-values\">Specify manually the y position of the p-values<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#add-brackets-with-custom-p-value-labels-to-a-ggplot\">Add brackets with custom p-value labels to a ggplot<\/a>\n<ul>\n<li><a href=\"#basic-brackets-with-labels\">Basic brackets with labels<\/a><\/li>\n<li><a href=\"#using-plotmath-expression-and-specifying-multiple-brackets-manually\">Using plotmath expression and specifying multiple brackets manually<\/a><\/li>\n<li><a href=\"#compute-statistical-tests-and-add-p-values\">Compute statistical tests and add p-values<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#conclusions\">Conclusions<\/a><\/li>\n<\/ul>\n<\/div>\n<div id=\"prerequisites\" class=\"section level2\">\n<h2>Prerequisites<\/h2>\n<p>Make sure you have the following R packages:<\/p>\n<ul>\n<li><code>tidyverse<\/code> for data manipulation and visualization<\/li>\n<li><code>ggpubr<\/code> for creating easily publication ready plots<\/li>\n<li><code>rstatix<\/code> provides pipe-friendly R functions for easy statistical analyses<\/li>\n<\/ul>\n<p>Load required R packages:<\/p>\n<pre class=\"r\"><code>library(tidyverse)\r\nlibrary(ggpubr)\r\nlibrary(rstatix)<\/code><\/pre>\n<\/div>\n<div id=\"data-preparation\" class=\"section level2\">\n<h2>Data preparation<\/h2>\n<pre class=\"r\"><code># Convert `dose` variable into factor\r\ndf &lt;- ToothGrowth\r\ndf$dose &lt;- factor(df$dose)\r\n\r\n# Inspect the data \r\n# Display two random rows by groups\r\nset.seed(123)\r\ndf %&gt;% sample_n_by(dose, size = 2)<\/code><\/pre>\n<pre><code>## # A tibble: 6 x 3\r\n##     len supp  dose \r\n##   &lt;dbl&gt; &lt;fct&gt; &lt;fct&gt;\r\n## 1  10   VC    0.5  \r\n## 2  14.5 OJ    0.5  \r\n## 3  18.8 VC    1    \r\n## 4  25.8 OJ    1    \r\n## 5  29.4 OJ    2    \r\n## 6  23.6 VC    2<\/code><\/pre>\n<\/div>\n<div id=\"add-p-values-computed-from-elsewhere\" class=\"section level2\">\n<h2>Add p-values computed from elsewhere<\/h2>\n<p>Key R function: <code>stat_pvalue_manual()<\/code> [in ggpubr package]<\/p>\n<pre class=\"r\"><code>stat_pvalue_manual(data, label = NULL)<\/code><\/pre>\n<ul>\n<li><code>data<\/code>: a data frame containing statistical test results. The expected default format should contain the following columns: <code>group1 | group2 | p | y.position | etc<\/code>. <code>group1<\/code> and <code>group2<\/code> are the groups that have been compared. <code>p<\/code> is the resulting p-value. <code>y.position<\/code> is the y coordinates of the p-values in the plot.<\/li>\n<li><code>label<\/code>: the column containing the label (e.g.: <code>label = \"p\"<\/code> or <code>label = \"p.adj\"<\/code>), where p is the p-value. Can be also an expression that can be formatted by the <code>glue<\/code> package. For example, when specifying <code>label = \"t-test, p = {p}\"<\/code>, the expression <code>{p}<\/code> will be replaced by its value.<\/li>\n<\/ul>\n<pre class=\"r\"><code># p-values\r\nstat.test &lt;- tibble::tribble(\r\n  ~group1, ~group2,   ~p.adj,\r\n    \"0.5\",     \"1\", 2.54e-07,\r\n    \"0.5\",     \"2\", 1.32e-13,\r\n      \"1\",     \"2\", 1.91e-05\r\n  )\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 3\r\n##   group1 group2    p.adj\r\n##   &lt;chr&gt;  &lt;chr&gt;     &lt;dbl&gt;\r\n## 1 0.5    1      2.54e- 7\r\n## 2 0.5    2      1.32e-13\r\n## 3 1      2      1.91e- 5<\/code><\/pre>\n<pre class=\"r\"><code># Box plots + p-values\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  stat_pvalue_manual(\r\n    stat.test, \r\n    y.position = 35, step.increase = 0.1,\r\n    label = \"p.adj\"\r\n    )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-custom-p-values-1.png\" width=\"480\" \/><\/p>\n<\/div>\n<div id=\"add-p-values-obtained-from-the-rstatix-package\" class=\"section level2\">\n<h2>Add p-values obtained from the rstatix package<\/h2>\n<div id=\"create-a-simple-box-plot\" class=\"section level3\">\n<h3>Create a simple box plot<\/h3>\n<pre class=\"r\"><code>bxp &lt;- ggboxplot(df, x = \"dose\", y = \"len\")\r\nbxp<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-box-plot-1.png\" width=\"432\" \/><\/p>\n<\/div>\n<div id=\"pairwise-comparisons\" class=\"section level3\">\n<h3>Pairwise comparisons<\/h3>\n<pre class=\"r\"><code># Statistical test\r\nstat.test &lt;- df %&gt;% t_test(len ~ dose)\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 10\r\n##   .y.   group1 group2    n1    n2 statistic    df        p    p.adj p.adj.signif\r\n## * &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;    &lt;dbl&gt;    &lt;dbl&gt; &lt;chr&gt;       \r\n## 1 len   0.5    1         20    20     -6.48  38.0 1.27e- 7 2.54e- 7 ****        \r\n## 2 len   0.5    2         20    20    -11.8   36.9 4.40e-14 1.32e-13 ****        \r\n## 3 len   1      2         20    20     -4.90  37.1 1.91e- 5 1.91e- 5 ****<\/code><\/pre>\n<pre class=\"r\"><code># Box plot\r\nstat.test &lt;- stat.test %&gt;% add_xy_position(x = \"dose\")\r\nbxp + stat_pvalue_manual(stat.test, label = \"p.adj.signif\", tip.length = 0.01)<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-simple-pairwise-comparisons-1.png\" width=\"480\" \/><\/p>\n<\/div>\n<div id=\"faceted-plots\" class=\"section level3\">\n<h3>Faceted plots<\/h3>\n<pre class=\"r\"><code># Statistical tests\r\nstat.test &lt;- df %&gt;%\r\n  group_by(supp) %&gt;%\r\n  t_test(len ~ dose, ref.group = \"0.5\")\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 4 x 11\r\n##   supp  .y.   group1 group2    n1    n2 statistic    df            p        p.adj p.adj.signif\r\n## * &lt;fct&gt; &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;        &lt;dbl&gt;        &lt;dbl&gt; &lt;chr&gt;       \r\n## 1 OJ    len   0.5    1         10    10     -5.05  17.7 0.0000878    0.0000878    ****        \r\n## 2 OJ    len   0.5    2         10    10     -7.82  14.7 0.00000132   0.00000264   ****        \r\n## 3 VC    len   0.5    1         10    10     -7.46  17.9 0.000000681  0.000000681  ****        \r\n## 4 VC    len   0.5    2         10    10    -10.4   14.3 0.0000000468 0.0000000936 ****<\/code><\/pre>\n<pre class=\"r\"><code># Box plots\r\nstat.test &lt;- stat.test %&gt;% add_xy_position(x = \"dose\")\r\nggboxplot(df, x = \"dose\", y = \"len\", facet.by = \"supp\") +\r\n  stat_pvalue_manual(stat.test, label = \"p.adj.signif\", tip.length = 0.01)<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-faceted-plots-1.png\" width=\"576\" \/><\/p>\n<\/div>\n<div id=\"grouped-plots\" class=\"section level3\">\n<h3>Grouped plots<\/h3>\n<pre class=\"r\"><code># Box plot: comparison against reference\r\nstat.test &lt;- df %&gt;%\r\n  group_by(supp) %&gt;%\r\n  t_test(len ~ dose, ref.group = \"0.5\") \r\n\r\n# Box plots\r\nstat.test &lt;- stat.test %&gt;% \r\n  add_xy_position(x = \"supp\", dodge = 0.8)\r\nbxp &lt;- ggboxplot(df, x = \"supp\", y = \"len\", color = \"dose\")\r\nbxp + stat_pvalue_manual(stat.test,   label = \"p.adj\", tip.length = 0.01)<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-grouped-plots-three-groups-1.png\" width=\"576\" \/><\/p>\n<\/div>\n<div id=\"specify-manually-the-y-position-of-the-p-values\" class=\"section level3\">\n<h3>Specify manually the y position of the p-values<\/h3>\n<p><strong>Create a simple box plot<\/strong>:<\/p>\n<pre class=\"r\"><code># Pairwise t-test between groups\r\nstat.test &lt;- ToothGrowth %&gt;%\r\n  t_test(len ~ dose) %&gt;%\r\n  mutate(y.position = c(29, 35, 39))\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 11\r\n##   .y.   group1 group2    n1    n2 statistic    df        p    p.adj p.adj.signif y.position\r\n## * &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;    &lt;dbl&gt;    &lt;dbl&gt; &lt;chr&gt;             &lt;dbl&gt;\r\n## 1 len   0.5    1         20    20     -6.48  38.0 1.27e- 7 2.54e- 7 ****                 29\r\n## 2 len   0.5    2         20    20    -11.8   36.9 4.40e-14 1.32e-13 ****                 35\r\n## 3 len   1      2         20    20     -4.90  37.1 1.91e- 5 1.91e- 5 ****                 39<\/code><\/pre>\n<pre class=\"r\"><code># Create a box plot and add the p-value\r\nggboxplot(ToothGrowth, x = \"dose\", y = \"len\") +\r\n  stat_pvalue_manual(stat.test, label = \"p.adj\")<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-add-custom-pvalues-1.png\" width=\"480\" \/><\/p>\n<p><strong>Faceted plots<\/strong>: Comparisons between two groups<\/p>\n<pre class=\"r\"><code># Pairwise t-test between groups\r\nstat.test &lt;- df %&gt;%\r\n  group_by(dose) %&gt;%\r\n  t_test(len ~ supp) %&gt;%\r\n  adjust_pvalue() %&gt;%\r\n  mutate(y.position = 35)\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 11\r\n##   dose  .y.   group1 group2    n1    n2 statistic    df       p   p.adj y.position\r\n## * &lt;fct&gt; &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;   &lt;dbl&gt;   &lt;dbl&gt;      &lt;dbl&gt;\r\n## 1 0.5   len   OJ     VC        10    10    3.17    15.0 0.00636 0.0127          35\r\n## 2 1     len   OJ     VC        10    10    4.03    15.4 0.00104 0.00312         35\r\n## 3 2     len   OJ     VC        10    10   -0.0461  14.0 0.964   0.964           35<\/code><\/pre>\n<pre class=\"r\"><code># Create a box plot and add the p-value\r\np &lt;- ggboxplot(\r\n  df, x = \"supp\", y = \"len\",\r\n   color = \"supp\", palette = \"jco\",\r\n  facet.by = \"dose\", ylim = c(0, 40)\r\n  )\r\n\r\np + stat_pvalue_manual(stat.test, label = \"p.adj\")<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-facet-comparisons-between-two-groups-1.png\" width=\"576\" \/><\/p>\n<p><strong>Faceted plots<\/strong>: Pairwise comparisons between multiple groups<\/p>\n<pre class=\"r\"><code># Pairwise t-test between groups\r\nstat.test &lt;- df %&gt;%\r\n  group_by(supp) %&gt;%\r\n  t_test(len ~ dose) %&gt;%\r\n  adjust_pvalue() %&gt;%\r\n  mutate(y.position = rep(c(29, 35, 39), 2))\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 6 x 12\r\n##   supp  .y.   group1 group2    n1    n2 statistic    df            p       p.adj p.adj.signif y.position\r\n## * &lt;fct&gt; &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;        &lt;dbl&gt;       &lt;dbl&gt; &lt;chr&gt;             &lt;dbl&gt;\r\n## 1 OJ    len   0.5    1         10    10     -5.05  17.7 0.0000878    0.000263    ***                  29\r\n## 2 OJ    len   0.5    2         10    10     -7.82  14.7 0.00000132   0.00000528  ****                 35\r\n## 3 OJ    len   1      2         10    10     -2.25  15.8 0.039        0.039       *                    39\r\n## 4 VC    len   0.5    1         10    10     -7.46  17.9 0.000000681  0.00000340  ****                 29\r\n## 5 VC    len   0.5    2         10    10    -10.4   14.3 0.0000000468 0.000000281 ****                 35\r\n## 6 VC    len   1      2         10    10     -5.47  13.6 0.0000916    0.000263    ****                 39<\/code><\/pre>\n<pre class=\"r\"><code># Create a box plot and add the p-value\r\np &lt;- ggboxplot(\r\n  df, x = \"dose\", y = \"len\",\r\n   color = \"supp\", palette = \"jco\",\r\n  facet.by = \"supp\", ylim = c(0, 40)\r\n  )\r\n\r\np + stat_pvalue_manual(stat.test)<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-facet-pairwise-comparisons-between-mumtiple-groups-1.png\" width=\"576\" \/><\/p>\n<p><strong>Grouped plots<\/strong><\/p>\n<pre class=\"r\"><code># Pairwise t-test between groups\r\nstat.test &lt;- df %&gt;%\r\n  group_by(dose) %&gt;%\r\n  t_test(len ~ supp) %&gt;%\r\n  adjust_pvalue() %&gt;%\r\n  mutate(y.position = 35)\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 x 11\r\n##   dose  .y.   group1 group2    n1    n2 statistic    df       p   p.adj y.position\r\n## * &lt;fct&gt; &lt;chr&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;int&gt; &lt;int&gt;     &lt;dbl&gt; &lt;dbl&gt;   &lt;dbl&gt;   &lt;dbl&gt;      &lt;dbl&gt;\r\n## 1 0.5   len   OJ     VC        10    10    3.17    15.0 0.00636 0.0127          35\r\n## 2 1     len   OJ     VC        10    10    4.03    15.4 0.00104 0.00312         35\r\n## 3 2     len   OJ     VC        10    10   -0.0461  14.0 0.964   0.964           35<\/code><\/pre>\n<pre class=\"r\"><code># Create a box plot and add the p-value\r\np &lt;- ggboxplot(\r\n  ToothGrowth, x = \"dose\", y = \"len\",\r\n   color = \"supp\", palette = \"jco\",\r\n   ylim = c(0, 40)\r\n  )\r\n\r\np + stat_pvalue_manual(stat.test, xmin = \"dose\", xmax = NULL)<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-grouped-boxplot-1.png\" width=\"576\" \/><\/p>\n<\/div>\n<\/div>\n<div id=\"add-brackets-with-custom-p-value-labels-to-a-ggplot\" class=\"section level2\">\n<h2>Add brackets with custom p-value labels to a ggplot<\/h2>\n<p>This section describes the function <code>geom_bracket()<\/code> [in ggpubr package] for adding brackets with label annotation to a ggplot. It makes it easy to add p-value or significance levels created elsewhere to a plot.<\/p>\n<div id=\"basic-brackets-with-labels\" class=\"section level3\">\n<h3>Basic brackets with labels<\/h3>\n<pre class=\"r\"><code># Add bracket with labels\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    xmin = \"0.5\", xmax = \"1\", y.position = 30,\r\n    label = \"t-test, p &lt; 0.05\"\r\n  )\r\n\r\n# Customize bracket tip.length tip.length\r\n# Move up the label using vjust\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    xmin = \"0.5\", xmax = \"1\", y.position = 30,\r\n    label = \"t-test, p &lt; 0.05\", \r\n    tip.length = c(0.2, 0.02), vjust = -1\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-add-brackets-with-labels-to-a-ggplot-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-add-brackets-with-labels-to-a-ggplot-2.png\" width=\"307.2\" \/><\/p>\n<\/div>\n<div id=\"using-plotmath-expression-and-specifying-multiple-brackets-manually\" class=\"section level3\">\n<h3>Using plotmath expression and specifying multiple brackets manually<\/h3>\n<pre class=\"r\"><code>#Using plotmath expression\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n geom_bracket(\r\n   xmin = \"0.5\", xmax = \"1\", y.position = 30,\r\n   label = \"list(~italic(p)&lt;=0.001)\", type = \"expression\",\r\n   tip.length = c(0.2, 0.02)\r\n )\r\n\r\n\r\n# Specify multiple brackets manually\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    xmin = c(\"0.5\", \"1\"), xmax = c(\"1\", \"2\"),\r\n    y.position = c(30, 35), label = c(\"***\", \"**\"),\r\n    tip.length = 0.01\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-using-plotmath-expression-and-multiple-brackets-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-using-plotmath-expression-and-multiple-brackets-2.png\" width=\"307.2\" \/><\/p>\n<\/div>\n<div id=\"compute-statistical-tests-and-add-p-values\" class=\"section level3\">\n<h3>Compute statistical tests and add p-values<\/h3>\n<pre class=\"r\"><code># Compute statistical tests and add p-values\r\nstat.test &lt;- compare_means(len ~ dose, ToothGrowth, method = \"t.test\")\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    aes(xmin = group1, xmax = group2, label = signif(p, 2)),\r\n    data = stat.test, y.position = 35\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-compute-statistical-testand-add-p-values-1.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Increase step length between brackets\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    aes(xmin = group1, xmax = group2, label = signif(p, 2)),\r\n    data = stat.test, y.position = 35, step.increase = 0.1\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-compute-statistical-testand-add-p-values-2.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Or specify the positions of each comparison\r\nggboxplot(df, x = \"dose\", y = \"len\") +\r\n  geom_bracket(\r\n    aes(xmin = group1, xmax = group2, label = signif(p, 2)),\r\n    data = stat.test, y.position = c(32, 35, 38)\r\n   )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/054-add-p-values-generated-elsewhere-compute-statistical-testand-add-p-values-3.png\" width=\"480\" \/><\/p>\n<\/div>\n<\/div>\n<div id=\"conclusions\" class=\"section level2\">\n<h2>Conclusions<\/h2>\n<p>This article describes how to <strong>add p-values generated elsewhere to a ggplot<\/strong> using the ggpubr package.<\/p>\n<\/div>\n<\/div>\n<p><!--end rdoc--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; This article describes how to add p-values generated elsewhere to a ggplot using the ggpubr package. The following key ggpubr functions will be used: stat_pvalue_manual(): Add manually p-values to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":16063,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rating_form_position":"","rating_results_position":"","mr_structured_data_type":"","footnotes":""},"categories":[341],"tags":[343],"class_list":["post-16062","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-faq","tag-ggpubr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia\" \/>\n<meta property=\"og:description\" content=\"&nbsp; This article describes how to add p-values generated elsewhere to a ggplot using the ggpubr package. The following key ggpubr functions will be used: stat_pvalue_manual(): Add manually p-values to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\" \/>\n<meta property=\"og:site_name\" content=\"Datanovia\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-05T15:50:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-05T17:18:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1344\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alboukadel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alboukadel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\"},\"author\":{\"name\":\"Alboukadel\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e\"},\"headline\":\"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT\",\"datePublished\":\"2020-05-05T15:50:11+00:00\",\"dateModified\":\"2020-05-05T17:18:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\"},\"wordCount\":400,\"commentCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png\",\"keywords\":[\"ggpubr\"],\"articleSection\":[\"FAQ\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\",\"name\":\"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png\",\"datePublished\":\"2020-05-05T15:50:11+00:00\",\"dateModified\":\"2020-05-05T17:18:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png\",\"width\":1344,\"height\":768,\"caption\":\"054-add-p-values-generated-elsewhere-logo-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.datanovia.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#website\",\"url\":\"https:\/\/www.datanovia.com\/en\/\",\"name\":\"Datanovia\",\"description\":\"Data Mining and Statistics for Decision Support\",\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.datanovia.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\",\"name\":\"Datanovia\",\"url\":\"https:\/\/www.datanovia.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"width\":98,\"height\":99,\"caption\":\"Datanovia\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e\",\"name\":\"Alboukadel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g\",\"caption\":\"Alboukadel\"},\"url\":\"https:\/\/www.datanovia.com\/en\/blog\/author\/kassambara\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/","og_locale":"en_US","og_type":"article","og_title":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia","og_description":"&nbsp; This article describes how to add p-values generated elsewhere to a ggplot using the ggpubr package. The following key ggpubr functions will be used: stat_pvalue_manual(): Add manually p-values to [&hellip;]","og_url":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/","og_site_name":"Datanovia","article_published_time":"2020-05-05T15:50:11+00:00","article_modified_time":"2020-05-05T17:18:42+00:00","og_image":[{"width":1344,"height":768,"url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png","type":"image\/png"}],"author":"Alboukadel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alboukadel","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#article","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/"},"author":{"name":"Alboukadel","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e"},"headline":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT","datePublished":"2020-05-05T15:50:11+00:00","dateModified":"2020-05-05T17:18:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/"},"wordCount":400,"commentCount":6,"publisher":{"@id":"https:\/\/www.datanovia.com\/en\/#organization"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png","keywords":["ggpubr"],"articleSection":["FAQ"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/","url":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/","name":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT - Datanovia","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png","datePublished":"2020-05-05T15:50:11+00:00","dateModified":"2020-05-05T17:18:42+00:00","breadcrumb":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#primaryimage","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/054-add-p-values-generated-elsewhere-logo-1.png","width":1344,"height":768,"caption":"054-add-p-values-generated-elsewhere-logo-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.datanovia.com\/en\/blog\/ggpubr-how-to-add-p-values-generated-elsewhere-to-a-ggplot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.datanovia.com\/en\/"},{"@type":"ListItem","position":2,"name":"GGPUBR: How to Add P-Values Generated Elsewhere to a GGPLOT"}]},{"@type":"WebSite","@id":"https:\/\/www.datanovia.com\/en\/#website","url":"https:\/\/www.datanovia.com\/en\/","name":"Datanovia","description":"Data Mining and Statistics for Decision Support","publisher":{"@id":"https:\/\/www.datanovia.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.datanovia.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.datanovia.com\/en\/#organization","name":"Datanovia","url":"https:\/\/www.datanovia.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","width":98,"height":99,"caption":"Datanovia"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e","name":"Alboukadel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g","caption":"Alboukadel"},"url":"https:\/\/www.datanovia.com\/en\/blog\/author\/kassambara\/"}]}},"multi-rating":{"mr_rating_results":[]},"_links":{"self":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts\/16062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/comments?post=16062"}],"version-history":[{"count":4,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts\/16062\/revisions"}],"predecessor-version":[{"id":16068,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts\/16062\/revisions\/16068"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media\/16063"}],"wp:attachment":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media?parent=16062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/categories?post=16062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/tags?post=16062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}