<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>R | Robin Lovelace</title><link>https://robinlovelace.net/old-site/tag/r/</link><atom:link href="https://robinlovelace.net/old-site/tag/r/index.xml" rel="self" type="application/rss+xml"/><description>R</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Thu, 18 Sep 2025 10:00:00 +0100</lastBuildDate><image><url>https://robinlovelace.net/old-site/media/icon_hu93dbabadc2a9bdd4930d1377c0b338b2_5137_512x512_fill_lanczos_center_3.png</url><title>R</title><link>https://robinlovelace.net/old-site/tag/r/</link></image><item><title>Data Science for Transport Planning: 2 day course</title><link>https://robinlovelace.net/old-site/talk/data-science-for-transport-planning-2-day-course/</link><pubDate>Thu, 18 Sep 2025 10:00:00 +0100</pubDate><guid>https://robinlovelace.net/old-site/talk/data-science-for-transport-planning-2-day-course/</guid><description>&lt;!-- https://store.leeds.ac.uk/product-catalogue/environment/transport-studies/short-courses/0925dstp2-data-science-for-transport-planning -->
&lt;h2 id="note-tickets-are-now-on-sale-get-yours-at-storeleedsacukhttpsstoreleedsacukproduct-catalogueenvironmenttransport-studiesshort-courses0925dstp2-data-science-for-transport-planning">Note: tickets are now on sale! Get yours at &lt;a href="https://store.leeds.ac.uk/product-catalogue/environment/transport-studies/short-courses/0925dstp2-data-science-for-transport-planning" target="_blank" rel="noopener">store.leeds.ac.uk&lt;/a>.&lt;/h2>
&lt;p>Based on demand, I&amp;rsquo;m running a 2-day course with colleagues teaching modern data science skills for transport planning, focussed on transport planning practitioners and transport planning researchers looking to develop their skills for real-world applications.&lt;/p>
&lt;p>Any questions welcome, looking forward to seeing you at the course!&lt;/p></description></item><item><title>Inaugural Lecture: Data Science for Future-Proof Transport Planning</title><link>https://robinlovelace.net/old-site/talk/inaugural-lecture-data-science-for-future-proof-transport-planning/</link><pubDate>Thu, 08 May 2025 16:30:00 +0100</pubDate><guid>https://robinlovelace.net/old-site/talk/inaugural-lecture-data-science-for-future-proof-transport-planning/</guid><description>&lt;!-- ![demo](image.png) --></description></item><item><title>Mapping, classifying, and integrating diverse street network datasets</title><link>https://robinlovelace.net/old-site/talk/mapping-classifying-and-integrating-diverse-street-network-datasets/</link><pubDate>Thu, 24 Apr 2025 14:30:00 +0100</pubDate><guid>https://robinlovelace.net/old-site/talk/mapping-classifying-and-integrating-diverse-street-network-datasets/</guid><description>&lt;p>See a video from the talk below:&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/6mimz_gN-V8?si=L7Beog5C39LWCfUl" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>&lt;/iframe></description></item><item><title>Street Networks in R</title><link>https://robinlovelace.net/old-site/publication/gilardi-street-2020/</link><pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate><guid>https://robinlovelace.net/old-site/publication/gilardi-street-2020/</guid><description/></item><item><title>CycleStreets.net in the Propensity to Cycle Tool</title><link>https://robinlovelace.net/old-site/post/2016-12-21-cyclestreets-pct/</link><pubDate>Wed, 21 Dec 2016 00:00:00 +0000</pubDate><guid>https://robinlovelace.net/old-site/post/2016-12-21-cyclestreets-pct/</guid><description>&lt;p>After 2 years in the making, the &lt;a href="https://www.jtlu.org/index.php/jtlu/article/view/862/824" target="_blank" rel="noopener">paper&lt;/a> describing the Propensity to Cycle Tool (PCT), and the thinking behind it, has finally been published (Lovelace et al. 2016). The PCT is an online tool for helping to decide where to prioritise cycling policies such as new cycle paths.&lt;/p>
&lt;p>The PCT would not have been possible without CycleStreets.net, so as well as describing the PCT and it&amp;rsquo;s use of their routing services, this article serves as a big Thank You from PCT to CycleStreets.net.&lt;/p>
&lt;h2 id="what-is-the-propensity-to-cycle-tool">What is the Propensity to Cycle Tool?&lt;/h2>
&lt;p>For those new to the PCT, it&amp;rsquo;s an online tool for helping to decide where to prioritise cycling policies such as new cycle paths. It lives at &lt;a href="http://www.pct.bike" target="_blank" rel="noopener">http://www.pct.bike&lt;/a> - check it out!&lt;/p>
&lt;p>The context of its development is explained in the accompanying video on that page. This article reports how the tool itself works and how it uses data from CycleStreets.net.&lt;/p>
&lt;p>The PCT is best understood by using it to explore current cycling levels, at regional, area, desire line, route and route network levels. We will take a look at how the PCT works at each of these levels, after a brief look at the scenario results at the regional level (the senarios are described in more detail in the &lt;a href="https://www.jtlu.org/index.php/jtlu/article/view/862/824" target="_blank" rel="noopener">paper&lt;/a>).&lt;/p>
&lt;p>Under the 2011 Census scenario, the PCT represents levels of cycling to work based on the Census. This is a reasonable proxy for levels of utility cycling overall. We used origin-destination (OD) data from the Census as the basis of the PCT as this is best publicly available dataset on English travel patterns. The input data is described in the &lt;a href="https://www.jtlu.org/index.php/jtlu/article/view/862" target="_blank" rel="noopener">paper&lt;/a> and can be freely downloaded from the official &lt;a href="http://wicid.ukdataservice.ac.uk/" target="_blank" rel="noopener">http://wicid.ukdataservice.ac.uk/&lt;/a> website.&lt;/p>
&lt;h3 id="the-regional-picture-and-scenarios">The regional picture and scenarios&lt;/h3>
&lt;p>The first thing the user sees on the front page is a map of England, broken into 44 regions:&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/figures/regions1.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>We used deliberately large regions because successful cycling plans should be strategic and joined up, covering both large areas and large spans of time. This discourages the stop-start investment plans that have typified funding for active travel.&lt;/p>
&lt;p>By hovering over different regions, the user can see what the current level of cycling to work is. We can discover that West Yorkshire has a low current level of cycling to work, 1.3% in the 2011 census, and that Cambridgeshire has a relatively high (but low by Dutch standards) level of cycling of 9.7%.&lt;/p>
&lt;p>An exciting feature of the PCT is its ability to allow the user to imagine &amp;lsquo;cycling futures&amp;rsquo;. This can be seen on the front page map by clicking on the different scenarios (set to Census 2011 by default). We can see, for example, that under the Government Target to double cycling levels by 2025, West Yorkshire&amp;rsquo;s level would rise to 3.3% (more than a doubling) whereas Cambridgeshire would see cycling levels grow to 13.7% (a larger rise in absolute terms):&lt;/p>
&lt;p>&lt;img src="https://github.com/npct/pct/blob/master/figures/regions2.png?raw=true" title="plot of chunk unnamed-chunk-2" alt="plot of chunk unnamed-chunk-2" width="50%" />&lt;img src="https://github.com/npct/pct/blob/master/figures/regions3.png?raw=true" title="plot of chunk unnamed-chunk-2" alt="plot of chunk unnamed-chunk-2" width="50%" />&lt;/p>
&lt;p>Under the Go Dutch scenarios, these regions would see 23.1 and 13.5% of people cycling to work, respectively. This represents a huge leveling-out of cycling levels across the country, but still highlights the fact that some regions have higher cycling potentials than others, due to average trip distances and levels of hilliness.&lt;/p>
&lt;h2 id="cycling-levels-at-the-area-level">Cycling levels at the area level&lt;/h2>
&lt;p>To launch the PCT for a region, click on it. Try clicking on West Yorkshire. You should be presented with the following image, which shows the area-based level of cycling to work from the 2011 Census. (When using the PCT, it is worth remembering that the visualisations work for every scenario.)&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/figures/west-yorkshire-front.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>This shows that West Yorkshire has very low levels of cycling to work, hovering around 1% to 2% in most places. This suggests strongly that the region has low levels of utility cycling overall (despite the successes of the region&amp;rsquo;s sport cyclists). There is a cluster of zones with a higher level of cycling to the north of Leeds city centre (around Headingly) but even there the percentage of people cycling as their main mode of travel to work does not exceed 5%.&lt;/p>
&lt;h2 id="cycling-potential-at-the-desire-line-level">Cycling potential at the desire line level&lt;/h2>
&lt;p>This is all useful information, especially when we look at how the cycling potential could shift in the future. However, it provides little information about where current and future cyclists actually go. This is where the desire line level can be useful. This can be selected by clicking on the Straight Lines option from the Cycling Flows dropdown menu. The results (zoomed in for Leeds) are shown in the figures below (see Figure 3 in the paper).&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/flow-model/od-data-leeds.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/figures/leeds-desire-godutch.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>What the above figures show is that as the level of cycling increases in a city, the spatial distribution of cycling can be expected to change. Under current conditions (be they related to socio-demographics or infrastructure or other factors), cycling in Leeds is dominated by the travel corridor to the north of the city centre. Yet there are clearly many short trips taking place from the south into the centre, as illustrated by the high cycling potential south of the city under the Go Dutch scenario.&lt;/p>
&lt;h2 id="allocating-cycling-potential-to-the-route-network">Allocating cycling potential to the route network&lt;/h2>
&lt;p>This is where CycleStreets.net comes into play.&lt;/p>
&lt;p>We know how many people go from A to B by cycling from Census data. But we have very little idea of how they are likely to travel. This is where the routing algorithm of CycleStreets.net comes in handy. We used their &lt;a href="https://www.cyclestreets.net/api/apply/" target="_blank" rel="noopener">routing API&lt;/a> to estimate the &amp;lsquo;fastest&amp;rsquo; route for all short (well, up to 20 km in Euclidean distance) desire lines in England.&lt;/p>
&lt;p>Not only does CycleStreets.net allow us to find all the fastest routes, a good indication of where new infrastructure should be built as people (especially women and elderly) have a strong preference for cycling along the most direct routes.&lt;/p>
&lt;p>The results of all this routing work is illustrated in the future below, which shows the fastest and quietest routes associated with the top cycled routes in Leeds.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/flow-model/od-data-fast-quiet.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>Interestingly, the big fat line up to the north-west is Otley Road, well-known to have very high level of cycling. This also shows up in Strava data as having high current levels of cycling:&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://github.com/npct/pct/blob/master/figures/pct-vs-strava-for-leeds.png?raw=true" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>This is not formal validation but it is a good sign that the PCT and other data sources line-up for the current level of cycling. The big question is whether the PCT&amp;rsquo;s estimates of cycling levels under various cycling futures, including Go Dutch.&lt;/p>
&lt;p>Here is not the place to answer such a question. Only the passage of time, and commitment from people (perhaps informed by models such as the PCT) to sustainable travel will help answer that one.&lt;/p>
&lt;p>There is much more to say about the use of CycleStreets.net in the PCT but it gets rather technical very quickly.
Suffice to say at this stage that it involved writing lots of code in R, a language for statistical programming, and that this has now resulted in the publication of &lt;strong>stplanr&lt;/strong>, &lt;a href="https://github.com/ropensci/stplanr" target="_blank" rel="noopener">an R package for sustainable transport&lt;/a>.
(For more on how to
&lt;a href="https://cran.r-project.org/" target="_blank" rel="noopener">install R&lt;/a> and (for bells and whistles) RStudio, which this blog post was written in, please see the relevant sections of the book &lt;a href="https://csgillespie.github.io/efficientR/set-up.html#installing-r" target="_blank" rel="noopener">Efficent R Programming&lt;/a> (Gillespie and Lovelace, 2016).)
With R installed, &lt;strong>stplanr&lt;/strong> can be installed with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">install.packages&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;stplanr&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>With this package installed, you can start using the CycleStreets.net routing algorithm with the following function:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">stplanr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">route&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">route_cyclestreet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">from&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;Leeds&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;Cambridge&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>which results in spatial data, which can be visualised as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">leaflet&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">leaflet&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">%&amp;gt;%&lt;/span> &lt;span class="nf">addTiles&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">%&amp;gt;%&lt;/span> &lt;span class="nf">addPolylines&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">route&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div> &lt;iframe src="http://robinlovelace.net/leeds-cam-map.html">&lt;/iframe>
&lt;p>There is much more I could say about the technical side of things but at the request of the editors I will leave it there for now. For more info please see the &lt;a href="https://github.com/ropensci/stplanr/blob/master/vignettes/stplanr-paper.Rmd" target="_blank" rel="noopener">&lt;strong>stplanr&lt;/strong> vignette&lt;/a>.&lt;/p>
&lt;p>I plan to follow this overview article up with a more technical blog post in the New Year. Watch this space!&lt;/p>
&lt;h2 id="reference">Reference&lt;/h2>
&lt;p>Lovelace, R., Goodman, A., Aldred, R., Berkoff, N., Abbas, A., &amp;amp; Woodcock, J. (2016). The Propensity to Cycle Tool: An open source online system for sustainable transport planning. Journal Of Transport And Land Use, 0. doi:http://dx.doi.org/10.5198/jtlu.2016.862&lt;/p></description></item><item><title>Coxcomb plots and 'spiecharts' in R</title><link>https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-r/</link><pubDate>Fri, 27 Dec 2013 00:00:00 +0000</pubDate><guid>https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-r/</guid><description>&lt;p>After switching to a new site I decided to revive some old posts.
I found this one that was written back 7 years ago (in January 2021 when this update was written), back in December 2013.
The results of the book are now published in the book &lt;a href="https://www.routledge.com/Low-Impact-Living-A-Field-Guide-to-Ecological-Affordable-Community-Building/Chatterton/p/book/9780415661614">Low Impact Living: A Field Guide to Ecological, Affordable Community Building&lt;/a> (Chatterton, 2015, for more info on the Lilac project in particular and cohousing in general see &lt;a href="https://www.lilac.coop/resources/">lilac.coop/resources/&lt;/a>).
I was amazed to find that, with some tweaks, the &lt;code>ggplot2&lt;/code> code still ran.&lt;/p>
&lt;p>I was contacted recently by a housing organisation who wanted
an attractive visualisation of their finances, arranged in a circular
form. Because there were two 4 continuous variables to include, all
of which were proportions of each other, the client suggested a plot
similar to a pie chart, but with each segment extending out a different
radius from the segment. I realised later that what I had been asked to
make was a modified &lt;a href="http://en.wikipedia.org/wiki/Coxcomb_diagram#Polar_area_diagram">coxcomb&lt;/a>
plot, invented by
&lt;a href="http://en.wikipedia.org/wiki/Florence_Nightingale">Florence Nightingale&lt;/a>
to represent statistics on cause of death during the Crimean War.
In fact, I had been asked to make a “&lt;a href="http://www.cs.huji.ac.il/~feit/papers/Spie03TR.pdf">spie chart&lt;/a>.”
This post demonstrates, for the first time to my knowledge, how it can be done
using ggplot2. A reproducible example of this, including sample data input, can be
found on the project’s github repository: &lt;a href="https://github.com/Robinlovelace/lilacPlot" class="uri">https://github.com/Robinlovelace/lilacPlot&lt;/a> . Please fork and attribute as appropriate!&lt;/p>
&lt;div id="reading-and-looking-at-the-data" class="section level2">
&lt;h2>Reading and looking at the data&lt;/h2>
&lt;p>This is the original dataset I was given:&lt;/p>
&lt;pre class="r">&lt;code>u &amp;lt;- &amp;quot;https://github.com/Robinlovelace/lilacPlot/raw/master/F2.csv&amp;quot;
f &amp;lt;- read.csv(u)
knitr::kable(f[1:3, ])&lt;/code>&lt;/pre>
&lt;table>
&lt;thead>
&lt;tr class="header">
&lt;th align="left">H&lt;/th>
&lt;th align="right">Value&lt;/th>
&lt;th align="right">Value.P&lt;/th>
&lt;th align="right">Allocation&lt;/th>
&lt;th align="right">Deposit&lt;/th>
&lt;th align="right">Captial&lt;/th>
&lt;th align="right">Debt&lt;/th>
&lt;th align="right">Cap&lt;/th>
&lt;th align="right">Contribution&lt;/th>
&lt;th align="right">Repayments&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr class="odd">
&lt;td align="left">q&lt;/td>
&lt;td align="right">163827&lt;/td>
&lt;td align="right">0.065&lt;/td>
&lt;td align="right">0.979&lt;/td>
&lt;td align="right">16382&lt;/td>
&lt;td align="right">147445&lt;/td>
&lt;td align="right">0&lt;/td>
&lt;td align="right">2457.405&lt;/td>
&lt;td align="right">1287.24&lt;/td>
&lt;td align="right">0.00&lt;/td>
&lt;/tr>
&lt;tr class="even">
&lt;td align="left">a&lt;/td>
&lt;td align="right">165994&lt;/td>
&lt;td align="right">0.066&lt;/td>
&lt;td align="right">1.022&lt;/td>
&lt;td align="right">16599&lt;/td>
&lt;td align="right">5488&lt;/td>
&lt;td align="right">138847&lt;/td>
&lt;td align="right">2489.910&lt;/td>
&lt;td align="right">208.02&lt;/td>
&lt;td align="right">208.02&lt;/td>
&lt;/tr>
&lt;tr class="odd">
&lt;td align="left">z&lt;/td>
&lt;td align="right">159425&lt;/td>
&lt;td align="right">0.063&lt;/td>
&lt;td align="right">0.933&lt;/td>
&lt;td align="right">15943&lt;/td>
&lt;td align="right">76632&lt;/td>
&lt;td align="right">63601&lt;/td>
&lt;td align="right">2391.375&lt;/td>
&lt;td align="right">995.46&lt;/td>
&lt;td align="right">995.46&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Without worrying too much about the details, the basics of the dataset are
as follows:&lt;/p>
&lt;ul>
&lt;li>One observation per row, these will later be bars on the box plot&lt;/li>
&lt;li>Two components of data - captital and revenue&lt;/li>
&lt;li>Different orders of magnitude: some data is in absolute monetary terms, some in percentages&lt;/li>
&lt;/ul>
&lt;p>Base on the above points, a prerequisite was to create preliminary plots and manipulate the
data so it would better fit in a coxcomb plot.&lt;/p>
&lt;p>The first stage, however, is to demonstrate how the addition of
&lt;code>coord_polar&lt;/code> to a barchart can conver it into a pie chart:&lt;/p>
&lt;pre class="r">&lt;code>library(ggplot2)
(p &amp;lt;- ggplot(f, aes(x = H, y = Allocation)) + geom_bar(color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;,
width = 1))&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-2-1.png" width="672" />&lt;/p>
&lt;div class="figure">
&lt;img src="" alt="" />
&lt;p class="caption">plot of chunk unnamed-chunk-2&lt;/p>
&lt;/div>
&lt;pre class="r">&lt;code>p + coord_polar()&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-3-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-2](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-22.png) -->
&lt;p>The above example works well, but notice that all the bars are of equal widths.
What we want is to be proportional to a value (variable “Value”) of each observation.
To do this we use the age-old function &lt;code>cumsum&lt;/code>, as described in an
answer to a &lt;a href="http://stackoverflow.com/questions/20688376/how-to-make-variable-bar-widths-in-ggplot2-not-overlap-or-gap">stackexchange question&lt;/a>.&lt;/p>
&lt;pre class="r">&lt;code>w &amp;lt;- f$Value
pos &amp;lt;- 0.5 * (cumsum(w) + cumsum(c(0, w[-length(w)])))
(p &amp;lt;- ggplot(f, aes(x = pos)) + geom_bar(aes(y = Allocation), width = w, color = &amp;quot;black&amp;quot;,
stat = &amp;quot;identity&amp;quot;))&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-4-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-3](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-31.png) -->
&lt;pre class="r">&lt;code>p + coord_polar(theta = &amp;quot;x&amp;quot;) + scale_x_continuous(labels = f$H, breaks = pos)&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-5-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-3](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-32.png) -->
&lt;p>Finally a spie chart has been created. After that revelation, it was essentially about adding the ‘bells and
whistles’, including a 10% line to represent how much more or less than their share each observation was
paying.&lt;/p>
&lt;/div>
&lt;div id="adding-the-10" class="section level2">
&lt;h2>Adding the 10 %&lt;/h2>
&lt;pre class="r">&lt;code>f$Deposit/f$Value&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## [1] 0.09999573 0.09999759 0.10000314 0.09999837 0.10000120 0.10000000
## [7] 0.10000311 0.10000085 0.10000511 0.10000356 0.09999676 0.09999700
## [13] 0.09999812 0.10000511 0.10000085 0.10000240 0.10000000 0.10000694
## [19] 0.09999901 0.09999883&lt;/code>&lt;/pre>
&lt;pre class="r">&lt;code># add 10% in there
p &amp;lt;- ggplot(f)
p + geom_bar(aes(x = pos, y = Allocation), width = w, color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;) +
geom_bar(aes(x = pos, y = 0.1), width = w, color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;green&amp;quot;) + coord_polar()&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-7-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-4](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-41.png) -->
&lt;pre class="r">&lt;code># make proportional to area
f$Allo &amp;lt;- sqrt(f$Allocation)
p &amp;lt;- ggplot(f)
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;) +
geom_bar(aes(x = pos, y = sqrt(0.1), width = w), color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;green&amp;quot;) + coord_polar()&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-8-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-4](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-42.png) -->
&lt;pre class="r">&lt;code># add capital
capital &amp;lt;- (f$Captial + f$Deposit)/(f$Value) * f$Allocation
capital &amp;lt;- sqrt(capital)
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;) +
geom_bar(aes(x = pos, y = capital, width = w), color = &amp;quot;black&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;red&amp;quot;) + geom_bar(aes(x = pos, y = sqrt(0.1), width = w), color = &amp;quot;black&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;green&amp;quot;) + coord_polar() + scale_x_continuous(labels = f$H,
breaks = pos)&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-9-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-4](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-43.png) -->
&lt;pre class="r">&lt;code># add ablines
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;lightgrey&amp;quot;) + geom_bar(aes(x = pos, y = capital, width = w), color = &amp;quot;grey40&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;red&amp;quot;) + geom_bar(aes(x = pos, y = sqrt(0.1),
width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;green&amp;quot;) + geom_abline(intercept = 1,
slope = 0, linetype = 2) + geom_abline(intercept = sqrt(1.1), slope = 0,
linetype = 3) + geom_abline(intercept = sqrt(0.9), slope = 0, linetype = 3)&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-10-1.png" width="672" />&lt;/p>
&lt;div class="figure">
&lt;img src="https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-44.png" alt="" />
&lt;p class="caption">plot of chunk unnamed-chunk-4&lt;/p>
&lt;/div>
&lt;pre class="r">&lt;code># calculate vertical ablines of divisions
v1 &amp;lt;- 0.51 * f$Value[1]
v2 &amp;lt;- cumsum(f$Value)[17] + f$Value[18] * 0.31
v3 &amp;lt;- cumsum(f$Value)[17] + f$Value[18] * 0.64
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;lightgrey&amp;quot;) +
geom_vline(x = v1, linetype = 5, xintercept = 0) +
geom_vline(x = v2, linetype = 5, xintercept = 0) +
geom_vline(x = v3, linetype = 5, xintercept = 0) +
coord_polar()&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown parameters: x
## Warning: Ignoring unknown parameters: x
## Warning: Ignoring unknown parameters: x&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-11-1.png" width="672" />&lt;/p>
&lt;pre class="r">&lt;code># putting it all together
p &amp;lt;- ggplot(f)
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;lightgrey&amp;quot;) + geom_bar(aes(x = pos, y = capital, width = w), color = &amp;quot;grey40&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;red&amp;quot;) + geom_bar(aes(x = pos, y = sqrt(0.1),
width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;green&amp;quot;) + geom_abline(intercept = 1,
slope = 0, linetype = 2) + geom_abline(intercept = sqrt(1.1), slope = 0,
linetype = 3) + geom_abline(intercept = sqrt(0.9), slope = 0, linetype = 3) +
geom_vline(x = v1, linetype = 5, xintercept = 0) +
geom_vline(x = v2, linetype = 5, xintercept = 0) +
geom_vline(x = v3, linetype = 5, xintercept = 0) +
coord_polar() + scale_x_continuous(labels = f$H, breaks = pos) +
theme_classic()&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown parameters: x
## Warning: Ignoring unknown parameters: x
## Warning: Ignoring unknown parameters: x&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-12-1.png" width="672" />&lt;/p>
&lt;p>The above looks great, but ideally, for an ‘infographic’ feel, it would
have no annoying axes clogging up the visuals. This was done by creating an
entirely new ggpot theme.&lt;/p>
&lt;/div>
&lt;div id="create-theme-with-no-axes" class="section level2">
&lt;h2>Create theme with no axes&lt;/h2>
&lt;pre class="r">&lt;code>theme_infog &amp;lt;- theme_classic() + theme(axis.line = element_blank(), axis.title = element_blank(),
axis.ticks = element_blank(), axis.text.y = element_blank())
last_plot() + theme_infog&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-13-1.png" width="672" />&lt;/p>
&lt;/div>
&lt;div id="creating-a-ring" class="section level2">
&lt;h2>Creating a ring&lt;/h2>
&lt;p>To add the revenue element to the graph is not a task to be taken likely.
This was how I tackled the problem, by creating a tall, variable-width
bar chart first, and later adding the original spie chart after:&lt;/p>
&lt;pre class="r">&lt;code>f$Cap.r &amp;lt;- f$Cap/mean(f$Cap) * 0.1 + 1.2
f$Cont.r &amp;lt;- f$Contribution/mean(f$Cap) * 0.1 + 1.2
f$Rep.r &amp;lt;- f$Cont.r + f$Repayments/mean(f$Cap) * 0.1
f$H &amp;lt;- c(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;g&amp;quot;, &amp;quot;h&amp;quot;, &amp;quot;i&amp;quot;, &amp;quot;j&amp;quot;, &amp;quot;k&amp;quot;, &amp;quot;l&amp;quot;, &amp;quot;m&amp;quot;, &amp;quot;n&amp;quot;,
&amp;quot;o&amp;quot;, &amp;quot;p&amp;quot;, &amp;quot;q&amp;quot;, &amp;quot;r&amp;quot;, &amp;quot;s&amp;quot;, &amp;quot;t&amp;quot;)
p &amp;lt;- ggplot(f)
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;lightgrey&amp;quot;)&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-14-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-6](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-61.png) -->
&lt;pre class="r">&lt;code># we need the axes to be bigger for starters - try 1.3 to 1.5
p + geom_bar(aes(x = pos, y = Cap.r, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;white&amp;quot;) + geom_bar(aes(x = pos, y = Rep.r, width = w), color = &amp;quot;grey40&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;grey80&amp;quot;) + geom_bar(aes(x = pos, y = Cont.r,
width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;grey30&amp;quot;) + geom_bar(aes(x = pos,
y = 1.196, width = w), color = &amp;quot;white&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;white&amp;quot;)&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-15-1.png" width="672" />&lt;/p>
&lt;pre class="r">&lt;code>last_plot() + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;grey80&amp;quot;) + geom_bar(aes(x = pos, y = capital,
width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;grey30&amp;quot;) + geom_bar(aes(x = pos,
y = sqrt(0.1), width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;black&amp;quot;) +
geom_abline(intercept = 1, slope = 0, linetype = 5) + geom_abline(intercept = sqrt(1.1),
slope = 0, linetype = 3) + geom_abline(intercept = sqrt(0.9), slope = 0,
linetype = 3) + coord_polar() + scale_x_continuous(labels = f$H, breaks = pos) +
theme_infog&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-16-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-6](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-63.png) -->
&lt;/div>
&lt;div id="just-inner" class="section level2">
&lt;h2>Just inner&lt;/h2>
&lt;p>After all that it was decided it looked nicer with only the inner ring anyway.
Here is the finished product:&lt;/p>
&lt;pre class="r">&lt;code>p &amp;lt;- ggplot(f)
p + geom_bar(aes(x = pos, y = Allo, width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;,
fill = &amp;quot;grey80&amp;quot;) + geom_bar(aes(x = pos, y = capital, width = w), color = &amp;quot;grey40&amp;quot;,
stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;grey30&amp;quot;) + geom_bar(aes(x = pos, y = sqrt(0.1),
width = w), color = &amp;quot;grey40&amp;quot;, stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;black&amp;quot;) + geom_abline(intercept = 1,
slope = 0, linetype = 5) + geom_abline(intercept = sqrt(1.1), slope = 0,
linetype = 3) + geom_abline(intercept = sqrt(0.9), slope = 0, linetype = 3) +
coord_polar() + scale_x_continuous(labels = f$H, breaks = pos) + theme_infog&lt;/code>&lt;/pre>
&lt;pre>&lt;code>## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width
## Warning: Ignoring unknown aesthetics: width&lt;/code>&lt;/pre>
&lt;p>&lt;img src="https://robinlovelace.net/old-site/post/2013-12-27-coxcomb-plots-spiecharts-R_files/figure-html/unnamed-chunk-17-1.png" width="672" />&lt;/p>
&lt;!-- ![plot of chunk unnamed-chunk-7](https://raw.github.com/Robinlovelace/robinlovelace.github.io/master/figure/unnamed-chunk-7.png) -->
&lt;pre class="r">&lt;code>ggsave(&amp;quot;just-inner.png&amp;quot;, width = 7, height = 7, dpi = 800)&lt;/code>&lt;/pre>
&lt;/div></description></item><item><title>Moving house by bicycle trailer</title><link>https://robinlovelace.net/old-site/post/2013-10-13-bicycle-trailer-move/</link><pubDate>Sun, 13 Oct 2013 00:00:00 +0000</pubDate><guid>https://robinlovelace.net/old-site/post/2013-10-13-bicycle-trailer-move/</guid><description>&lt;p>Back in 2009 I moved from York to Sheffield to start a PhD on the &lt;a href="http://e-futures.group.shef.ac.uk/page/home/" target="_blank" rel="noopener">Energy Futures&lt;/a> 4 year Doctoral Training Centre.
Young and naive, some friends and I decided to do it by bicycle, with one bicycle trailer filled to the brim and 4 large panniers carrying most of my stuff.&lt;/p>
&lt;p>4 years later and I&amp;rsquo;ve moved again, this time to Leeds. I&amp;rsquo;ve got a new a job at Leeds University,
working on the &lt;a href="http://www.geotalisman.org/" target="_blank" rel="noopener">Geotalisman&lt;/a> project in the department of geography.
Older and hopefully wiser, I decided to move house by bicycle again: it&amp;rsquo;s shorter than the trip to York
(40 miles, not 60), I was more organised with planning (providing a month&amp;rsquo;s notice for friends and
family to attend and after 4 years in Sheffield I knew many people who would be up for the ride.
To make it more exciting, this time we brought music, in the form of a 12v sound system.
See the map, words, images and video below for the full low-down on this epic ride.&lt;/p>
&lt;iframe src="http://www.gpsies.com/mapOnly.do?fileId=nueyoqzfqmingzgc" width="600" height="400" frameborder="0" scrolling="no" marginheight="0" marginwidth="0">&lt;/iframe>
&lt;h2 id="introduction-preparation-and-kit">Introduction: preparation and kit&lt;/h2>
&lt;p>The first stage was to recruit people. With a month&amp;rsquo;s notice, I managed to get around 15 people to
sign-up to the challenge. One issue for some people was lack of a suitable bicycle, so additional
ones were found and leant out. The best of these was a large tandem leant to me by a friend.
Trailers would be a major limiting factor for most people, but, as a member of
&lt;a href="https://ewb.shef.ac.uk/" target="_blank" rel="noopener">EWB Sheffield&lt;/a> who had helped on the bike trailer project, this was
less of an issue. We borrowed one trailer from EWB, and the other one was my own, purchased
from Ebay &lt;a href="http://www.ebay.co.uk/bhp/bicycle-trailer" target="_blank" rel="noopener">for around £60&lt;/a>.&lt;/p>
&lt;p>The plan was to set-off at 11 am. But it took almost an hour for to say final goodbyes, for everyone to
sort their stuff out and to decide who would be riding which
bikes. So it was essentially a midday start.&lt;/p>
&lt;h2 id="stage-one-navigating-the-urban-jungle">Stage one: navigating the urban jungle&lt;/h2>
&lt;p>Getting out of any major city is usually a challenge by bicycle, and Sheffield is no
exception, with the giant M1 dominating the norther route.
Fortunately we were ably guided for the first 10 miles or so by Sustrans Ranger
Simon Geller, who took us safely out via Northern General hospital and out onto
the car-free &lt;a href="http://www.sustrans.org.uk/ncn/map/route/trans-pennine-trail-central" target="_blank" rel="noopener">Trans Pennine Trail&lt;/a> to Leeds.&lt;/p>
&lt;p>It was a major relief to get off the road, despite the hassle of hauling the big
bike trailers over the barriers - see video below.
After that the route was quite tranquil until, realising we were behind schedule,
we decided to just get onto the A61 for the final 5 miles to Barnesley,
where we had agreed to meet other people and from where people could go home early.&lt;/p>
&lt;h2 id="stage-two-barnesley-to-wakefield">Stage two: Barnesley to Wakefield&lt;/h2>
&lt;p>We were all quite tired in Barnesley, so a good rest was had by all in the
lush sunshine. Our only puncture of the trip was fixed, we ate and waited for
Nokolai - a new recuit from Leeds, who would help out greatly with lugging the trailers.
By the time we set off again it was almost 5. Conscious of the need to go faster to
arrive before sunset, we changed our route plan completely and decided just to
get our heads down and pedal along the A61 all the way.&lt;/p>
&lt;p>The difference in speed was noticeable. With fresh legs towing the bicycle trailers
and some of the less experienced cyclists leaving us in Barnesley it felt like we
were flying. The road is wide and flat, so it did not feel especially dangerous.
Cycling in convoy is probably safer anyway because people notice a flock of cyclists
more than a single one or two. There was a hard climb up to Wakefield where we
had a number of small stops. The overall feeling was &amp;ldquo;let&amp;rsquo;s just get there&amp;rdquo; so
we pressed on, after another couple of people headed to the train station.
The proximity of rail stations to the route was one of its major advantages,
allowing people to leave when they wanted to, and meaning that setting off
was not such a major commitment. It was all downhill from Wakefield, or
so we thought.&lt;/p>
&lt;h2 id="the-final-straight-into-leeds">The final straight: into Leeds&lt;/h2>
&lt;p>As dusk descended, the group re-united. With various distractions, we had become
dispersed on the fast downhill stretch directly north of Wakefield. As the traffic
volume increased again near central Leeds, and as our level of visibility decreased
it made sense to stick together. At this stage we turned the volume up on the
bicycle trailer soundsystem. This helped a great deal to raise spirits that were flagging
after a longer than expected ride.&lt;/p>
&lt;p>We arrived in Leeds city centre at around 8pm. Knackered, we went directly to
the &lt;a href="http://www.wharfchambers.org/" target="_blank" rel="noopener">Wharf Chambers&lt;/a> for a pint and some food.
Before I knew it we were watching live music, most of my Sheffield friends had
gone back after heartfelt goodbyes, and it was approaching midnight.
But we still had two bicycle trailers to get back to my final destination, which was still another
mile away, uphill. This final stretch was a real slog, but, thanks to Nikolai&amp;rsquo;s
indominatable spirit we made it there before 12. Finally I was home!&lt;/p>
&lt;h2 id="why-move-house-by-bike-trailer">Why move house by bike trailer?&lt;/h2>
&lt;p>With all the extra hassle involved, you may wonder why I went to all these lengths.
A van could have done the job in under 2 hours, with a lot less sweat and in fact
I used this option a week later to move residual stuff that I could not
fit into the trailers. So why bother?&lt;/p>
&lt;p>The main reason for doing this was social: instead of having a big &amp;lsquo;piss-up&amp;rsquo; to see
me off I much preferred people stayed in the night before. That way I got to have
a sober conversation with some of my best friends in Sheffield whilst doing something fun.
For a few people on the ride, it was the furthest they had ever travelled by bicycle, and
this alone was worth-it for me.&lt;/p>
&lt;p>Another reason was that bicycle trailer moves are cheap. To hire a van can easily cost £100 for the day,
and the price of breakfast for the ride (and buying many people drinks in Leeds) was considerably less.&lt;/p>
&lt;p>Finally, bicycling in general is healthy. It&amp;rsquo;s good for you because you get your heart pumping and
some fresh air. It&amp;rsquo;s healthy for the environment too, as you get to leave the car at home.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Moving house by bicycle trailer was one of the the most enjoyable experiences
of 2013 for me. Being surrounded by friends, music and sunshine was infinitely
preferable to the van-based alternative. The even also brought people together in
a way that simply going out and drinking alcohol cannot. It was fun, free (in every
sense of the word) but definitely not fast, so if you have a tight schedule to move
bicycle trailers may not be the best way forward. There are also obvious physical limits
in how far you can actually move bulky items in a single day and 40 miles was already
pushing the limit for us.&lt;/p>
&lt;p>I would strongly recommend anyone who&amp;rsquo;s moving house to a not too distant
new location to consider bicycle trailers. They are so much more fun and
sociable than just jumping in a van, you just can&amp;rsquo;t go wrong.
If this little article on the matter has not persuaded you, check the video
below, sounds and all.&lt;/p>
&lt;p>I will be forever grateful to all the people who helped out with this move.&lt;/p>
&lt;iframe width="420" height="315" src="//www.youtube.com/embed/6a8QLiC4LV8" frameborder="0" allowfullscreen>&lt;/iframe></description></item></channel></rss>