
plotcli renders ggplot2 plots directly in the terminal using Unicode Braille characters and ANSI colors.
Write your ggplot code as usual, then call ggplotcli() to see it in the console -- no graphics device needed.
Inspired by the excellent UnicodePlots.jl.
# From CRAN
install.packages("plotcli")
# Development version from GitHub
# remotes::install_github("cheuerde/plotcli")
install.packages("plotcli", repos = c('https://cheuerde.r-universe.dev', 'https://cloud.r-project.org'))
Any ggplot2 plot works. Build your plot as usual, then pass it to ggplotcli():
library(plotcli)
library(ggplot2)
p <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point() +
labs(title = "MPG vs Weight by Cylinders",
x = "Weight (1000 lbs)", y = "Miles per Gallon",
color = "Cylinders") +
theme_bw()
ggplotcli(p)

p <- ggplot(df, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
labs(title = "Distribution Comparison by Group")
ggplotcli(p)

p <- ggplot(economics, aes(x = date, y = unemploy)) +
geom_line(color = "steelblue") +
geom_smooth(color = "red", se = FALSE) +
labs(title = "US Unemployment Over Time")
ggplotcli(p)




cor_mat <- cor(mtcars[, c("mpg", "cyl", "disp", "hp", "wt", "qsec")])
df <- as.data.frame(as.table(cor_mat))
names(df) <- c("Var1", "Var2", "value")
p <- ggplot(df, aes(Var1, Var2, fill = value)) +
geom_tile() +
labs(title = "Correlation Heatmap", fill = "correlation")
ggplotcli(p)

p <- ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(color = "steelblue") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
facet_wrap(~drv) +
theme_bw()
ggplotcli(p, width = 80, height = 18)

Block canvas -- medium resolution using block characters:

ASCII canvas -- basic ASCII for maximum compatibility:

| Geom | Status |
|---|---|
geom_point |
:white_check_mark: |
geom_line, geom_path
|
:white_check_mark: |
geom_step |
:white_check_mark: |
geom_bar, geom_col, geom_histogram
|
:white_check_mark: |
geom_boxplot |
:white_check_mark: |
geom_violin |
:white_check_mark: |
geom_density |
:white_check_mark: |
geom_smooth |
:white_check_mark: |
geom_area |
:white_check_mark: |
geom_ribbon |
:white_check_mark: |
geom_segment, geom_hline, geom_vline, geom_abline
|
:white_check_mark: |
geom_errorbar, geom_linerange, geom_pointrange, geom_crossbar
|
:white_check_mark: |
geom_rect, geom_tile, geom_raster (heatmaps) |
:white_check_mark: |
geom_text, geom_label
|
:white_check_mark: |
geom_rug |
:white_check_mark: |
facet_wrap, facet_grid
|
:white_check_mark: |
# Control size
ggplotcli(p, width = 80, height = 24)
# Canvas types
ggplotcli(p, canvas_type = "braille") # High resolution (default)
ggplotcli(p, canvas_type = "block") # Block characters
ggplotcli(p, canvas_type = "ascii") # ASCII only
For lower-level control, use the plotcli R6 class directly:
pc <- plotcli$new(plot_width = 60, plot_height = 20, x_label = "wt", y_label = "mpg",
title = "MPG vs Weight")
pc$add_data(list(x = mtcars$wt, y = mtcars$mpg, type = "scatter", name = "mtcars"))
pc$print_plot()
plotcli is released under the LGPL-3 License.