<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>spinogram Archives - Data Analytics</title>
	<atom:link href="https://dataanalytics.org.uk/tag/spinogram/feed/" rel="self" type="application/rss+xml" />
	<link>https://dataanalytics.org.uk/tag/spinogram/</link>
	<description>Understanding Data</description>
	<lastBuildDate>Thu, 28 Jul 2022 09:51:38 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>https://dataanalytics.org.uk/wp-content/uploads/2019/11/cropped-DA-graph-logo-2019-cyan-600-32x32.png</url>
	<title>spinogram Archives - Data Analytics</title>
	<link>https://dataanalytics.org.uk/tag/spinogram/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Spine plots using R</title>
		<link>https://dataanalytics.org.uk/spine-plots-using-r/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spine-plots-using-r</link>
		
		<dc:creator><![CDATA[gmark]]></dc:creator>
		<pubDate>Thu, 28 Jul 2022 09:50:31 +0000</pubDate>
				<category><![CDATA[Introduction-to-R]]></category>
		<category><![CDATA[data visualisation]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[plot]]></category>
		<category><![CDATA[plotting]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[spine plot]]></category>
		<category><![CDATA[spineplot]]></category>
		<category><![CDATA[spinogram]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[visualization]]></category>
		<guid isPermaLink="false">https://www.dataanalytics.org.uk/?p=39519</guid>

					<description><![CDATA[<p>Spine Plots using R A spine plot is similar to a mosaic plot and stacked bar chart. Use spineplot()  function to draw spine [&#8230;]</p>
<p>The post <a href="https://dataanalytics.org.uk/spine-plots-using-r/">Spine plots using R</a> appeared first on <a href="https://dataanalytics.org.uk">Data Analytics</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Spine Plots using R</h1>
<p>A spine plot is similar to a mosaic plot and stacked bar chart. Use <code>spineplot()</code>  function to draw spine plots using R. There are quite a number of potential arguments you can use:</p>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(x, y = NULL,
          breaks = NULL, tol.ylab = 0.05, off = NULL,
          ylevels = NULL, col = NULL,
          main = "", xlab = NULL, ylab = NULL,
          xaxlabels = NULL, yaxlabels = NULL,
          xlim = NULL, ylim = c(0, 1), axes = TRUE, ...)
</code></pre>
<p>The major parameters are:</p>
<figure>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Result</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>x</code></td>
<td>data (x,y) or formula <code>y~x</code></td>
</tr>
<tr>
<td><code>breaks</code></td>
<td>passed to <code>hist()</code></td>
</tr>
<tr>
<td><code>off</code></td>
<td>space between bars</td>
</tr>
<tr>
<td><code>ylevels</code></td>
<td>order of levels in <code>x</code></td>
</tr>
<tr>
<td><code>col</code></td>
<td>colors</td>
</tr>
<tr>
<td><code>xaxlabels</code></td>
<td>labels for x-axis</td>
</tr>
</tbody>
</table>
</figure>
<p>Your data might be in one of two forms, which affects the kind of plot you get:</p>
<ul>
<li><code>category ~ category</code> results in a spine plot (like a 100% stacked bar chart).</li>
<li><code>factor ~ numeric</code> results in a spinogram (like a histogram).</li>
</ul>
<h2>Spine plots</h2>
<p>If your data are <code>category ~ category</code> your <code>spineplot</code> results in a kind of stacked bar chart.</p>
<p>Look at the <code>VADeaths</code> dataset (a <code>matrix</code>) as an example:</p>
<pre><code class="language-r" lang="r">VADeaths
</code></pre>
<pre><code>      Rural Male Rural Female Urban Male Urban Female
50-54       11.7          8.7       15.4          8.4
55-59       18.1         11.7       24.3         13.6
60-64       26.9         20.3       37.0         19.3
65-69       41.0         30.9       54.6         35.1
70-74       66.0         54.3       71.1         50.0
</code></pre>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(VADeaths)
</code></pre>
<div id="attachment_39517" style="width: 510px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-39517" class="wp-image-39517" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39517" class="wp-caption-text">A simple spine plot from a categorical matrix</p></div>
<p>You can tinker with the graphical parameters to make the chart look &#8220;nicer&#8221;:</p>
<pre><code class="language-r" lang="r"># Custom colours, bar space, and axis labels
<span style="color: #0000ff;">spineplot</span>(VADeaths, col = terrain.colors(4),
          off = 5,
          xlab = "Age Class",
          ylab = "Category")
</code></pre>
<div id="attachment_39516" style="width: 510px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-39516" class="wp-image-39516" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-vad-col.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39516" class="wp-caption-text">Graphical parameters used to prettify a spine plot</p></div>
<p>It is hard to resize name labels, as <code>cex</code>, <code>las</code> and so on do not work! The solution is to set these parameters globally using <code>par()</code> and reset them after drawing your plot.</p>
<p>In the following example custom <code>names</code> are also used to help &#8220;fit&#8221; labels in the plot:</p>
<pre><code class="language-r" lang="r">opar &lt;- <span style="color: #0000ff;">par</span>(cex.axis = 0.6, las = 2)
<span style="color: #0000ff;">spineplot</span>(USPersonalExpenditure,
          xlab = "", ylab = "",
          xaxlabels = c("FT", "HO", "MH", "PC", "PE"))
<span style="color: #0000ff;">par</span>(opar)
</code></pre>
<div id="attachment_39515" style="width: 510px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-39515" class="wp-image-39515" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-uspe.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39515" class="wp-caption-text">Axis labels are set using par() before drawing a spineplot</p></div>
<h3>Multi-dimensional tables</h3>
<p>The <code>spineplot()</code> function can only deal with 2-dimensional objects. If you have a multi-dimensional <code>table</code> you need to collapse the table to 2D.</p>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(HairEyeColor)
</code></pre>
<pre><code>Error in spineplot.default(HairEyeColor) :
  a 2-way table has to be specified
</code></pre>
<pre><code class="language-r" lang="r">x &lt;- <span style="color: #0000ff;">margin.table</span>(HairEyeColor, margin = c(1,2))
x
</code></pre>
<pre><code>       Eye
Hair    Brown Blue Hazel Green
  Black    68   20    15     5
  Brown   119   84    54    29
  Red      26   17    14    14
  Blond     7   94    10    16
</code></pre>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(x, col = c("brown", "blue", "tan", "green"))
</code></pre>
<div id="attachment_39514" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-39514" class="wp-image-39514" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-table.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39514" class="wp-caption-text">A multi-dimensional table needs to be collapsed to 2D for plotting</p></div>
<h2>Spinograms</h2>
<p>A spinogram is a <code>spineplot</code> where the data is in the form <code>factor ~ numeric</code>. A spinogram is analogous to a histogram.</p>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(tension ~ breaks, data = warpbreaks)
</code></pre>
<div id="attachment_39518" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-39518" class="wp-image-39518" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-warp.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39518" class="wp-caption-text">A spinogram is a form of histogram</p></div>
<p>If you have <code>numeric</code> data you can use <code>factor()</code> to convert the data:</p>
<pre><code class="language-r" lang="r"># Use factor(x) to "convert" numeric
<span style="color: #0000ff;">spineplot</span>(<span style="color: #0000ff;">factor</span>(Month) ~ Ozone,
          data = airquality,
          col = <span style="color: #0000ff;">heat.colors</span>(5))
</code></pre>
<div id="attachment_39512" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-39512" class="wp-image-39512" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-air.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39512" class="wp-caption-text">A spinogram where numeric data are converted to a factor before plotting</p></div>
<p>caption: : A spinogram where numeric data are converted to a factor before plotting</p>
<p>Use the <code>breaks</code> argument as you would for <code>hist()</code> to change the breakpoints (you can enter a single <code>integer</code> or a <code>numeric vector</code>).</p>
<pre><code class="language-r" lang="r"><span style="color: #0000ff;">spineplot</span>(feed ~ weight, data = chickwts, breaks = 4)
</code></pre>
<div id="attachment_39513" style="width: 510px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-39513" class="wp-image-39513" src="https://www.dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-300x300.png" alt="" width="500" height="500" srcset="https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-300x300.png 300w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-150x150.png 150w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-768x768.png 768w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-600x600.png 600w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick-100x100.png 100w, https://dataanalytics.org.uk/wp-content/uploads/2022/06/spine-chick.png 900w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-39513" class="wp-caption-text">Using the breaks argument to alter the breakpoints in a spinogram</p></div>
<p>It can be tricky to read a spinogram and it is not trivial to add a legend for the colors. See <a href="https://www.dataanalytics.org.uk/legends-on-graphs-and-charts/">Tips and Tricks article about legends here</a>.</p>
<ul>
<li>This article is partly in support of my book <em>An Introduction to R</em> see the <a href="https://www.dataanalytics.org.uk/publications">publications page</a> for more information.</li>
<li>An Introduction to R will be published by <a href="https://pelagicpublishing.com/">Pelagic Publishing</a>. <a href="https://pelagicpublishing.com/pages/search-results-page?q=Mark%20Gardener">See all my books at Pelagic Publishing</a>.</li>
<li>For more articles visit the <a href="https://www.dataanalytics.org.uk/category/tips-and-tricks/">Tips and Tricks page</a> and look for the various categories or use the search box.</li>
<li>Visit our other site at <a href="https://www.gardenersown.co.uk/">GardenersOwn</a> for a more ecological matters.</li>
</ul>
<hr />
<p>This article is partly in support of my book <em>An Introduction to R</em> see the <a href="https://www.dataanalytics.org.uk/publications">publications page</a> for more information.</p>
<p>The post <a href="https://dataanalytics.org.uk/spine-plots-using-r/">Spine plots using R</a> appeared first on <a href="https://dataanalytics.org.uk">Data Analytics</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
