{"id":16475,"date":"2020-05-26T11:04:39","date_gmt":"2020-05-26T10:04:39","guid":{"rendered":"https:\/\/www.datanovia.com\/en\/?p=16475"},"modified":"2022-12-07T22:13:28","modified_gmt":"2022-12-07T21:13:28","slug":"how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package","status":"publish","type":"post","link":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/","title":{"rendered":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package"},"content":{"rendered":"<div id=\"rdoc\">\n<p>This article describes how to compute and automatically <strong>add p-values onto grouped ggplots<\/strong> using the <em>ggpubr<\/em> and the <em>rstatix<\/em> R packages.<\/p>\n<p>You will learn how to:<\/p>\n<ul>\n<li>Add p-values onto grouped box plots, bar plots and line plots. Examples, containing two and three groups by x position, are shown.<\/li>\n<li>Show the p-values combined with the significance levels onto the grouped plots<\/li>\n<\/ul>\n<p>We will follow the steps below for adding significance levels onto a ggplot:<\/p>\n<div class=\"block\">\n<ol style=\"list-style-type: decimal;\">\n<li>Compute easily statistical tests (<code>t_test()<\/code> or <code>wilcox_test()<\/code>) using the <code>rstatix<\/code> package<\/li>\n<li>Auto-compute p-value label positions using the function <code>add_xy_position()<\/code> [in rstatix package].<\/li>\n<li>Add the p-values to the plot using the function <code>stat_pvalue_manual()<\/code> [in ggpubr package]. The following key options are illustrated in some of the examples:\n<ul>\n<li>The option <code>bracket.nudge.y<\/code> is used to move up or to move down the brackets.<\/li>\n<li>The option <code>step.increase<\/code> is used to add more space between brackets.<\/li>\n<li>The option <code>vjust<\/code> is used to vertically adjust the position of the p-values labels<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div>\n<p>Note that, in some situations, the p-value labels are partially hidden by the plot top border. In these cases, the ggplot2 function <code>scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code> can be used to <a href=\"https:\/\/www.datanovia.com\/en\/blog\/ggplot-facet-how-to-add-space-between-labels-on-the-top-of-the-chart-and-the-plot-border\/\">add more spaces between labels and the plot top border<\/a>. The option <code>mult = c(0, 0.1)<\/code> indicates that 0% and 10% spaces are respectively added at the bottom and the top of the plot.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\" width=\"480\" \/><\/p>\n<p>Contents:<\/p>\n<div id=\"TOC\">\n<ul>\n<li><a href=\"#prerequisites\">Prerequisites<\/a><\/li>\n<li><a href=\"#key-r-functions\">Key R functions<\/a><\/li>\n<li><a href=\"#data-preparation\">Data preparation<\/a><\/li>\n<li><a href=\"#two-groups-by-x-position\">Two groups by x position<\/a>\n<ul>\n<li><a href=\"#statistical-tests\">Statistical tests<\/a><\/li>\n<li><a href=\"#grouped-box-plots\">Grouped box plots<\/a><\/li>\n<li><a href=\"#grouped-bar-plots\">Grouped bar plots<\/a><\/li>\n<li><a href=\"#grouped-line-plots\">Grouped line plots<\/a><\/li>\n<li><a href=\"#pairwise-comparisons\">Pairwise comparisons<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#three-groups-by-x-position\">Three groups by x position<\/a>\n<ul>\n<li><a href=\"#simple-plots\">Simple plots<\/a><\/li>\n<li><a href=\"#perform-all-pairwise-comparisons\">Perform all pairwise comparisons<\/a><\/li>\n<li><a href=\"#pairwise-comparisons-against-a-reference-group\">Pairwise comparisons against a reference group<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#conclusion\">Conclusion<\/a><\/li>\n<\/ul>\n<\/div>\n<div id=\"prerequisites\" class=\"section level2\">\n<h2>Prerequisites<\/h2>\n<p>Make sure you have installed 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>Start by loading the following required packages:<\/p>\n<pre class=\"r\"><code>library(ggpubr)\r\nlibrary(rstatix)<\/code><\/pre>\n<\/div>\n<div id=\"key-r-functions\" class=\"section level2\">\n<h2>Key R functions<\/h2>\n<p><strong>Statistical test functions for pairwise comparisons<\/strong>: <code>t_test()<\/code> and <code>wilcox_test()<\/code> [rstatix package]<\/p>\n<p>Pipe-friendly framework to compare the mean of two groups. If grouping variable contains more than two levels, then a pairwise comparison between levels is automatically computed and the p-value is adjusted using the Holm p-value adjustement methods (by default). You can change this using for example <code>p.adjust.method = \"bonferroni\"<\/code>, which is more stringent but frequently used.<\/p>\n<p><strong>Auto-Compute p-value x and y positions for plotting p-values and significance levels<\/strong>: <code>add_xy_position()<\/code> [rstatix package]<\/p>\n<p>one of the key argument is <code>fun<\/code>, which indicates summary statistics functions used to compute automatically suitable y positions of p-value labels and brackets. The default value is <code>fun = \"max\"<\/code>, which is suitable to compute p-value positions for box plots.<\/p>\n<p>If you are creating a bar plot or a line plot with error bars (mean +\/- SD or mean +\/_ se), then you need to specify the corresponding summary statistics functions when computing the p-value labels positions. For example, <code>fun = \"mean_sd\"<\/code>. Possible values include: <code>\"max\", \"mean\", \"mean_sd\", \"mean_se\", \"mean_ci\", \"median\", \"median_iqr\", \"median_mad\"<\/code>.<\/p>\n<p><strong>Add manually p-values to a ggplot<\/strong>: <code>stat_pvalue_manual()<\/code> [in ggpubr package]<\/p>\n<p>This function can be used to add manually p-values to a ggplot, such as box blots, dot plots, stripcharts, line plots and bar plots. Frequently asked questions are available on <a href=\"https:\/\/www.datanovia.com\/en\/blog\/tag\/ggpubr\/\">Datanovia ggpubr FAQ page<\/a>.<\/p>\n<p>Key arguments include:<\/p>\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<li><code>bracket.nudge.y<\/code>: Vertical adjustment to nudge brackets by. Useful to move up or move down the bracket. If positive value, brackets will be moved up; if negative value, brackets are moved down.<\/li>\n<li><code>remove.bracket<\/code>: logical value, if <code>TRUE<\/code>, brackets are removed from the plot.<\/li>\n<li><code>step.increase<\/code>: fraction of additional space to add between brackets for minimizing overlap.<\/li>\n<li><code>hide.ns<\/code>: logical value. If TRUE, hide ns symbol when displaying significance levels.<\/li>\n<\/ul>\n<\/div>\n<div id=\"data-preparation\" class=\"section level2\">\n<h2>Data preparation<\/h2>\n<pre class=\"r\"><code># Transform `dose` into factor variable\r\ndf &lt;- ToothGrowth\r\ndf$dose &lt;- as.factor(df$dose)\r\nhead(df, 3)<\/code><\/pre>\n<pre><code>##    len supp dose\r\n## 1  4.2   VC  0.5\r\n## 2 11.5   VC  0.5\r\n## 3  7.3   VC  0.5<\/code><\/pre>\n<\/div>\n<div id=\"two-groups-by-x-position\" class=\"section level2\">\n<h2>Two groups by x position<\/h2>\n<div id=\"statistical-tests\" class=\"section level3\">\n<h3>Statistical tests<\/h3>\n<p>Group the data by the <code>dose<\/code> variable and then compare the levels of the <code>supp<\/code> variable (<code>OJ<\/code> vs <code>VC<\/code>):<\/p>\n<pre class=\"r\"><code>stat.test &lt;- df %&gt;%\r\n  group_by(dose) %&gt;%\r\n  t_test(len ~ supp) %&gt;%\r\n  adjust_pvalue(method = \"bonferroni\") %&gt;%\r\n  add_significance(\"p.adj\")\r\nstat.test<\/code><\/pre>\n<pre><code>## # A tibble: 3 \u00d7 11\r\n##   dose  .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 0.5   len   OJ     VC        10    10    3.17    15.0 0.00636 0.0191  *           \r\n## 2 1     len   OJ     VC        10    10    4.03    15.4 0.00104 0.00312 **          \r\n## 3 2     len   OJ     VC        10    10   -0.0461  14.0 0.964   1       ns<\/code><\/pre>\n<\/div>\n<div id=\"grouped-box-plots\" class=\"section level3\">\n<h3>Grouped box plots<\/h3>\n<pre class=\"r\"><code># Create a box plot\r\nbxp &lt;- ggboxplot(\r\n  df, x = \"dose\", y = \"len\", \r\n  color = \"supp\", palette = c(\"#00AFBB\", \"#E7B800\")\r\n  )\r\n\r\n# Add p-values onto the box plots\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"dose\", dodge = 0.8)\r\nbxp + stat_pvalue_manual(\r\n  stat.test,  label = \"p\", tip.length = 0\r\n  )\r\n\r\n# Add 10% spaces between the p-value labels and the plot border\r\nbxp + stat_pvalue_manual(\r\n  stat.test,  label = \"p\", tip.length = 0\r\n  ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-box-plots-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-box-plots-2.png\" width=\"307.2\" \/><\/p>\n<pre class=\"r\"><code># Use adjusted p-values as labels\r\n# Remove brackets\r\nbxp + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj\", tip.length = 0,\r\n  remove.bracket = TRUE\r\n  )\r\n\r\n# Show adjusted p-values and significance levels\r\n# Hide ns (non-significant)\r\nbxp + stat_pvalue_manual(\r\n  stat.test,  label = \"{p.adj}{p.adj.signif}\", \r\n  tip.length = 0, hide.ns = TRUE\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-boxplots-show-adjusted-p-values-and-remove-brackets-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-boxplots-show-adjusted-p-values-and-remove-brackets-2.png\" width=\"307.2\" \/><\/p>\n<p>The following R script create a box plot containing two statistical tests results:<\/p>\n<ol style=\"list-style-type: decimal;\">\n<li>the above <code>stat.test<\/code> comparing the levels of the <code>supp<\/code> (<code>OJ<\/code> vs <code>VC<\/code>) variable<\/li>\n<li>an additional statistical test (<code>stat.test2<\/code>) performing pairwise comparisons between the <code>dose<\/code> levels. P-values are automatically adjusted because the <code>dose<\/code> variable contains 3 levels.<\/li>\n<\/ol>\n<pre class=\"r\"><code># Additional statistical test\r\nstat.test2 &lt;- df %&gt;%\r\n  t_test(len ~ dose, p.adjust.method = \"bonferroni\")\r\nstat.test2<\/code><\/pre>\n<pre><code>## # A tibble: 3 \u00d7 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 3.81e- 7 ****        \r\n## 2 len   0.5    2         20    20    -11.8   36.9 4.4 e-14 1.32e-13 ****        \r\n## 3 len   1      2         20    20     -4.90  37.1 1.91e- 5 5.73e- 5 ****<\/code><\/pre>\n<pre class=\"r\"><code># Add p-values of `stat.test` and `stat.test2`\r\n# 1. Add stat.test\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"dose\", dodge = 0.8)\r\nbxp.complex &lt;- bxp + stat_pvalue_manual(\r\n  stat.test,  label = \"p\", tip.length = 0\r\n  )\r\n# 2. Add stat.test2\r\n# Add more space between brackets using `step.increase` \r\nstat.test2 &lt;- stat.test2 %&gt;% add_xy_position(x = \"dose\")\r\nbxp.complex &lt;- bxp.complex + \r\n  stat_pvalue_manual(\r\n    stat.test2,  label = \"p\", tip.length = 0.02,\r\n    step.increase = 0.05\r\n  ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))\r\n\r\n# 3. Display the plot\r\nbxp.complex <\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-grouped-box-plot-with-multiple-stat-p-values-1.png\" width=\"480\" \/><\/p>\n<\/div>\n<div id=\"grouped-bar-plots\" class=\"section level3\">\n<h3>Grouped bar plots<\/h3>\n<p>The option <code>add = \"mean_sd\"<\/code> is specified in the bar plot function for creating bar plot with error bars (mean +\/- SD). You need to specify the same summary statistics function to auto-compute p-value labels positions in <code>add_xy_position()<\/code> using the option <code>fun<\/code>.<\/p>\n<div id=\"dodged-bar-plots\" class=\"section level4\">\n<h4>Dodged bar plots<\/h4>\n<pre class=\"r\"><code># Create a bar plot with error bars (mean +\/- sd)\r\nbp &lt;- ggbarplot(\r\n  df, x = \"dose\", y = \"len\", add = \"mean_sd\", \r\n  color= \"supp\", palette = c(\"#00AFBB\", \"#E7B800\"),\r\n  position = position_dodge(0.8)\r\n  )\r\n# Add p-values onto the bar plots\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(fun = \"mean_sd\", x = \"dose\", dodge = 0.8) \r\nbp + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", tip.length = 0.01\r\n  )\r\n\r\n# Move down the brackets using `bracket.nudge.y`\r\nbp + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", tip.length = 0,\r\n  bracket.nudge.y = -2\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-bar-plots-dodged-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-bar-plots-dodged-2.png\" width=\"307.2\" \/><\/p>\n<\/div>\n<div id=\"stacked-bar-plots\" class=\"section level4\">\n<h4>Stacked bar plots<\/h4>\n<pre class=\"r\"><code># Create a bar plot with error bars (mean +\/- sd)\r\nbp2 &lt;- ggbarplot(\r\n  df, x = \"dose\", y = \"len\", add = \"mean_sd\", \r\n  color = \"supp\", palette = c(\"#00AFBB\", \"#E7B800\"),\r\n  position = position_stack()\r\n  )\r\n\r\n# Add p-values onto the bar plots\r\n# Specify the p-value y position manually\r\nbp2 + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", tip.length = 0.01,\r\n  x = \"dose\", y.position = c(30, 45, 60)\r\n  )\r\n\r\n# Auto-compute the p-value y position\r\n# Adjust vertically label positions using vjust\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(fun = \"mean_sd\", x = \"dose\", stack = TRUE) \r\nbp2 + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", \r\n  remove.bracket = TRUE, vjust = -0.2\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-bar-plots-stacked-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-bar-plots-stacked-2.png\" width=\"307.2\" \/><\/p>\n<\/div>\n<\/div>\n<div id=\"grouped-line-plots\" class=\"section level3\">\n<h3>Grouped line plots<\/h3>\n<pre class=\"r\"><code># Create a line plot with error bars (mean +\/- sd)\r\nlp &lt;- ggline(\r\n  df, x = \"dose\", y = \"len\", add = \"mean_sd\", \r\n  color = \"supp\", palette = c(\"#00AFBB\", \"#E7B800\")\r\n  )\r\n\r\n# Add p-values onto the line plots\r\n# Remove brackets using linetype = \"blank\"\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(fun = \"mean_sd\", x = \"dose\") \r\nlp + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", \r\n  tip.length = 0, linetype  = \"blank\"\r\n  )\r\n\r\n# Move down the significance levels using vjust\r\nlp + stat_pvalue_manual(\r\n  stat.test,  label = \"p.adj.signif\", \r\n  linetype  = \"blank\", vjust = 2\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-line-plots-1.png\" width=\"307.2\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-two-grouped-line-plots-2.png\" width=\"307.2\" \/><\/p>\n<\/div>\n<div id=\"pairwise-comparisons\" class=\"section level3\">\n<h3>Pairwise comparisons<\/h3>\n<div id=\"statistical-tests-1\" class=\"section level4\">\n<h4>Statistical tests<\/h4>\n<p>Group the data by the <code>supp<\/code> variable and then perform multiple pairwise comparisons between the levels of the <code>dose<\/code> variable (<code>0.5<\/code>, <code>1<\/code> and <code>2<\/code>). P-values are adjusted for each group level independently.<\/p>\n<pre class=\"r\"><code>pwc &lt;- df %&gt;%\r\n  group_by(supp) %&gt;%\r\n  t_test(len ~ dose, p.adjust.method = \"bonferroni\")\r\npwc<\/code><\/pre>\n<pre><code>## # A tibble: 6 \u00d7 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.000263   ***         \r\n## 2 OJ    len   0.5    2         10    10     -7.82  14.7 0.00000132   0.00000396 ****        \r\n## 3 OJ    len   1      2         10    10     -2.25  15.8 0.039        0.118      ns          \r\n## 4 VC    len   0.5    1         10    10     -7.46  17.9 0.000000681  0.00000204 ****        \r\n## 5 VC    len   0.5    2         10    10    -10.4   14.3 0.0000000468 0.00000014 ****        \r\n## 6 VC    len   1      2         10    10     -5.47  13.6 0.0000916    0.000275   ***<\/code><\/pre>\n<\/div>\n<div id=\"create-plots-with-the-pairwise-comparison-p-values\" class=\"section level4\">\n<h4>Create plots with the pairwise-comparison p-values<\/h4>\n<p>The argument <code>step.group.by<\/code> is used to group the brackets by a variable.<\/p>\n<pre class=\"r\"><code># Box plot\r\npwc &lt;- pwc %&gt;% add_xy_position(x = \"dose\")\r\nbxp +\r\n  stat_pvalue_manual(\r\n    pwc, color = \"supp\", step.group.by = \"supp\",\r\n    tip.length = 0, 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\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-1.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Adjust brackets x position by the grouping variable\r\n# Specify the group option in add_xy_position()\r\npwc &lt;- pwc %&gt;% add_xy_position(x = \"dose\", group = \"supp\")\r\nbxp +\r\n  stat_pvalue_manual(\r\n    pwc, color = \"supp\", step.group.by = \"supp\",\r\n    tip.length = 0, 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\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-2.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Bar plots\r\npwc &lt;- pwc %&gt;% add_xy_position(x = \"dose\", fun = \"mean_sd\", dodge = 0.8)\r\nbp + stat_pvalue_manual(\r\n  pwc, color = \"supp\", step.group.by = \"supp\",\r\n  tip.length = 0, 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\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-3.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Line plots\r\npwc &lt;- pwc %&gt;% add_xy_position(x = \"dose\", fun = \"mean_sd\")\r\nlp + stat_pvalue_manual(\r\n  pwc, color = \"supp\", step.group.by = \"supp\",\r\n  tip.length = 0, 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\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-4.png\" width=\"480\" \/><\/p>\n<\/div>\n<div id=\"show-the-p-values-for-a-subset-of-comparisons\" class=\"section level4\">\n<h4>Show the p-values for a subset of comparisons<\/h4>\n<p>In the example below, p-values are show for the pairwise-comparisons in the <code>VC<\/code> group:<\/p>\n<pre class=\"r\"><code># Bar plots (dodged)\r\n# Take a subset of the pairwise comparisons\r\npwc.filtered &lt;- pwc %&gt;% \r\n  add_xy_position(x = \"dose\", fun = \"mean_sd\", dodge = 0.8) %&gt;%\r\n  filter(supp == \"VC\")\r\nbp +\r\n  stat_pvalue_manual(\r\n    pwc.filtered, color = \"supp\", step.group.by = \"supp\",\r\n    tip.length = 0, step.increase = 0\r\n    )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-show-a-subset-of-p-values-1.png\" width=\"480\" \/><\/p>\n<pre class=\"r\"><code># Bar plots (stacked)\r\npwc.filtered &lt;- pwc %&gt;% \r\n  add_xy_position(x = \"dose\", fun = \"mean_sd\", stack = TRUE) %&gt;%\r\n  filter(supp == \"VC\")\r\nbp2 +\r\n  stat_pvalue_manual(\r\n    pwc.filtered, color = \"supp\", step.group.by = \"supp\",\r\n    tip.length = 0, 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\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-show-a-subset-of-p-values-2.png\" width=\"480\" \/><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"three-groups-by-x-position\" class=\"section level2\">\n<h2>Three groups by x position<\/h2>\n<div id=\"simple-plots\" class=\"section level3\">\n<h3>Simple plots<\/h3>\n<pre class=\"r\"><code># Box plots\r\nbxp &lt;- ggboxplot(\r\n  df, x = \"supp\", y = \"len\", fill = \"dose\",\r\n  palette = \"npg\"\r\n  )\r\nbxp\r\n\r\n# Bar plots\r\nbp &lt;- ggbarplot(\r\n  df, x = \"supp\", y = \"len\", fill = \"dose\",\r\n  palette = \"npg\", add = \"mean_sd\",\r\n  position = position_dodge(0.8)\r\n  )\r\nbp<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-three-grouped-plots-simple-1.png\" width=\"288\" \/><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-three-grouped-plots-simple-2.png\" width=\"288\" \/><\/p>\n<\/div>\n<div id=\"perform-all-pairwise-comparisons\" class=\"section level3\">\n<h3>Perform all pairwise comparisons<\/h3>\n<p>Group by the <code>supp<\/code> variable and then perform pairwise comparisons between the levels of <code>dose<\/code> variable.<\/p>\n<p>Statistical test:<\/p>\n<pre class=\"r\"><code>stat.test &lt;- df %&gt;%\r\n  group_by(supp) %&gt;%\r\n  t_test(len ~ dose)\r\nstat.test <\/code><\/pre>\n<pre><code>## # A tibble: 6 \u00d7 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.000176   ***         \r\n## 2 OJ    len   0.5    2         10    10     -7.82  14.7 0.00000132   0.00000396 ****        \r\n## 3 OJ    len   1      2         10    10     -2.25  15.8 0.039        0.039      *           \r\n## 4 VC    len   0.5    1         10    10     -7.46  17.9 0.000000681  0.00000136 ****        \r\n## 5 VC    len   0.5    2         10    10    -10.4   14.3 0.0000000468 0.00000014 ****        \r\n## 6 VC    len   1      2         10    10     -5.47  13.6 0.0000916    0.0000916  ****<\/code><\/pre>\n<p>Add the p-values onto the plots:<\/p>\n<ul>\n<li>The argument <code>bracket.nudge.y<\/code> is used to move down the brackets.<\/li>\n<li>The ggplot2 function <code>scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code> is used to <a href=\"https:\/\/www.datanovia.com\/en\/blog\/ggplot-facet-how-to-add-space-between-labels-on-the-top-of-the-chart-and-the-plot-border\/\">add more spaces between labels and the plot top border<\/a><\/li>\n<\/ul>\n<pre class=\"r\"><code># Box plots with p-values\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"supp\", dodge = 0.8)\r\nbxp + \r\n  stat_pvalue_manual(\r\n    stat.test, label = \"p.adj\", tip.length = 0.01,\r\n    bracket.nudge.y = -2\r\n    ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-ggplot-three-grouped-plots-pairwise-comparisons-p-values-1.png\" width=\"384\" \/><\/p>\n<pre class=\"r\"><code># Bar plots with p-values\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"supp\", fun = \"mean_sd\", dodge = 0.8)\r\nbp + \r\n  stat_pvalue_manual(\r\n    stat.test, label = \"p.adj\", tip.length = 0.01,\r\n    bracket.nudge.y = -2\r\n    ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-ggplot-three-grouped-plots-pairwise-comparisons-p-values-2.png\" width=\"384\" \/><\/p>\n<\/div>\n<div id=\"pairwise-comparisons-against-a-reference-group\" class=\"section level3\">\n<h3>Pairwise comparisons against a reference group<\/h3>\n<p>Statistical tests:<\/p>\n<pre class=\"r\"><code>stat.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 \u00d7 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 with p-values\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"supp\", dodge = 0.8)\r\nbxp + \r\n  stat_pvalue_manual(\r\n    stat.test, label = \"p.adj\", tip.length = 0.01,\r\n    bracket.nudge.y = -2\r\n    ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-against-reference-1.png\" width=\"384\" \/><\/p>\n<pre class=\"r\"><code># Show only significance levels\r\n# Move down significance symbols using vjust\r\nbxp + stat_pvalue_manual(\r\n  stat.test, x = \"supp\",  label = \"p.adj.signif\", \r\n  tip.length = 0.01, vjust = 2\r\n  )<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-against-reference-2.png\" width=\"384\" \/><\/p>\n<pre class=\"r\"><code># Bar plots with p-values\r\nstat.test &lt;- stat.test %&gt;%\r\n  add_xy_position(x = \"supp\", fun = \"mean_sd\", dodge = 0.8)\r\nbp + \r\n  stat_pvalue_manual(\r\n    stat.test, label = \"p.adj\", tip.length = 0.01,\r\n    bracket.nudge.y = -2\r\n    ) +\r\n  scale_y_continuous(expand = expansion(mult = c(0, 0.1)))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/ggpubr\/figures\/058-add-p-values-to-a-grouped-ggplot-pairwise-comparisons-against-reference-3.png\" width=\"384\" \/><\/p>\n<\/div>\n<\/div>\n<div id=\"conclusion\" class=\"section level2\">\n<h2>Conclusion<\/h2>\n<p>This article describes how to add p-values onto grouped ggplots, such as box plots, bar plots and line plots. See other related frequently questions: <a href=\"https:\/\/www.datanovia.com\/en\/blog\/tag\/ggpubr\/\">ggpubr FAQ<\/a>.<\/p>\n<\/div>\n<\/div>\n<p><!--end rdoc--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article describes how to compute and automatically add p-values onto grouped ggplots using the ggpubr and the rstatix R packages. You will learn how to: Add p-values onto grouped [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":16478,"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-16475","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>How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - 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\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - Datanovia\" \/>\n<meta property=\"og:description\" content=\"This article describes how to compute and automatically add p-values onto grouped ggplots using the ggpubr and the rstatix R packages. You will learn how to: Add p-values onto grouped [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\" \/>\n<meta property=\"og:site_name\" content=\"Datanovia\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-26T10:04:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-07T21:13:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\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=\"16 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\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\"},\"author\":{\"name\":\"Alboukadel\",\"@id\":\"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e\"},\"headline\":\"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package\",\"datePublished\":\"2020-05-26T10:04:39+00:00\",\"dateModified\":\"2022-12-07T21:13:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\"},\"wordCount\":914,\"commentCount\":16,\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\",\"keywords\":[\"ggpubr\"],\"articleSection\":[\"FAQ\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\",\"name\":\"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - Datanovia\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\",\"datePublished\":\"2020-05-26T10:04:39+00:00\",\"dateModified\":\"2022-12-07T21:13:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png\",\"width\":960,\"height\":768,\"caption\":\"058-add-p-values-to-a-grouped-ggplot-logo-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.datanovia.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package\"}]},{\"@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":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - 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\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/","og_locale":"en_US","og_type":"article","og_title":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - Datanovia","og_description":"This article describes how to compute and automatically add p-values onto grouped ggplots using the ggpubr and the rstatix R packages. You will learn how to: Add p-values onto grouped [&hellip;]","og_url":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/","og_site_name":"Datanovia","article_published_time":"2020-05-26T10:04:39+00:00","article_modified_time":"2022-12-07T21:13:28+00:00","og_image":[{"width":960,"height":768,"url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png","type":"image\/png"}],"author":"Alboukadel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alboukadel","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#article","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/"},"author":{"name":"Alboukadel","@id":"https:\/\/www.datanovia.com\/en\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e"},"headline":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package","datePublished":"2020-05-26T10:04:39+00:00","dateModified":"2022-12-07T21:13:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/"},"wordCount":914,"commentCount":16,"publisher":{"@id":"https:\/\/www.datanovia.com\/en\/#organization"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png","keywords":["ggpubr"],"articleSection":["FAQ"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/","url":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/","name":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package - Datanovia","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png","datePublished":"2020-05-26T10:04:39+00:00","dateModified":"2022-12-07T21:13:28+00:00","breadcrumb":{"@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#primaryimage","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2020\/05\/058-add-p-values-to-a-grouped-ggplot-logo-1.png","width":960,"height":768,"caption":"058-add-p-values-to-a-grouped-ggplot-logo-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.datanovia.com\/en\/blog\/how-to-add-p-values-onto-a-grouped-ggplot-using-the-ggpubr-r-package\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.datanovia.com\/en\/"},{"@type":"ListItem","position":2,"name":"How to Add P-Values onto a Grouped GGPLOT using the GGPUBR R Package"}]},{"@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\/16475","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=16475"}],"version-history":[{"count":7,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts\/16475\/revisions"}],"predecessor-version":[{"id":31582,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/posts\/16475\/revisions\/31582"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media\/16478"}],"wp:attachment":[{"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/media?parent=16475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/categories?post=16475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/wp-json\/wp\/v2\/tags?post=16475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}