<p><div><div><div><div data-width="100" data-show-faces="false" data-send="true" data-layout="button_count" data-height="21" data-href="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/"></div></div><div><a data-url="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/" data-counturl="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/" data-count="horizontal" data-text="facet_plot: a general solution to associate data with phylogenetic tree" class="twitter-share-button" data-via="rbloggers" href="https://twitter.com/share"></a></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://guangchuangyu.github.io/2016/10/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree"> R on Guangchuang YU</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p><a target="_blank" rel="nofollow" href="https://guangchuangyu.github.io/ggtree">ggtree</a> provides <code>gheatmap</code> for visualizing heatmap with phylogenetic tree and <code>msaplot</code> for visualizing multiple sequence alignment with phylogenetic tree.</p>
<p>We may have different data types and want to visualize and align them with the tree. For example, <code>dotplot</code> of SNP site (e.g. using <code>geom_point(shape='|')</code>), <code>barplot</code> of trait values (e.g. using <code>geom_barh(stat='identity')</code>) <em>et al</em>.</p>
<p>To make it easy to associate different types of data with phylogenetic tree, I implemented the <code>facet_plot</code> function which accepts a <code>geom</code> function to draw the input <code>data.frame</code> and display it in an additional <code>panel</code>.</p>
<blockquote class="twitter-tweet"><p dir="ltr" lang="en">associate tree with different type of data by <a target="_blank" rel="nofollow" href="https://twitter.com/hashtag/ggtree?src=hash">#ggtree</a> <a target="_blank" rel="nofollow" href="https://t.co/6w755VWytZ">https://t.co/6w755VWytZ</a> <a target="_blank" rel="nofollow" href="https://t.co/K8WViEi13E">pic.twitter.com/K8WViEi13E</a></p>
<p>— Guangchuang Yu (@guangchuangyu) <a target="_blank" rel="nofollow" href="https://twitter.com/guangchuangyu/status/773359054924095488">September 7, 2016</a></p></blockquote>
<p></p>
<pre><code>tr &lt;- rtree(30)
p &lt;- ggtree(tr)
d1 &lt;- data.frame(id=tr$tip.label, location=sample(c(&quot;GZ&quot;, &quot;HK&quot;, &quot;CZ&quot;), 30, replace=TRUE))
p1 &lt;- p %&lt;+% d1 + geom_tippoint(aes(color=location))
d2 &lt;- data.frame(id=tr$tip.label, val=rnorm(30, sd=3))
p2 &lt;- facet_plot(p1, panel=&quot;dot&quot;, data=d2, geom=geom_point, 
                aes(x=val), color='firebrick') + theme_tree2()
</code></pre>
<p><img alt="" src="https://i0.wp.com/guangchuangyu.github.io/blog_images/Bioconductor/ggtree/facet_plot_dot2.png?w=456&ssl=1" data-recalc-dims="1"></p>
<p>Most of the <code>geom</code> in <code>ggplot2</code> draw vertical graph object, while for associating graph object with phylogenetic tree, we need horizontal versions. Luckily, we have <a target="_blank" rel="nofollow" href="https://github.com/lionel-/ggstance">ggstance</a> which provides horizontal versions of <code>geoms</code>, including:</p>
<ul>
<li><code>geom_barh()</code></li>
<li><code>geom_histogramh()</code></li>
<li><code>geom_linerangeh()</code></li>
<li><code>geom_pointrangeh()</code></li>
<li><code>geom_errorbarh()</code></li>
<li><code>geom_crossbarh()</code></li>
<li><code>geom_boxploth()</code></li>
<li><code>geom_violinh()</code></li>
</ul>
<p>With <code>ggstance</code>, we can associate <code>barplot</code>, <code>boxplot</code> or other graphs to phylogenetic trees.</p>
<pre><code>d3 &lt;- data.frame(id = rep(tr$tip.label, each=2),
                    value = abs(rnorm(60, mean=100, sd=50)),
                    category = rep(LETTERS[1:2], 30))
p3 &lt;- facet_plot(p2, panel = 'Stacked Barplot', data = d3, 
                geom = geom_barh, 
                mapping = aes(x = value, fill = as.factor(category)), 
                stat='identity' ) 
</code></pre>
<p><img alt="" src="https://i2.wp.com/guangchuangyu.github.io/blog_images/Bioconductor/ggtree/facet_plot_bar2.png?w=456&ssl=1" data-recalc-dims="1"></p>
<pre><code>d4 = data.frame(id=rep(tr$tip.label, each=20), 
                val=as.vector(sapply(1:30, function(i) 
                                rnorm(20, mean=i)))
                )               
