The pch in R is “short for plot characters, symbols, or shapes we can use to make plots”. It is an argument used in various plotting functions, such as plot(), points(), and lines(), to specify the type of symbol or marker to be used in the plot.
In R, there are 26 built-in shapes available for use, and they can be identified by numbers ranging from 0 to 25(“+”, “.”, “;”, etc.).
The first 19 (0:18) numbers represent S-compatible vector symbols, and the remaining 7 (19:25) represent the R-specific vector symbols.
The different point symbols commonly used in R are shown below:
pch symbols
- pch = 0, square
- pch = 1, circle
- pch = 2, triangle point up
- pch = 3, plus
- pch = 4, cross
- pch = 5, diamond
- pch = 6, triangle point down
- pch = 7, square cross
- pch = 8, star
- pch = 9, diamond plus
- pch = 10, circle plus
- pch = 11, triangles up and down
- pch = 12, square plus
- pch = 13, circle cross
- pch = 14, square and triangle down
- pch = 15, filled square
- pch = 16, filled circle
- pch = 17, filled triangle point-up
- pch = 18, filled diamond
- pch = 19, solid circle
- pch = 20, bullet (smaller circle)
- pch = 21, filled circle blue
- pch = 22, filled square blue
- pch = 23, filled diamond blue
- pch = 24, filled triangle point-up blue
- pch = 25, filled triangle point down blue
You can see the pch numbers from the above section, and R will put the symbol according to that number.
pch=16
The point symbol pch = 16 is a filled circle. Therefore, the pch = 16 generates the filled circle figure in the plot.
pch 19
The point symbol pch = 19 is a solid circle. Therefore, pch 19 generates the solid circle figure in the plot.
Example 1: Use the pch = 10
Let’s use the equation y = x^3. It means we will define two vectors, x and y. The y is the cube of x.
x <- c(1, 2, 3, 4, 5, 6, 7)
y <- c(1, 8, 27, 64, 125, 216, 343)
Let’s plot the y = x^3 values.
x <- c(1, 2, 3, 4, 5, 6, 7)
y <- c(1, 8, 27, 64, 125, 216, 343)
plot(x, y)
Output
The default character for the plot is a circle.
To change that circle symbol, you can pass the pch with a proper argument ranging from 0 to 26.
Let’s pass pch = 10.
x <- c(1, 2, 3, 4, 5, 6, 7)
y <- c(1, 8, 27, 64, 125, 216, 343)
plot(x, y, pch=10)
Output
Example 2: Change background color and size of pch
One of the most prominent features of the pch codes is that you can modify their background fill color and their borderline type, color, size of the symbol, and line width of the plotting symbols.
- col: It is used for color (you can use the color code or color name) for the points.
- bg: It is used in the background (or fill) color for the open plot symbols. It can be used only when pch ranges from 21 to 25, including 21 and 25.
- cex: It is the size of pch symbols.
- lwd: It is the line width for the plotting symbols.
Let’s pass all these parameters to the plot() function and see the output.
x <- c(1, 2, 3, 4, 5, 6, 7)
y <- c(1, 8, 27, 64, 125, 216, 343)
plot(x, y, pch=22, col = "darkgreen", bg = "yellow", cex = 1.9, lwd=2)
Output
Example 3: Using a built-in dataset
R has many built-in datasets; we will use the iris dataset in this tutorial.
To get the specific part of the object, use the head() function.
head(iris)
Output
We will create two plots and add properties like cex, xlab, ylab, lwd, pch, and col.
par(mfrow = c(1, 2))
plot(x = iris$Sepal.Length, y = iris$Sepal.Width,
xlab = "Sepal Length", ylab = "Sepal Width",
pch = 24, col = "darkgreen", bg = "yellow",
cex = 1, lwd = 1.3, frame = FALSE)
# Change plot symbol to pch = 15 (filled square)
plot(x = iris$Sepal.Length, y = iris$Sepal.Width,
xlab = "Sepal Length", ylab = "Sepal Width",
pch = 15, col = "red",
cex = 1.5, lwd=1.3, frame = FALSE)
Output
Example 4: Applying a legend to a plot
# Colors
colors <- c("red", "darkgreen", "blue")
colors <- colors[as.numeric(iris$Species)]
# Shapes
shapes = c(22, 23, 24)
shapes <- shapes[as.numeric(iris$Species)]
# Plot
plot(x = iris$Sepal.Length, y = iris$Sepal.Width, frame = FALSE,
xlab = "Sepal Length", ylab = "Sepal Width",
col = colors, pch = shapes)
# Legend
legend("topright", legend = levels(iris$Species),
col = c("red", "darkgreen", "blue"),
pch = c(22, 23, 24) )
Output
That’s all!

Krunal Lathiya is a seasoned Computer Science expert with over eight years in the tech industry. He boasts deep knowledge in Data Science and Machine Learning. Versed in Python, JavaScript, PHP, R, and Golang. Skilled in frameworks like Angular and React and platforms such as Node.js. His expertise spans both front-end and back-end development. His proficiency in the Python language stands as a testament to his versatility and commitment to the craft.