A quick guide to pch
symbols in R, including: which symbols are available, how to use them in plots and how to style them by changing colours, size, and line widths.
A handy reference for pch
!
pch symbols in R
pch ("plotting character") is the graphical parameter for drawing symbols on plots in R. For example, pch=0
would plot the points as squares. There are 26 default symbols which are compatible across all systems and devices.
Default pch symbols
For symbols 0 to 14, you can change the symbol colour col
, line width lwd
and size cex
. For example:
plot(1:3, pch=c(0, 4, 12), col=c("red", "blue", "green"), lwd=c(2, 4, 6), cex=c(1, 2, 3))
Results in the following symbols:
Symbols 15 to 18 are "solid" symbols. These have no border so you cannot adjust the line width, but you can still change the size cex
and the colour col
.
plot(1:3, pch=c(15, 16, 17), col=c("red", "blue", "green"), cex=c(1, 2, 3))
Symbol 19 is like symbol 16, except it has a border which you can adjust lwd
, and this may make it appear larger. You can also change the size cex
and colour col
, but you cannot change the background colour (use 21). Symbol 20 is like 19, except it is smaller. So, if you were to plot both symbols, and cex
was set to 2, they would be plotted at different sizes:
plot(1:2, pch=c(19, 20), col="blue", lwd=1, cex=2)
Symbols 21 to 25 are "filled" symbols, so as well as being able to change the line width lwd
, size cex
and line colour col
, you can also change the background colour bg
, making these symbols the most versatile.
plot(1:3, pch=c(21, 22, 23), col=c("red", "orange", "limegreen"), bg=c("skyblue", "yellow", "hotpink"), lwd=c(3, 6, 3), cex=3)
If you were plotting some data, and wanted to set the symbols and/or colour based on a parameter, such as a group, you can do that by specifying the symbols, followed by using the subset option [square brackets] to specify the groups. See the following code as an example:
# Create data
set.seed(2333)
x <- rnorm(12)
y <- rnorm(12)
# Create groups
g <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
# Plot different symbols depending on the group
plot(x, y, pch=c(1, 18, 25)[g], col=c("red", "green2", "blue")[g], bg="skyblue2", lwd=2, cex=4)
# Add labels
text(x, y, labels=1:12, font=2)
Which would result in the following plot:
ASCII symbols
In addition to the default symbols, you can also plot ASCII
characters using pch=32:126
.
You can change the colour col
and size cex
of the ASCII
character symbols.
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
! | " | # | $ | % | & | ' | ( | ) | * | |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 |
+ | , | - | . | / | 0 | 1 | 2 | 3 | 4 | 5 |
54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
6 | 7 | 8 | 9 | : | ; | < | = | > | ? | @ |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
A | B | C | D | E | F | G | H | I | J | K |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
L | M | N | O | P | Q | R | S | T | U | V |
87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
W | X | Y | Z | [ | \\ | ] | ^ | _ | ` | a |
98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 |
b | c | d | e | f | g | h | i | j | k | l |
109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |
m | n | o | p | q | r | s | t | u | v | w |
120 | 121 | 122 | 123 | 124 | 125 | 126 | ||||
x | y | z | { | | | } | ~ |
Other symbols
"Native" symbols, which may be specific to the OS you are using, or your locale (e.g. language/keyboard settings), can be accessed using pch=128:255
.
To see a list of the symbols that are available for your system, use the following code in the R console (your results may vary):
pch <- as.character(128:255)
sym <- intToUtf8(pch, multiple=TRUE)
sym
You can also specify a character as the symbol (instead of using numbers). For example, if you wanted your plot points to be represented by the letter a, you could use pch="a"
. This is case sensitive, so "a" is different to "A".
For example, the following code will plot the symbols as characters:
# Create data
set.seed(2333)
x <- rnorm(12)
y <- rnorm(12)
# Plot symbols as characters
plot(x, y, pch=c("A", "a", "@", "%", "s", "{", "N", "Z", "h", "?", "D", "5"), col=1:12, bg="skyblue2", lwd=2, cex=4)
Or, you could set the character symbol automatically based on a parameter in your data, such as labels or groups for your dataset. The "symbol" used will be the first character of the label. See the following code for an example:
# Create data
set.seed(2333)
x <- rnorm(12)
y <- rnorm(12)
# Set labels
m <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
# Plot symbols based on labels
plot(x, y, pch=as.character(m), col=rainbow(12), lwd=2, cex=3)

Thanks for reading this guide! Please leave any comments or questions below.
Further reading
A quick guide to line types (lty) - A quick guide to the different line types available in R, and how to use them. [R Graphics]
A quick guide to layout() in R - How to create multi-panel plots and figures using the layout() function. [R Graphics]
Thank you so much!
ReplyDeleteVery rich and effective blog on plotting in R. It's really helpful for a beginner as well as for an advance user of R. Thank you so much for your effort.
ReplyDelete