A barplot is a chart that presents categorical data with rectangular
bars with heights or lengths proportional to the values that they
represent. The bars can be plotted vertically or horizontally. In this
example, we will create a simple barplot using base R. No need to
install any package as it is part of base R. we will use the
barplot()
function to create a barplot.
##What is needed to create a barplot? The most basic barplot in R requires only a numeric vector. This creates a vertical bar chart where each value in the vector becomes the height of a bar. The bars are automatically numbered 1, 2, 3, etc. on the x-axis.
# Basic barplot with numeric vector
values <- c(34, 23, 43)
barplot(values)
Hurray! We have created our first barplot using base R.
## Time to customize the plot We can customize the barplot by
adding colors, borders, titles, and axis labels. Here is an example with
some customisations:
# Add title and axis labels
barplot(sort(c(34, 23, 43), decreasing = TRUE),
border = 'white', col = 'tomato',
names.arg = c('first', 'third', 'second'),
main = 'My Barplot',
xlab = 'Categories',
ylab = 'Values')
Looks good! We have added a title, axis labels, and customized the colors and borders of the bars.
Now let’s break down the code step by step: Notice the new
names.arg
argument that allows us to specify custom names
for each bar.
How about the decreasing order of the bars? We can use the
sort()
function to sort the values in decreasing order
before passing them to the barplot()
function.
The main argument adds a title to the plot, while xlab and ylab add labels to the x and y axes, respectively.
The border argument specifies the color of the border around each bar, and the col argument specifies the fill color of the bars.
Lets add some more customizations to the barplot. We will make it horizontal, add grid lines, and change the axis limits.
# Horizontal barplot with grid lines and custom axis limits
barplot(sort(c(34, 23, 43), decreasing = TRUE),
border = 'white', col = 'tomato',
names.arg = c('first', 'third', 'second'),
main = 'My Barplot',
xlab = 'Values',
ylab = 'Categories',
horiz = TRUE,
xlim = c(0, 50))
grid(nx = NULL, ny = NULL, col = "lightgray", lty = "dotted",
lwd = par("lwd"), equilogs = TRUE)
In this code, we added the horiz = TRUE argument to make the bars horizontal. We also set custom x-axis limits using the xlim argument. The grid() function adds grid lines to the plot for better readability.
The nx and ny arguments in the grid() function specify the number of vertical and horizontal grid lines, respectively. Setting them to NULL lets R decide the best number of lines based on the plot size.
The col argument sets the color of the grid lines, lty specifies the line type (dotted in this case), and lwd sets the line width. The equilogs = TRUE argument ensures that the grid lines are spaced evenly on a logarithmic scale if applicable.
Lastly, we will create a stacked barplot using a matrix.
# Stacked barplot using a matrix
data_matrix <- matrix(c(10, 20, 30, 15, 25, 35), nrow = 2)
barplot(data_matrix,
beside = FALSE,
col = c('lightblue', 'lightgreen'),
names.arg = c('Category 1', 'Category 2', 'Category 3'),
main = 'Stacked Barplot',
xlab = 'Categories',
ylab = 'Values')
legend("topright", legend = c("Group 1", "Group 2"), fill = c('lightblue', 'lightgreen'))
In this example, we created a matrix with two rows and three columns. Each column represents a category, and each row represents a group within that category. The beside = FALSE argument creates a stacked barplot. We also added a legend to differentiate between the two groups.
Please note that you could just type F or FALSE and T for TRUE, but it is always better to use the full form for better readability.
The legend() function adds a legend to the plot. The “topright” argument specifies the position of the legend on the plot.
The legend argument provides the labels for each group, and the fill argument specifies the colors corresponding to each label in the legend.
Before leaving, here is a quick guide to fill colors in R:
dput(colors())
## c("white", "aliceblue", "antiquewhite", "antiquewhite1", "antiquewhite2",
## "antiquewhite3", "antiquewhite4", "aquamarine", "aquamarine1",
## "aquamarine2", "aquamarine3", "aquamarine4", "azure", "azure1",
## "azure2", "azure3", "azure4", "beige", "bisque", "bisque1", "bisque2",
## "bisque3", "bisque4", "black", "blanchedalmond", "blue", "blue1",
## "blue2", "blue3", "blue4", "blueviolet", "brown", "brown1", "brown2",
## "brown3", "brown4", "burlywood", "burlywood1", "burlywood2",
## "burlywood3", "burlywood4", "cadetblue", "cadetblue1", "cadetblue2",
## "cadetblue3", "cadetblue4", "chartreuse", "chartreuse1", "chartreuse2",
## "chartreuse3", "chartreuse4", "chocolate", "chocolate1", "chocolate2",
## "chocolate3", "chocolate4", "coral", "coral1", "coral2", "coral3",
## "coral4", "cornflowerblue", "cornsilk", "cornsilk1", "cornsilk2",
## "cornsilk3", "cornsilk4", "cyan", "cyan1", "cyan2", "cyan3",
## "cyan4", "darkblue", "darkcyan", "darkgoldenrod", "darkgoldenrod1",
## "darkgoldenrod2", "darkgoldenrod3", "darkgoldenrod4", "darkgray",
## "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen",
## "darkolivegreen1", "darkolivegreen2", "darkolivegreen3", "darkolivegreen4",
## "darkorange", "darkorange1", "darkorange2", "darkorange3", "darkorange4",
## "darkorchid", "darkorchid1", "darkorchid2", "darkorchid3", "darkorchid4",
## "darkred", "darksalmon", "darkseagreen", "darkseagreen1", "darkseagreen2",
## "darkseagreen3", "darkseagreen4", "darkslateblue", "darkslategray",
## "darkslategray1", "darkslategray2", "darkslategray3", "darkslategray4",
## "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deeppink1",
## "deeppink2", "deeppink3", "deeppink4", "deepskyblue", "deepskyblue1",
## "deepskyblue2", "deepskyblue3", "deepskyblue4", "dimgray", "dimgrey",
## "dodgerblue", "dodgerblue1", "dodgerblue2", "dodgerblue3", "dodgerblue4",
## "firebrick", "firebrick1", "firebrick2", "firebrick3", "firebrick4",
## "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold",
## "gold1", "gold2", "gold3", "gold4", "goldenrod", "goldenrod1",
## "goldenrod2", "goldenrod3", "goldenrod4", "gray", "gray0", "gray1",
## "gray2", "gray3", "gray4", "gray5", "gray6", "gray7", "gray8",
## "gray9", "gray10", "gray11", "gray12", "gray13", "gray14", "gray15",
## "gray16", "gray17", "gray18", "gray19", "gray20", "gray21", "gray22",
## "gray23", "gray24", "gray25", "gray26", "gray27", "gray28", "gray29",
## "gray30", "gray31", "gray32", "gray33", "gray34", "gray35", "gray36",
## "gray37", "gray38", "gray39", "gray40", "gray41", "gray42", "gray43",
## "gray44", "gray45", "gray46", "gray47", "gray48", "gray49", "gray50",
## "gray51", "gray52", "gray53", "gray54", "gray55", "gray56", "gray57",
## "gray58", "gray59", "gray60", "gray61", "gray62", "gray63", "gray64",
## "gray65", "gray66", "gray67", "gray68", "gray69", "gray70", "gray71",
## "gray72", "gray73", "gray74", "gray75", "gray76", "gray77", "gray78",
## "gray79", "gray80", "gray81", "gray82", "gray83", "gray84", "gray85",
## "gray86", "gray87", "gray88", "gray89", "gray90", "gray91", "gray92",
## "gray93", "gray94", "gray95", "gray96", "gray97", "gray98", "gray99",
## "gray100", "green", "green1", "green2", "green3", "green4", "greenyellow",
## "grey", "grey0", "grey1", "grey2", "grey3", "grey4", "grey5",
## "grey6", "grey7", "grey8", "grey9", "grey10", "grey11", "grey12",
## "grey13", "grey14", "grey15", "grey16", "grey17", "grey18", "grey19",
## "grey20", "grey21", "grey22", "grey23", "grey24", "grey25", "grey26",
## "grey27", "grey28", "grey29", "grey30", "grey31", "grey32", "grey33",
## "grey34", "grey35", "grey36", "grey37", "grey38", "grey39", "grey40",
## "grey41", "grey42", "grey43", "grey44", "grey45", "grey46", "grey47",
## "grey48", "grey49", "grey50", "grey51", "grey52", "grey53", "grey54",
## "grey55", "grey56", "grey57", "grey58", "grey59", "grey60", "grey61",
## "grey62", "grey63", "grey64", "grey65", "grey66", "grey67", "grey68",
## "grey69", "grey70", "grey71", "grey72", "grey73", "grey74", "grey75",
## "grey76", "grey77", "grey78", "grey79", "grey80", "grey81", "grey82",
## "grey83", "grey84", "grey85", "grey86", "grey87", "grey88", "grey89",
## "grey90", "grey91", "grey92", "grey93", "grey94", "grey95", "grey96",
## "grey97", "grey98", "grey99", "grey100", "honeydew", "honeydew1",
## "honeydew2", "honeydew3", "honeydew4", "hotpink", "hotpink1",
## "hotpink2", "hotpink3", "hotpink4", "indianred", "indianred1",
## "indianred2", "indianred3", "indianred4", "ivory", "ivory1",
## "ivory2", "ivory3", "ivory4", "khaki", "khaki1", "khaki2", "khaki3",
## "khaki4", "lavender", "lavenderblush", "lavenderblush1", "lavenderblush2",
## "lavenderblush3", "lavenderblush4", "lawngreen", "lemonchiffon",
## "lemonchiffon1", "lemonchiffon2", "lemonchiffon3", "lemonchiffon4",
## "lightblue", "lightblue1", "lightblue2", "lightblue3", "lightblue4",
## "lightcoral", "lightcyan", "lightcyan1", "lightcyan2", "lightcyan3",
## "lightcyan4", "lightgoldenrod", "lightgoldenrod1", "lightgoldenrod2",
## "lightgoldenrod3", "lightgoldenrod4", "lightgoldenrodyellow",
## "lightgray", "lightgreen", "lightgrey", "lightpink", "lightpink1",
## "lightpink2", "lightpink3", "lightpink4", "lightsalmon", "lightsalmon1",
## "lightsalmon2", "lightsalmon3", "lightsalmon4", "lightseagreen",
## "lightskyblue", "lightskyblue1", "lightskyblue2", "lightskyblue3",
## "lightskyblue4", "lightslateblue", "lightslategray", "lightslategrey",
## "lightsteelblue", "lightsteelblue1", "lightsteelblue2", "lightsteelblue3",
## "lightsteelblue4", "lightyellow", "lightyellow1", "lightyellow2",
## "lightyellow3", "lightyellow4", "limegreen", "linen", "magenta",
## "magenta1", "magenta2", "magenta3", "magenta4", "maroon", "maroon1",
## "maroon2", "maroon3", "maroon4", "mediumaquamarine", "mediumblue",
## "mediumorchid", "mediumorchid1", "mediumorchid2", "mediumorchid3",
## "mediumorchid4", "mediumpurple", "mediumpurple1", "mediumpurple2",
## "mediumpurple3", "mediumpurple4", "mediumseagreen", "mediumslateblue",
## "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue",
## "mintcream", "mistyrose", "mistyrose1", "mistyrose2", "mistyrose3",
## "mistyrose4", "moccasin", "navajowhite", "navajowhite1", "navajowhite2",
## "navajowhite3", "navajowhite4", "navy", "navyblue", "oldlace",
## "olivedrab", "olivedrab1", "olivedrab2", "olivedrab3", "olivedrab4",
## "orange", "orange1", "orange2", "orange3", "orange4", "orangered",
## "orangered1", "orangered2", "orangered3", "orangered4", "orchid",
## "orchid1", "orchid2", "orchid3", "orchid4", "palegoldenrod",
## "palegreen", "palegreen1", "palegreen2", "palegreen3", "palegreen4",
## "paleturquoise", "paleturquoise1", "paleturquoise2", "paleturquoise3",
## "paleturquoise4", "palevioletred", "palevioletred1", "palevioletred2",
## "palevioletred3", "palevioletred4", "papayawhip", "peachpuff",
## "peachpuff1", "peachpuff2", "peachpuff3", "peachpuff4", "peru",
## "pink", "pink1", "pink2", "pink3", "pink4", "plum", "plum1",
## "plum2", "plum3", "plum4", "powderblue", "purple", "purple1",
## "purple2", "purple3", "purple4", "red", "red1", "red2", "red3",
## "red4", "rosybrown", "rosybrown1", "rosybrown2", "rosybrown3",
## "rosybrown4", "royalblue", "royalblue1", "royalblue2", "royalblue3",
## "royalblue4", "saddlebrown", "salmon", "salmon1", "salmon2",
## "salmon3", "salmon4", "sandybrown", "seagreen", "seagreen1",
## "seagreen2", "seagreen3", "seagreen4", "seashell", "seashell1",
## "seashell2", "seashell3", "seashell4", "sienna", "sienna1", "sienna2",
## "sienna3", "sienna4", "skyblue", "skyblue1", "skyblue2", "skyblue3",
## "skyblue4", "slateblue", "slateblue1", "slateblue2", "slateblue3",
## "slateblue4", "slategray", "slategray1", "slategray2", "slategray3",
## "slategray4", "slategrey", "snow", "snow1", "snow2", "snow3",
## "snow4", "springgreen", "springgreen1", "springgreen2", "springgreen3",
## "springgreen4", "steelblue", "steelblue1", "steelblue2", "steelblue3",
## "steelblue4", "tan", "tan1", "tan2", "tan3", "tan4", "thistle",
## "thistle1", "thistle2", "thistle3", "thistle4", "tomato", "tomato1",
## "tomato2", "tomato3", "tomato4", "turquoise", "turquoise1", "turquoise2",
## "turquoise3", "turquoise4", "violet", "violetred", "violetred1",
## "violetred2", "violetred3", "violetred4", "wheat", "wheat1",
## "wheat2", "wheat3", "wheat4", "whitesmoke", "yellow", "yellow1",
## "yellow2", "yellow3", "yellow4", "yellowgreen")
657 colors! You can use any of these color names in the
col
argument of the barplot()
function to
customize the fill color of the bars.
This is how you can create and customize barplots using base R. Experiment with different values, arguments and colors to create visually appealing barplots for your data analysis needs! Check the next tutorial where we will create barplot using a real-world dataset: NHANES