Figure 5-2. Left: scatter plot with hollow circles (shape 21); right: with smaller points
Figure 5-3. Point shapes 16 and 19, as they appear with some bitmap output devices
5.2. Grouping Data Points by a Variable Using
Shape or Color
Problem
You want to group points by some variable, using shape or color.
5.2. Grouping Data Points by a Variable Using Shape or Color | 75
Adding a page to a pdf - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
add page numbers to a pdf file; add page numbers to pdf in reader
Adding a page to a pdf - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
add remove pages from pdf; adding a page to a pdf file
Solution
Map the grouping variable to shape or colour. In the heightweight data set, there are
many columns, but we’ll only use three of them in this example:
library(gcookbook) # For the data set
# Show the three columns we'll use
heightweight[, c("sex""ageYear""heightIn")]
sex ageYear heightIn
f   11.92     56.3
f   12.92     62.3
f   12.75     63.3
...
m   13.92     62.0
m   12.58     59.3
We can group points on the variable sex, by mapping sex to one of the aesthetics colour
or shape (Figure 5-4):
ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=sex)) + geom_point()
ggplot(heightweight, aes(x=ageYear, y=heightIn, shape=sex)) + geom_point()
Figure 5-4. Grouping points by a variable mapped to colour (left), and to shape (right)
Discussion
The grouping variable must be categorical—in other words, a factor or character vector.
If it is stored as a vector of numeric values, it should be converted to a factor before it is
used as a grouping variable.
76 | Chapter 5: Scatter Plots
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
page modifying page, you will find detailed guidance on creating, loading, merge and splitting PDF pages and Files, adding a page into PDF document, deleting
add page number to pdf online; add pages to pdf in preview
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Perform annotation capabilities to mark, draw, and visualize objects on PDF document page. Capable of adding PDF file navigation features to your VB.NET program
add pages to pdf without acrobat; add page to pdf acrobat
It is possible to map a variable to both shape and colour, or, if you have multiple group‐
ing variables, to map different variables to them. Here, we’ll map sex to shape and
colour (Figure 5-5, left):
ggplot(heightweight, aes(x=ageYear, y=heightIn, shape=sex, colour=sex)) +
geom_point()
The default shapes and colors may not be very appealing. Other shapes can be used with
scale_shape_manual(), and other colors can be used with scale_colour_brewer() or
scale_colour_manual().
This will set different shapes and colors for the grouping variables (Figure 5-5, right):
ggplot(heightweight, aes(x=ageYear, y=heightIn, shape=sex, colour=sex)) +
geom_point() +
scale_shape_manual(values=c(1,2)) +
scale_colour_brewer(palette="Set1")
Figure 5-5. Left: mapping to both shape and colour; right: with manually set shapes and
colors
See Also
To use different shapes, see Recipe 5.3.
For more on using different colors, see Chapter 12.
5.3. Using Different Point Shapes
Problem
You want to use point shapes that are different from the defaults.
5.3. Using Different Point Shapes | 77
C# PDF insert image Library: insert images into PDF in C#.net, ASP
image adding library control for PDF document, you can easily and quickly add an image, picture or logo to any position of specified PDF document file page.
adding a page to a pdf; adding a page to a pdf in reader
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Provides you with examples for adding an (empty) page to a PDF and adding empty pages to a PDF from a supported file format, with customized options.
adding page numbers to pdf files; add page number to pdf print
Solution
If you want to set the shape of all the points (Figure 5-6), specify the shape in geom
_point():
library(gcookbook) # For the data set
ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point(shape=3)
Figure 5-6. Left: scatter plot with the shape aesthetic set to a custom value; right: with a
variable mapped to shape, using a custom shape palette
If you have mapped a variable to shape, use scale_shape_manual() to change the
shapes:
# Use slightly larger points and use a shape scale with custom values
ggplot(heightweight, aes(x=ageYear, y=heightIn, shape=sex)) +
geom_point(size=3+ scale_shape_manual(values=c(1, 4))
Discussion
Figure 5-7 shows the shapes that are available in R graphics. Some of the point shapes
(1–14) have just an outline, some (15–20) are solid, and some (21–25) have an outline
and fill that can be controlled separately. (You can also use characters for points.)
For shapes 1–20, the color of the entire point—even the points that are solid—is con‐
trolled by the colour aesthetic. For shapes 21–25, the outline is controlled by colour
and the fill is controlled by fill.
78 | Chapter 5: Scatter Plots
C# PDF insert text Library: insert text into PDF content in C#.net
C#.NET PDF SDK - Insert Text to PDF Document in C#.NET. Providing C# Demo Code for Adding and Inserting Text to PDF File Page with .NET PDF Library.
add page to pdf in preview; add page to pdf online
VB.NET PDF insert text library: insert text into PDF content in vb
VB.NET PDF - Insert Text to PDF Document in VB.NET. Providing Demo Code for Adding and Inserting Text to PDF File Page in VB.NET Program.
adding page numbers in pdf file; add a page to a pdf in reader
Figure 5-7. Shapes in R
It’s possible to have the shape represent one variable and the fill (empty or solid) rep‐
resent another variable. This is done a little indirectly, by choosing shapes that have both
colour and fill, and a color palette that includes NA and another color (the NA will
result in a hollow shape). For example, we’ll take the heightweight data set and add
another column that indicates whether the child weighed 100 pounds or more
(Figure 5-8):
# Make a copy of the data
hw <- heightweight
# Categorize into <100 and >=100 groups
hw$weightGroup <- cut(hw$weightLb, breaks=c(-Inf, 100, Inf),
labels=c("< 100"">= 100"))
# Use shapes with fill and color, and use colors that are empty (NA) and 
# filled
ggplot(hw, aes(x=ageYear, y=heightIn, shape=sex, fill=weightGroup)) +
geom_point(size=2.5+
scale_shape_manual(values=c(2124)) +
scale_fill_manual(values=c(NA"black"),
guide=guide_legend(override.aes=list(shape=21)))
5.3. Using Different Point Shapes | 79
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
text comments on PDF page using C# demo code in Visual Stuodio .NET class. C#.NET: Add Text Box to PDF Document. Provide users with examples for adding text box
add pages to an existing pdf; add page numbers to a pdf document
VB.NET TIFF: Add New Image to TIFF File in Visual Basic .NET
However, RasterEdge VB.NET TIFF document processing SDK can offer you the reliable and extensive TIFF page image adding tool that allows you to directly insert
adding page numbers to pdf documents; add page number to pdf online
Figure 5-8. A variable mapped to shape and another mapped to fill
See Also
For more on using different colors, see Chapter 12.
For more information about recoding a continuous variable to a categorical one, see
Recipe 15.14.
5.4. Mapping a Continuous Variable to Color or Size
Problem
You want to represent a third continuous variable using color or size.
Solution
Map the continuous variable to size or colour. In the heightweight data set, there are
many columns, but we’ll only use four of them in this example:
library(gcookbook) # For the data set
# List the four columns we'll use
heightweight[, c("sex""ageYear""heightIn""weightLb")]
sex ageYear heightIn weightLb
80 | Chapter 5: Scatter Plots
f   11.92     56.3     85.0
f   12.92     62.3    105.0
f   12.75     63.3    108.0
...
m   13.92     62.0    107.5
m   12.58     59.3     87.0
The basic scatter plot in Recipe 5.1 shows the relationship between the continuous vari‐
ables ageYear and heightIn. To represent a third continuous variable, weightLb, we
must map it to another aesthetic property. We can map it to colour or size, as shown
in Figure 5-9:
ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=weightLb)) + geom_point()
ggplot(heightweight, aes(x=ageYear, y=heightIn, size=weightLb)) + geom_point()
Figure 5-9. Left: a continuous variable mapped to colour; right: mapped to size
Discussion
A basic scatter plot shows the relationship between two continuous variables: one map‐
ped to the x-axis, and one to the y-axis. When there are more than two continuous
variables, they must be mapped to other aesthetics: size and/or color.
We can easily perceive small differences in spatial position, so we can interpret the
variables mapped to x and y coordinates with high accuracy. We aren’t very good at
perceiving small differences in size and color, though, so we will interpret variables
mapped to these aesthetic attributes with a much lower accuracy. When you map a
variable to one of these properties, it should be one where accuracy is not very important
for interpretation.
When a variable is mapped to size, the results can be perceptually misleading. The
largest dots in Figure 5-9 have about 36 times the area of the smallest ones, but they
5.4. Mapping a Continuous Variable to Color or Size | 81
Figure 5-10. Left: outlined points with a continuous variable mapped to fill; right: with a
discrete legend instead of continuous colorbar
represent only about 3.5 times the weight. If it is important for the sizes to proportionally
represent the quantities, you can change the range of sizes. By default the sizes of points
go from 1 to 6 mm. You could reduce the range to, say, 2 to 5 mm, with scale_size_con
tinuous(range=c(2, 5)). However, the point size numbers don’t map linearly to di‐
ameter or area, so this still won’t give a very accurate representation of the values. (See
Recipe 5.12 for details on making the area of dots proportional to the value.)
When it comes to color, there are actually two aesthetic attributes that can be used:
colour and fill. For most point shapes, you use colour. However, shapes 21–25 have
an outline with a solid region in the middle where the color is controlled by fill. These
outlined shapes can be useful when using a color scale with light colors, as in
Figure 5-10, because the outline sets them off from the background. In this example, we
also set the fill gradient to go from black to white and make the points larger so that the
fill is easier to see:
ggplot(heightweight, aes(x=weightLb, y=heightIn, fill=ageYear)) +
geom_point(shape=21, size=2.5) +
scale_fill_gradient(low="black", high="white")
# Using guide_legend() will result in a discrete legend instead of a colorbar
ggplot(heightweight, aes(x=weightLb, y=heightIn, fill=ageYear)) +
geom_point(shape=21, size=2.5) +
scale_fill_gradient(low="black", high="white", breaks=12:17,
guide=guide_legend())
When we map a continuous variable to an aesthetic, that doesn’t prevent us from map‐
ping a categorical variable to other aesthetics. In Figure 5-11, we’ll map weightLb to
82 | Chapter 5: Scatter Plots
size, and also map sex to colour. Because there is a fair amount of overplotting, we’ll
make the points 50% transparent by setting alpha=.5. We’ll also use scale
_size_area() to make the area of the points proportional to the value (see
Recipe 5.12), and change the color palette to one that is a little more appealing:
ggplot(heightweight, aes(x=ageYear, y=heightIn, size=weightLb, colour=sex)) +
geom_point(alpha=.5+
scale_size_area() +     # Make area proportional to numeric value
scale_colour_brewer(palette="Set1")
Figure 5-11. Continuous variable mapped to size and categorical variable mapped to
colour
When a variable is mapped to size, it’s a good idea to not map a variable to shape. This
is because it is difficult to compare the sizes of different shapes; for example, a size 4
triangle could appear larger than a size 3.5 circle. Also, some of the shapes really are
different sizes: shapes 16 and 19 are both circles, but at any given numeric size, shape
19 circles are visually larger than shape 16 circles.
See Also
To use different colors from the default, see Recipe 12.6.
See Recipe 5.12 for creating a balloon plot.
5.4. Mapping a Continuous Variable to Color or Size | 83
5.5. Dealing with Overplotting
Problem
You have many points and they obscure each other.
Solution
With large data sets, the points in a scatter plot may obscure each other and prevent the
viewer from accurately assessing the distribution of the data. This is called overplot‐
ting. If the amount of overplotting is low, you may be able to alleviate it by using smaller
points, or by using a different shape (like shape 1, a hollow circle) through which other
points can be seen. Figure 5-2 in Recipe 5.1 demonstrates both of these solutions.
If there’s a high degree of overplotting, there are a number of possible solutions:
• Make the points semitransparent
• Bin the data into rectangles (better for quantitative analysis)
• Bin the data into hexagons
• Use box plots
Discussion
The scatter plot in Figure 5-12 contains about 54,000 points. They are heavily overplot‐
ted, making it impossible to get a sense of the relative density of points in different areas
of the graph:
sp <- ggplot(diamonds, aes(x=carat, y=price))
sp + geom_point()
We can make the points semitransparent using alpha, as in Figure 5-13. Here, we’ll make
them 90% transparent and then 99% transparent, by setting alpha=.1 and alpha=.01:
sp + geom_point(alpha=.1)
sp + geom_point(alpha=.01)
Now we can see that there are vertical bands at nice round values of carats, indicating
that diamonds tend to be cut to those sizes. Still, the data is so dense that even when the
points are 99% transparent, much of the graph appears solid black, and the data distri‐
bution is still somewhat obscured.
84 | Chapter 5: Scatter Plots
Documents you may be interested
Documents you may be interested