<p><div><div><div><div data-width="100" data-show-faces="false" data-send="true" data-layout="button_count" data-height="21" data-href="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/"></div></div><div><a data-url="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/" data-counturl="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/" data-count="horizontal" data-text="Using 2D Contour Plots within {ggplot2} to Visualize Relationships between Three Variables" 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://www.r-statistics.com/2016/07/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/"> R – R-statistics blog</a></strong>, and kindly contributed to <a rel="nofollow" href="http://www.r-bloggers.com/">R-bloggers)</a> </div>
<p><em><span>Guest post by <strong>John</strong></span><strong> <span>Bellettiere,</span> <span>Vincent</span> <span>Berardi,</span> <span>Santiago</span> <span>Estrada</span></strong></em></p>
<div>
<p><a name="the-goal"></a><span>The Goal</span></p>
<p><span>To visually explore relations between two related variables and an outcome using contour plots. We use the</span> <span>contour</span> <span>function in Base R to produce contour plots that are well-suited for initial investigations into three dimensional data. We then develop visualizations using ggplot2 to gain more control over the graphical output. We also describe several data transformations needed to accomplish this visual exploration.</span></p>
<p><span></span></p>
<p><a name="the-dataset"></a><span>The Dataset</span></p>
<p><span>The mtcars dataset provided with Base R contains results from Motor Trend road tests of 32 cars that took place between 1973 and 1974. We focus on the following three variables: wt (weight, 1000lbs), hp (gross horsepower), qsec (time required to travel a quarter mile). qsec is a measure of acceleration with shorter times representing faster acceleration. It is reasonable to believe that weight and horsepower are jointly related to acceleration, possibly in a nonlinear fashion.</span></p>
<p><span>head</span><span>(mtcars)</span></p>
<p><span>##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb</span><br>
<span>## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4</span><br>
<span>## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4</span><br>
<span>## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1</span><br>
<span>## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1</span><br>
<span>## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2</span><br>
<span>## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1</span></p>
<p><a name="preliminary-visualizations"></a><span>Preliminary Visualizations</span></p>
<p><span>To start, we look at a simple scatter plot of weight by horsepower, with each data point colored according to quartiles of acceleration. We first create a new variable to represent quartiles of acceleration using the</span> <span>cut</span> <span>and</span> <span>quantile</span> <span>functions.</span></p>
<p><span>mtcars$quart &lt;-</span> <span>cut</span><span>(mtcars$qsec, </span><span>quantile</span><span>(mtcars$qsec))</span></p>
<p><span>From here, we use ggplot to visualize the data. We selected colors that were sequential and color blind friendly using</span> <a target="_blank" href="http://colorbrewer2.org/"><span>ColorBrewer</span></a> <span>and manually added them to the scale_colour_manual() argument within the ggplot() call below. Labels were also manually added to improve interpretation.</span></p>
<p><span>ggplot</span><span>(mtcars, </span><span>aes</span><span>(</span><span>x =</span> <span>wt, </span><span>y =</span> <span>hp, </span><span>color =</span> <span>factor</span><span>(quart))) +</span><br>
<span>       </span><span>geom_point</span><span>(</span><span>shape =</span> <span>16</span><span>, </span><span>size =</span> <span>5</span><span>) +</span><br>
<span>       </span><span>theme</span><span>(</span><span>legend.position =</span> <span>c</span><span>(</span><span>0.80</span><span>, </span><span>0.85</span><span>), </span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span>legend.background =</span> <span>element_rect</span><span>(</span><span>colour =</span> <span>“black”</span><span>), </span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span>panel.background =</span> <span>element_rect</span><span>(</span><span>fill =</span> <span>“black”</span><span>)) +</span><br>
<span>       </span><span>labs</span><span>(</span><span>x =</span> <span>“Weight (1,000lbs)”</span><span>,  </span><span>y =</span> <span>“Horsepower”</span><span>) +</span><br>
<span>       </span><span>scale_colour_manual</span><span>(</span><span>values =</span> <span>c</span><span>(</span><span>“#fdcc8a”</span><span>, </span><span>“#fc8d59”</span><span>, </span><span>“#e34a33”</span><span>, </span><span>“#b30000”</span><span>),</span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span>name =</span> <span>“Quartiles of qsec”</span><span>,</span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span>labels =</span> <span>c</span><span>(</span><span>“14.5-16.9s”</span><span>, </span><span>“17.0-17.7s”</span><span>, </span><span>“17.8-18.9s”</span><span>, </span><span>“19.0-22.9s”</span><span>))</span></p>
<p><img alt="" src="https://i1.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddef4d6_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>This plot provides a first look at the interrelationships of the three variable of interest. To get a different representation of these relations, we use contour plots.</span></p>
<p><a name="preparing-the-data-for-contour-plots-in-"></a><span>Preparing the Data for Contour Plots in Base R</span></p>
<p><span>The</span> <span>contour</span> <span>function requires three dimensional data as an input. We are interested in estimating acceleration for all possible combinations of weight and horsepower using the available data, thereby generating three dimensional data. To compute the estimates, a two-dimensional loess model is fit to the data using the following call:</span></p>
<p><span>data.loess &lt;-</span> <span>loess</span><span>(qsec ~</span> <span>wt *</span> <span>hp, </span><span>data =</span> <span>mtcars)</span></p>
<p><span>The model contained within the resulting loess object is then used to output the three-dimensional dataset needed for plotting. We do that by generating a sequence of values with uniform spacing over the range of wt and hp. An arbitrarily chosen distance of 0.3 between sequence elements was used to give a relatively fine resolution to the data. Using the</span> <span>predict</span> <span>function, the loess model object is used to estimate a qsec value for each combination of values in the two sequences. These estimates are stored in a matrix where each element of the wt sequence is represented by a row and each element of the hp sequence is represented by a column.</span></p>
<p><span># Create a sequence of incrementally increasing (by 0.3 units) values for both wt and hp</span><br>
<span>xgrid &lt;-</span><span>  </span><span>seq</span><span>(</span><span>min</span><span>(mtcars$wt), </span><span>max</span><span>(mtcars$wt), </span><span>0.3</span><span>)</span><br>
<span>ygrid &lt;-</span><span>  </span><span>seq</span><span>(</span><span>min</span><span>(mtcars$hp), </span><span>max</span><span>(mtcars$hp), </span><span>0.3</span><span>)</span><br>
<span># Generate a dataframe with every possible combination of wt and hp</span><br>
<span>data.fit &lt;-</span><span>  </span><span>expand.grid</span><span>(</span><span>wt =</span> <span>xgrid, </span><span>hp =</span> <span>ygrid)</span><br>
<span># Feed the dataframe into the loess model and receive a matrix output with estimates of </span><br>
<span># acceleration for each combination of wt and hp</span><br>
<span>mtrx3d &lt;-</span><span>  </span><span>predict</span><span>(data.loess, </span><span>newdata =</span> <span>data.fit)</span><br>
<span># Abbreviated display of final matrix</span><br>
<span>mtrx3d[</span><span>1</span><span>:</span><span>4</span><span>, </span><span>1</span><span>:</span><span>4</span><span>]</span></p>
<p><span>##           hp</span><br>
<span>## wt         hp= 52.0 hp= 52.3 hp= 52.6 hp= 52.9</span><br>
<span>##   wt=1.513 19.04237 19.03263 19.02285 19.01302</span><br>
<span>##   wt=1.813 19.25566 19.24637 19.23703 19.22764</span><br>
<span>##   wt=2.113 19.55298 19.54418 19.53534 19.52645</span><br>
<span>##   wt=2.413 20.06436 20.05761 20.05077 20.04383</span></p>
<p><span>We then visualize the resulting three dimensional data using the</span> <span>contour</span> <span>function.</span></p>
<p><span>contour</span><span>(</span><span>x =</span> <span>xgrid, </span><span>y =</span> <span>ygrid, </span><span>z =</span> <span>mtrx3d, </span><span>xlab =</span> <span>“Weight (1,000lbs)”</span><span>, </span><span>ylab =</span> <span>“Horsepower”</span><span>)</span></p>
<p><img alt="" src="https://i2.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddef71d_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>Preparing the Data for Contour Plots in GGPlots</span></p>
<p><span>To use ggplot, we manipulate the data into “long format” using the</span> <span>melt</span> <span>function from the reshape2 package. We add names for all of the resulting columns for clarity. An unfortunate side effect of the</span> <span>predict</span> <span>function used to populate the initial 3d dataset is that all of the row values and column values of the resulting matrix are of type char, in the form of “</span><span>variable = value</span><span>“. The character portion of these values need to first be removed then the remaining values converted to numeric. This is done using</span> <span>str_locate</span> <span>(from the stringR package) to locate the “=” character, then use</span> <span>str_sub</span> <span>(also from stringR) to extract only the numerical portion of the character string. Finally,</span> <span>as.numeric</span> <span>is used to convert results to the appropriate class.</span></p>
<p><span># Transform data to long form</span><br>
<span>mtrx.melt &lt;-</span> <span>melt</span><span>(mtrx3d, </span><span>id.vars =</span> <span>c</span><span>(</span><span>“wt”</span><span>, </span><span>“hp”</span><span>), </span><span>measure.vars =</span> <span>“qsec”</span><span>)</span><br>
<span>names</span><span>(mtrx.melt) &lt;-</span> <span>c</span><span>(</span><span>“wt”</span><span>, </span><span>“hp”</span><span>, </span><span>“qsec”</span><span>)</span><br>
<span># Return data to numeric form</span><br>
<span>mtrx.melt$wt &lt;-</span> <span>as.numeric</span><span>(</span><span>str_sub</span><span>(mtrx.melt$wt, </span><span>str_locate</span><span>(mtrx.melt$wt, </span><span>“=”</span><span>)[</span><span>1</span><span>,</span><span>1</span><span>] +</span> <span>1</span><span>))</span><br>
<span>mtrx.melt$hp &lt;-</span> <span>as.numeric</span><span>(</span><span>str_sub</span><span>(mtrx.melt$hp, </span><span>str_locate</span><span>(mtrx.melt$hp, </span><span>“=”</span><span>)[</span><span>1</span><span>,</span><span>1</span><span>] +</span> <span>1</span><span>))</span></p>
<p><span>head</span><span>(mtrx.melt)</span></p>
<p><span>##      wt hp     qsec</span><br>
<span>## 1 1.513 52 19.04237</span><br>
<span>## 2 1.813 52 19.25566</span><br>
<span>## 3 2.113 52 19.55298</span><br>
<span>## 4 2.413 52 20.06436</span><br>
<span>## 5 2.713 52 20.65788</span><br>
<span>## 6 3.013 52 20.88378</span></p>
<p><a name="using-ggplots2-to-create-contour-plots"></a><span>Using GGPlots2 to Create Contour Plots</span></p>
<p><a name="basic-contour-plot"></a><span>Basic Contour Plot</span></p>
<p><span>With the data transformed into “long” form, we can make contour plots with</span> <span>ggplot2</span><span>. With the most basic parameters in place, we see:</span></p>
<p><span>plot1 &lt;-</span> <span>ggplot</span><span>(mtrx.melt, </span><span>aes</span><span>(</span><span>x =</span> <span>wt, </span><span>y =</span> <span>hp, </span><span>z =</span> <span>qsec)) +</span><br>
<span>         </span><span>stat_contour</span><span>()</span></p>
<p><img alt="" src="https://i1.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddef870_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>The resulting plot is not very descriptive and has no indication of the values of qsec.</span></p>
<p><a name="contour-plot-with-plot-region-colored-us"></a><span>Contour plot with plot region colored using a continuous outcome variable (qsec).</span></p>
<p><span>To aid in our plot’s descriptive value, we add color to the contour plot based on values of qsec.</span></p>
<p><span>plot2 &lt;-</span> <span>ggplot</span><span>(mtrx.melt, </span><span>aes</span><span>(</span><span>x =</span> <span>wt, </span><span>y =</span> <span>hp, </span><span>z =</span> <span>qsec)) +</span><br>
<span>         </span><span>stat_contour</span><span>(</span><span>geom =</span> <span>“polygon”</span><span>, </span><span>aes</span><span>(</span><span>fill =</span> <span>..level..)) +</span><br>
<span>         </span><span>geom_tile</span><span>(</span><span>aes</span><span>(</span><span>fill =</span> <span>qsec)) +</span><br>
<span>         </span><span>stat_contour</span><span>(</span><span>bins =</span> <span>15</span><span>) +</span><br>
<span>         </span><span>xlab</span><span>(</span><span>“Weight (1,000lbs)”</span><span>) +</span><br>
<span>         </span><span>ylab</span><span>(</span><span>“Horsepower”</span><span>) +</span><br>
<span>         </span><span>guides</span><span>(</span><span>fill =</span> <span>guide_colorbar</span><span>(</span><span>title =</span> <span>“¼ Mi. Time (s)”</span><span>))</span></p>
<p><img alt="" src="https://i1.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddefa9c_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>Contour plot with plot region colored using discrete levels</span></p>
<p><span>Another option could be to add colored regions between contour lines. In this case, we will split qsec into 10 equal segments using the</span> <span>cut</span> <span>function.</span></p>
<p><span># Create ten segments to be colored in</span><br>
<span>mtrx.melt$equalSpace &lt;-</span> <span>cut</span><span>(mtrx.melt$qsec, </span><span>10</span><span>)</span><br>
<span># Sort the segments in ascending order</span><br>
<span>breaks &lt;-</span> <span>levels</span><span>(</span><span>unique</span><span>(mtrx.melt$equalSpace))</span><br>
<span># Plot</span><br>
<span>plot3 &lt;-</span> <span>ggplot</span><span>() +</span><br>
<span>         </span><span>geom_tile</span><span>(</span><span>data =</span> <span>mtrx.melt, </span><span>aes</span><span>(wt, hp, qsec, </span><span>fill =</span> <span>equalSpace)) +</span><br>
<span>         </span><span>geom_contour</span><span>(</span><span>color =</span> <span>“white”</span><span>, </span><span>alpha =</span> <span>0.5</span><span>) +</span><br>
<span>         </span><span>theme_bw</span><span>() +</span><br>
<span>         </span><span>xlab</span><span>(</span><span>“Weight (1,000lbs)”</span><span>) +</span><br>
<span>         </span><span>ylab</span><span>(</span><span>“Horsepower”</span><span>) +</span><br>
<span>         </span><span>scale_fill_manual</span><span>(</span><span>values =</span> <span>c</span><span>(</span><span>“#35978f”</span><span>, </span><span>“#80cdc1”</span><span>, </span><span>“#c7eae5”</span><span>, </span><span>“#f5f5f5”</span><span>, </span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span><span>“#f6e8c3”</span><span>, </span><span>“#dfc27d”</span><span>, </span><span>“#bf812d”</span><span>, </span><span>“#8c510a”</span><span>,</span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span><span>“#543005”</span><span>, </span><span>“#330000”</span><span>),</span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span><span>name =</span> <span>“¼ Mi. Time (s)”</span><span>, </span><span>breaks =</span> <span>breaks, </span><span>labels =</span> <span>breaks)</span></p>
<p><span>## Warning in max(vapply(evaled, length, integer(1))): no non-missing</span><br>
<span>## arguments to max; returning -Inf</span></p>
<p><img alt="" src="https://i0.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddefc49_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>Note: in the lower right hand corner of the graph above, there is a region where increasing weight is associated with decreasing ¼ mile times, which is not characteristic of the true relation between weight and acceleration. This is due to extrapolation that the</span> <span>predict</span> <span>function performed while creating predictions for qsec for combinations of weight and height that did not exist in the raw data. This cannot be avoided using the methods described above. A well-placed rectangle (</span><span>geom_rect</span><span>) or placing the legend over the offending area can conceal this region (see example below).</span></p>
<p><a name="contour-plot-with-contour-lines-colored-"></a><span>Contour plot with contour lines colored using a continuous outcome variable (qsec)</span></p>
<p><span>Instead of coloring the whole plot, it may be more desirable to color just the contour lines of the plot. This can be achieved by using the stat_contour aesthetic over the scale_fill_manual aesthetic. We also chose to move the legend in the area of extrapolation.</span></p>
<p><span>plot4 &lt;-</span> <span>ggplot</span><span>()  +</span><br>
<span>         </span><span>theme_bw</span><span>() +</span><br>
<span>         </span><span>xlab</span><span>(</span><span>“Weight (1,000lbs)”</span><span>) +</span><br>
<span>         </span><span>ylab</span><span>(</span><span>“Horspower”</span><span>) +</span><br>
<span>         </span><span>stat_contour</span><span>(</span><span>data =</span> <span>mtrx.melt, </span><span>aes</span><span>(</span><span>x =</span> <span>wt, </span><span>y =</span> <span>hp, </span><span>z =</span> <span>qsec, </span><span>colour =</span> <span>..level..), </span><br>
<span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span> <span> </span><span>breaks =</span> <span>round</span><span>(</span><span>quantile</span><span>(mtrx.melt$qsec, </span><span>seq</span><span>(</span><span>0</span><span>, </span><span>1</span><span>, </span><span>0.1</span><span>)), </span><span>0</span><span>), </span><span>size =</span> <span>1</span><span>) +</span><br>
<span>         </span><span>scale_color_continuous</span><span>(</span><span>name =</span> <span>“¼ Mi. Time (s)”</span><span>) +</span><br>
<span>         </span><span>theme</span><span>(</span><span>legend.justification=</span><span>c</span><span>(</span><span>1</span><span>, </span><span>0</span><span>), </span><span>legend.position=</span><span>c</span><span>(</span><span>1</span><span>, </span><span>0</span><span>))</span></p>
<p><img alt="" src="https://i1.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddefdcd_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>Contour plot with contour lines colored using a continuous outcome variable and overlaying scatterplot of weight and horsepower.</span></p>
<p><span>We can also overlay the raw data from mtcars onto the previous plot.</span></p>
<p><span>plot5 &lt;-</span> <span>plot4 +</span><span>  </span><br>
<span>         </span><span>geom_point</span><span>(</span><span>data =</span> <span>mtcars, </span><span>aes</span><span>(</span><span>x =</span> <span>wt, </span><span>y =</span> <span>hp), </span><span>shape =</span> <span>1</span><span>, </span><span>size =</span> <span>2.5</span><span>, </span><span>color =</span> <span>“red”</span><span>)</span></p>
<p><img alt="" src="https://i1.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddeff49_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>Contour plot with contour lines colored using a continuous outcome variable and labeled using direct.labels()</span></p>
<p><span>With color-coded contour lines, as seen in the previous example, it may be difficult to differentiate the values of qsec that each line represents. Although we supplied a legend to the preceding plot, using</span> <span>direct.labels</span> <span>from the “directlabels” package can clarify values of qsec.</span></p>
<p><span>plot6 &lt;-</span> <span>direct.label</span><span>(plot5, </span><span>“bottom.pieces”</span><span>)</span></p>
<p><img alt="" src="https://i0.wp.com/www.r-statistics.com/wp-content/uploads/2016/07/579521ddf0109_img.png?resize=484%2C388&ssl=1" data-recalc-dims="1"></p>
<p><span>We hope that these examples were of help to you and that you are better able to visualize your data as a result.</span></p>
<p><span>For questions, corrections, or suggestions for improvement, contact John at</span> JBellettiere@ucsd.edu <span>or using</span> <span>@JohnBellettiere</span> <span>via Twitter.</span></p>
</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="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/"></div></div><div><a data-url="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/" data-counturl="http://www.r-bloggers.com/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/" data-count="vertical" data-text="Using 2D Contour Plots within {ggplot2} to Visualize Relationships between Three Variables" 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://www.r-statistics.com/2016/07/using-2d-contour-plots-within-ggplot2-to-visualize-relationships-between-three-variables/"> R – R-statistics blog</a></strong>.</div>
<hr>
<a rel="nofollow" href="http://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="http://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="http://www.r-project.org/">R</a> news and <a title="R tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=tutorial">tutorials</a> on topics such as: <a title="Data science" rel="nofollow" href="http://www.r-bloggers.com/?s=data%20science">Data science</a>, <a title="Big Data" rel="nofollow" href="http://www.r-bloggers.com/?s=Big%20Data">Big Data, <a title="R jobs" rel="nofollow" href="http://www.r-users.com/">R jobs</a>, visualization (<a title="ggplot and ggplot2 tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=ggplot2">ggplot2</a>, <a title="Boxplots using lattice and ggplot2 tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=boxplot">Boxplots</a>, <a title="Maps and gis" rel="nofollow" href="http://www.r-bloggers.com/?s=map">maps</a>, <a title="Animation in R" rel="nofollow" href="http://www.r-bloggers.com/?s=animation">animation</a>), programming (<a title="RStudio IDE for R" rel="nofollow" href="http://www.r-bloggers.com/?s=RStudio">RStudio</a>, <a title="Sweave and literate programming" rel="nofollow" href="http://www.r-bloggers.com/?s=sweave">Sweave</a>, <a title="LaTeX in R" rel="nofollow" href="http://www.r-bloggers.com/?s=LaTeX">LaTeX</a>, <a title="SQL and databases" rel="nofollow" href="http://www.r-bloggers.com/?s=SQL">SQL</a>, <a title="Eclipse IDE for R" rel="nofollow" href="http://www.r-bloggers.com/?s=eclipse">Eclipse</a>, <a title="git and github, Version Control System" rel="nofollow" href="http://www.r-bloggers.com/?s=git">git</a>, <a title="Large data in R using Hadoop" rel="nofollow" href="http://www.r-bloggers.com/?s=hadoop">hadoop</a>, <a title="Web Scraping of google, facebook, yahoo, twitter and more using R" rel="nofollow" href="http://www.r-bloggers.com/?s=Web+Scraping">Web Scraping</a>) statistics (<a title="Regressions and ANOVA analysis tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=regression">regression</a>, <a title="principal component analysis tutorial" rel="nofollow" href="http://www.r-bloggers.com/?s=PCA">PCA</a>, <a title="Time series" rel="nofollow" href="http://www.r-bloggers.com/?s=time+series">time series</a>, <a title="finance trading" rel="nofollow" href="http://www.r-bloggers.com/?s=trading">trading</a>) and more...
<img height="1" alt="" width="1" src="http://feeds.feedburner.com/~r/RBloggers/~4/U0NU8WDOIVI"></a></div>