library(plotbb)
p <- bbplot(mtcars, bb_aes(mpg, disp, col = factor(cyl)))
p + bb_grid(col = "grey50", lty = "dashed") + bb_point(pch = 19)The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
2026-01-16
bb_aes() for aesthetic mapping, that equivalents to ggplot2::aes().
library(plotbb)
p <- bbplot(mtcars, bb_aes(mpg, disp, col = factor(cyl)))
p + bb_grid(col = "grey50", lty = "dashed") + bb_point(pch = 19)p2 <- p + bb_point() + bb_lm(bb_aes(group = cyl), lwd = 2)
p3 <- p2 + bb_lm(col = "red", lwd = 3, lty = "dotted")
p4 <- p + bb_text(bb_aes(label = cyl), cex = 2)
aplot::plot_list(p2, p3, p4, ncol = 3, tag_levels = "A")d2 <- group_by(mtcars, cyl) %>%
summarize(
x = cyl[1],
y = mean(disp),
sd = sd(disp)
)
g1 <- bbplot(d2, bb_aes(x, y)) +
bb_line(col = "grey50") +
bb_point(pch = 19, cex = 1.5) +
bb_errorbar(bb_aes(ymin = y - sd, ymax = y + sd), width = 0.8)
seg <- data.frame(x = 15, y = 150, xend = 30, yend = 450)
g2 <- bbplot(seg, bb_aes(x, y)) +
bb_point(pch = 19) +
bb_segment(bb_aes(xend = xend, yend = yend), lwd = 3, col = "steelblue")
aplot::plot_list(g1, g2, ncol = 2, tag_levels = "A")bbplot(mtcars, bb_aes(cyl, mpg, col = factor(cyl))) +
bb_bar(stat = "count") +
bb_legend(position = "topleft")df <- data.frame(
x = rep(1:10, 12),
y = rep(1:12, each = 10),
values = rnorm(120, mean = 10, sd = 5),
type = sample(LETTERS[1:5], 120, replace = TRUE),
stringsAsFactors = FALSE
)
h1 <- bbplot(df, bb_aes(x, y, col = values)) + bb_tile() +
bb_title("heatmap for continuous numerical values")
h2 <- bbplot(df, bb_aes(x, y, col = values)) + bb_tile() + bb_scale_col_palette("YlOrRd") +
bb_title("applying a color palette")
h3 <- bbplot(df, bb_aes(x, y, col = type)) + bb_tile() +
bb_title("heatmap for discrete categorical values")
h4 <- bbplot(df, bb_aes(x, y, col = values)) + bb_tile() + bb_text(col = "black") +
bb_title("heatmap with text labels") + bb_theme_expand()
aplot::plot_list(h1, h2, h3, h4, ncol = 2, tag_levels = "A")p2 + bb_labs(
title = "hello",
sub = "just for demo",
xlab = "this is xlab",
ylab = "this is ylab"
) +
bb_title("hello world")g <- p2 +
bb_theme(
col.main = "red",
cex.main = 2,
mar = c(4, 4, 3, 1)
) +
bb_title("applying graphics::par")
g2 <- p2 + bb_title("theme has no side effect")
aplot::plot_list(g, g2, ncol = 2, tag_levels = "A")bb_theme has no side effect and will only apply to the bbplot object that it added to. This is very important for developing pre-defined themes.
p4 <- p3 + bb_theme_expand()
aplot::plot_list(p4, p3, ncol = 2, tag_levels = "A")p + bb_grid(col = "grey50", lty = "dashed") +
bb_point(pch = 19) +
bb_theme_expand() +
bb_theme_grey()p + bb_point(pch = 19, cex = 2) +
bb_theme_expand() +
bb_theme_deepblue()Color scales can be added anywhere in the + chain and will affect both layers and legends.
pal <- c(`4` = "#1b9e77", `6` = "#d95f02", `8` = "#7570b3")
bbplot(mtcars, bb_aes(mpg, disp, col = factor(cyl))) +
bb_point(pch = 19) +
bb_scale_col_manual(pal) +
bb_legend()bbplot(mtcars, bb_aes(mpg, disp, col = hp)) +
bb_point(pch = 19) +
bb_scale_col_gradient(low = "grey80", high = "firebrick") +
bb_legend()p + bb_point(pch = 19) + bb_legend()p + bb_point(pch = 19) + bb_facet_wrap(~cyl, ncol = 3)p + bb_point(pch = 19) + bb_facet_wrap(~cyl, ncol = 3, scales = "free_y")Suppose we have existing code to plot something:
plot(mtcars$mpg, mtcars$disp)
abline(lm(disp ~ mpg, data = mtcars), col = "red")We can wrap the codes into a function:
f <- function() {
plot(mtcars$mpg, mtcars$disp)
abline(lm(disp ~ mpg, data = mtcars), col = "red")
}Then we can convert it to a bbplot object. The plot produced by the function will be used as the canvas, and we can apply theme and add layers to it:
library(dplyr)
d <- group_by(mtcars, cyl) %>%
summarize(xm = mean(mpg), ym = mean(disp))
pp <- as.bbplot(f) +
bb_theme_expand() +
bb_theme_grey() +
bb_lm(bb_aes(mpg, disp, group = cyl, col = factor(cyl)), data = mtcars, lwd = 2, lty = "dashed") +
bb_point(bb_aes(xm, ym, col = factor(cyl)), data = d, pch = 19, cex = 2) +
bb_title("hello plotbb") +
bb_grid(col = "grey30", lty = "dashed")As there are many features currently not available, plotbb supports adding layers using base graphics commands that you are already familiar with. Any base graphics commands in formula, expression or function can be served as layer to be added to a bbplot object.
pp + (~points(30, 400, pch = 19, col = "red", cex = 3)) +
~text(30, 420, label = "hae fun :)", col = "blue", cex = 1.2)Here is another example to use plotbb with the ape package to visualize phylogenetic tree.
require(ape)
set.seed(2020 - 09 - 10)
x = rtree(10)
p = as.bbplot(
function()
plot(
x,
cex = 2,
edge.width = 2,
edge.color = "white",
tip.color = "purple"
)
)
p + bb_theme_expand() + bb_theme_deepblue() +
(~nodelabels(node = 14, pie = matrix(rep(1, 4), 1), cex = 2)) +
(~nodelabels(node = 15, pie = matrix(rep(1, 3), 1), cex = 2)) +
(~nodelabels(node = 18, pie = matrix(rep(1, 5), 1), cex = 2)) +
bb_labs(title = "phylogenetic tree plotted by base graphics") +
bb_theme(col.main = "firebrick", cex.main = 2)These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.