p4 &lt;- facet_plot(p3, panel=&quot;Boxplot&quot;, data=d4, geom_boxploth, 
            mapping = aes(x=val, group=label, color=location))                                  
</code></pre>
<p><img alt="" src="https://i1.wp.com/guangchuangyu.github.io/blog_images/Bioconductor/ggtree/facet_plot_boxplot2.png?w=456&ssl=1" data-recalc-dims="1"></p>
<h2>Citation</h2>
<p><strong>G Yu</strong>, DK Smith, H Zhu, Y Guan, TTY Lam<sup>*</sup>. <a target="_blank" rel="nofollow" href="http://onlinelibrary.wiley.com/doi/10.1111/2041-210X.12628/abstract">ggtree: an R package for visualization and annotation of phylogenetic trees with their covariates and other associated data</a>. <strong><em>Methods in Ecology and Evolution</em></strong>. <a target="_blank" rel="nofollow" href="http://dx.doi.org/10.1111/2041-210X.12628"><code>doi:10.1111/2041-210X.12628</code></a>.</p>
<p></p>
<div data-badge-popover="right" data-doi="10.1111/2041-210X.12628" data-badge-type="donut"></div>
<p><div><div><div><div data-width="55" data-show-faces="false" data-send="true" data-layout="box_count" data-height="62" data-href="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/"></div></div><div><a data-url="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/" data-counturl="https://www.r-bloggers.com/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree/" data-count="vertical" data-text="facet_plot: a general solution to associate data with phylogenetic tree" class="twitter-share-button" data-via="rbloggers" href="https://twitter.com/share"></a></div><div></div></div><div></div></div>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="https://guangchuangyu.github.io/2016/10/facet_plot-a-general-solution-to-associate-data-with-phylogenetic-tree"> R on Guangchuang YU</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a title="The R Project for Statistical Computing" rel="nofollow" href="https://www.r-project.org/">R</a> news and <a title="R tutorials" rel="nofollow" href="https://www.r-bloggers.com/?s=tutorial">tutorials</a> on topics such as: <a title="Data science" rel="nofollow" href="https://www.r-bloggers.com/?s=data%20science">Data science</a>, <a title="Big Data" rel="nofollow" href="https://www.r-bloggers.com/?s=Big%20Data">Big Data, <a title="R jobs" rel="nofollow" href="https://www.r-users.com/">R jobs</a>, visualization (<a title="ggplot and ggplot2 tutorials" rel="nofollow" href="https://www.r-bloggers.com/?s=ggplot2">ggplot2</a>, <a title="Boxplots using lattice and ggplot2 tutorials" rel="nofollow" href="https://www.r-bloggers.com/?s=boxplot">Boxplots</a>, <a title="Maps and gis" rel="nofollow" href="https://www.r-bloggers.com/?s=map">maps</a>, <a title="Animation in R" rel="nofollow" href="https://www.r-bloggers.com/?s=animation">animation</a>), programming (<a title="RStudio IDE for R" rel="nofollow" href="https://www.r-bloggers.com/?s=RStudio">RStudio</a>, <a title="Sweave and literate programming" rel="nofollow" href="https://www.r-bloggers.com/?s=sweave">Sweave</a>, <a title="LaTeX in R" rel="nofollow" href="https://www.r-bloggers.com/?s=LaTeX">LaTeX</a>, <a title="SQL and databases" rel="nofollow" href="https://www.r-bloggers.com/?s=SQL">SQL</a>, <a title="Eclipse IDE for R" rel="nofollow" href="https://www.r-bloggers.com/?s=eclipse">Eclipse</a>, <a title="git and github, Version Control System" rel="nofollow" href="https://www.r-bloggers.com/?s=git">git</a>, <a title="Large data in R using Hadoop" rel="nofollow" href="https://www.r-bloggers.com/?s=hadoop">hadoop</a>, <a title="Web Scraping of google, facebook, yahoo, twitter and more using R" rel="nofollow" href="https://www.r-bloggers.com/?s=Web+Scraping">Web Scraping</a>) statistics (<a title="Regressions and ANOVA analysis tutorials" rel="nofollow" href="https://www.r-bloggers.com/?s=regression">regression</a>, <a title="principal component analysis tutorial" rel="nofollow" href="https://www.r-bloggers.com/?s=PCA">PCA</a>, <a title="Time series" rel="nofollow" href="https://www.r-bloggers.com/?s=time+series">time series</a>, <a title="finance trading" rel="nofollow" href="https://www.r-bloggers.com/?s=trading">trading</a>) and more...
<img height="1" alt="" width="1" src="http://feeds.feedburner.com/~r/RBloggers/~4/wLdWBiASaDU"></a></div>