The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.
The ggplotcli() function converts any ggplot2 plot to a
terminal-based visualization using Unicode Braille characters and ANSI
colors.
library(plotcli)
library(ggplot2)
# Create a ggplot with points and smooth line
mtcars_ggplot <- ggplot(mtcars, aes(x = mpg, y = wt)) +
geom_point() +
geom_smooth(method = "lm", color = "red") +
labs(title = "Mtcars Dataset with Regression Line",
x = "Miles per Gallon",
y = "Weight")
# Render in terminal
suppressMessages(ggplotcli(mtcars_ggplot, width = 60, height = 15))
#>
#> Mtcars Dataset with Regression Line
#> ⢠ ⡀
#> 5.0
#> W ⠐⠢⢄⣀⡀
#> e 4.0 ⠈⠉⡑⠒⠤⠤⣀ ⠐ ⡀
#> i ⠄⠠⡡⠉⠉⠒⠣⣤⢄⣀⡀
#> g 3.0 ⠂ ⠉⠉⠒⠤⠴⣀⡀⠂ ⠂
#> h ⠁ ⠨⢈ ⠈⠉⠑⠒⠤⢄⣀
#> t 2.0 ⠁ ⠩⠉⠒⠢⠤⢄⡀ ⠂
#> ⠁ ⠈⠉⠑⡖⠤⠤⣀⣀ ⠁
#> 1.0 ⠉⠑⠂
#>
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> Miles per Gallon
#> ggplotcli supports color grouping just like ggplot2:
# Colored by group
p <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point() +
labs(title = "MPG vs Weight by Cylinders",
color = "Cylinders")
ggplotcli(p, width = 60, height = 14)
#>
#> MPG vs Weight by Cylinders
#> 35.0 ⠄
#> ⢀⢀ ⠈
#> 30.0 Cyl
#> m ⠈ ⠄ * 4
#> p 25.0 ⡀ ⡈ * 6
#> g 20.0 ⠈ ⠐ ⢐⠐ ⠐ * 8
#> ⠸ ⡀⠈
#> 15.0 ⠂ ⠠⠠⡄ ⠠ ⠁ ⡀
#> ⠂
#> 10.0 ⠂ ⠂
#> 2.0 3.0 4.0 5.0
#> wt
#> # Iris dataset with species colors
p <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
geom_point() +
labs(title = "Iris: Sepal Dimensions by Species")
ggplotcli(p, width = 60, height = 12)
#>
#> Iris: Sepal Dimensions by Species
#> S 4.5 ⠐
#> e 4.0 ⠂ ⢀ ⠁ ⠄ Species
#> p ⡀ ⡀⢀⠨ ⠠⠠ ⠈ ⡀ ⠈ ⠁ * setosa
#> a 3.5 ⢀ ⡂⢀ ⠂ ⢸⠸ ⠃ ⠐ ⠁ ⡀⠐ ⠂⠰⢀ ⡀ ⠠ ⡀⡀⢀ ⡀ * versicolor
#> l 3.0 ⠠⢠ ⠂ ⠆⠆⠠ ⠠ ⡄⢠ ⠄⢠⢠ ⡀⢀⢐ ⠄⢠⠰ ⠄⠂ ⠄⠄⢀ ⠠⠠ * virginica
#> . 2.5 ⠂ ⡀⠃⢈ ⡃ ⠐⢈ ⠁⠘⠘ ⠁ ⠁ ⠈ ⢈
#> W ⠄ ⠃⠠⠈ ⠇⠁⠈ ⢀ ⡀⠨ ⠈
#> i 2.0 ⠠
#> 5.0 6.0 7.0 8.0
#> Sepal.Length
#> p <- ggplot(mtcars, aes(x = mpg, color = factor(cyl))) +
geom_density() +
labs(title = "MPG Density by Cylinders")
ggplotcli(p, width = 60, height = 12)
#>
#> MPG Density by Cylinders
#> d 0.25 ⣠⢦
#> e 0.20 ⢠⠃⠈⣇ ⢀⡠⠞⠙⣆ fac
#> n ⡞ ⠸⡀ ⢠⠚⠉⠁ ⠸⡄ * 4
#> s 0.15 ⢠⠃ ⢣ ⢠⠃ ⢧ * 6
#> i 0.10 ⢀⡎ ⠈⢆⡎ ⠘⡄ * 8
#> t 0.05 ⠘⢦ ⢀⡞ ⡼⠳⠤⠖⠒⢦ ⢀⣠⠤⠖⢳⠒⠒⠒⠒⠒⠦⠤⠤⣄⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀
#> y ⠈⢣⡀⣠⠞ ⡰⠁ ⢀⣀⡤⠔⢻⡉ ⠈⢧ ⠈⠉⠉⠓⠂
#> 0 ⠠⠤⠤⠭⠥⠤⠤⠤⠴⠶⠒⠚⠓⠒⠉⠉ ⠙⠒⠦⠤⠤⠬⠷⠶⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> mpg
#> Split plots by a categorical variable:
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "blue") +
facet_wrap(~cyl) +
labs(title = "MPG vs Weight by Cylinders")
ggplotcli(p, width = 70, height = 14)
#>
#> MPG vs Weight by Cylinders
#> 4 6 8
#> ⠠
#> ⠤ ⠁
#> 30.0 ⡀
#> ⠈ ⠠
#> ⠐⠄⢀ ⠐ ⡀⡀⢀
#> 20.0 ⠐ ⢐ ⠠ ⠐
#> ⠠⢀⡀⡁⠐
#> ⠁⠐ ⠈
#> 10.0 ⠒
#> 2.0 4.0 2.0 4.0 2.0 4.0
#>
#> Create a grid of plots by two variables:
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "green") +
facet_grid(am ~ cyl) +
labs(title = "MPG: Transmission (rows) x Cylinders (cols)")
ggplotcli(p, width = 70, height = 18)
#>
#> MPG: Transmission (rows) x Cylinders (cols)
#> 0, 4 0, 6 0, 8
#>
#> 30.0
#> ⢐
#> 20.0 ⠁ ⠈⢠ ⢀ ⠠
#> ⠠⠆⢅⠐ ⠠
#> 10.0 ⠤
#> 1, 4 1, 6 1, 8
#> ⠐ ⠄
#> 30.0 ⠉ ⡀
#> ⠈⢀
#> 20.0 ⠈ ⠢⠂
#> ⠐ ⠄
#> 10.0
#> 2.0 4.0 2.0 4.0 2.0 4.0
#>
#> # Histogram with density overlay
p <- ggplot(mtcars, aes(x = mpg)) +
geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "gray") +
geom_density(color = "red") +
labs(title = "Histogram with Density Overlay")
ggplotcli(p, width = 60, height = 12)
#>
#> Histogram with Density Overlay
#> d ⢰⣶⣶⣶⣶⣶
#> e 0.08 ⢸⣿⣿⣿⣿⣿⣶⣶⣶⣶⣶⣶⣶⣶⣶
#> n 0.06 ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
#> s ⢀⡴⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠓⢦⡀
#> i 0.04 ⣀⠴⠋ ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣤⣭⣶⣤⡀ ⣤⣤⣤⣤⣤
#> t 0.02 ⢠⣤⣤⣤⣾⣥⣤⣤⣤⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣭⣶⣦⣤⣄⣀⣀⣀⣀⣿⣿⣿⣿⣿
#> y ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⣿⣿⣿⣿⣿⣽⣶⣤⣤⡄
#> 0 ⠸⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠧⠤⠤⠤⠤⠿⠿⠿⠿⠿⠿⠿⠿⠿⠇
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> mpg
#> Three rendering modes are available:
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "blue")
# High resolution with Braille (default)
ggplotcli(p + labs(title = "Braille Canvas (default)"),
width = 50, height = 10, canvas_type = "braille")
#>
#> Braille Canvas (default)
#> 35.0 ⠂ ⠠
#> m 30.0 ⠁⠁ ⡀
#> p 25.0 ⠁⢀ ⢀⠂
#> g 20.0 ⠁⠐ ⠅⠂ ⠈ ⢠ ⠠
#> 15.0 ⠂ ⠠⠢ ⠈⢄ ⠐ ⠄
#> 10.0 ⠄⠠
#> 2.0 3.0 4.0 5.0
#> wt
#>
# Block characters (medium resolution)
ggplotcli(p + labs(title = "Block Canvas"),
width = 50, height = 10, canvas_type = "block")
#>
#> Block Canvas
#> 35.0 ▀ ▄
#> m 30.0 ▀▀ ▄
#> p 25.0 ▀ ▄ ▄▄
#> g 20.0 ▀▀ █▀ ▀ ▄ ▄
#> 15.0 ▀ ▀█ ▀▄ ▀ ▄
#> 10.0 ▄ ▄
#> 2.0 3.0 4.0 5.0
#> wt
#>
# ASCII for maximum compatibility
ggplotcli(p + labs(title = "ASCII Canvas"),
width = 50, height = 10, canvas_type = "ascii")
#>
#> ASCII Canvas
#> 35.0 *
#> m 30.0 ** *
#> p 25.0 * * * **
#> g 20.0 ** ** * * **
#> 15.0 * ** ** * *
#> 10.0 * *
#> 2.0 3.0 4.0 5.0
#> wt
#> p <- ggplot(mtcars, aes(x = hp, y = qsec)) +
geom_point(color = "cyan") +
labs(title = "With Border and Grid")
# Add border and grid
ggplotcli(p, width = 55, height = 10, border = TRUE, grid = "major")
#>
#> With Border and Grid
#> ⡏⠉⢹⠉⠉⠉⠉⠉⠉⡉⡏⠉⠉⠉⠉⠉⠉⡏⠉⠉⠉⠉⠉⠉⡏⠉⠉⠉⠉⠉⠉⢹⠉⠉⠉⠉⠉⠉⢹⠉⠉⠉⠉⠉⠉⠉⢹
#> q 22.0 ⡗⠒⢺⠒⠒⠒⠒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⠒⢺
#> s 20.0 ⡗⠒⢺⠒⠒⡖⠒⠒⠒⠒⡟⠲⠒⡒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⠒⢺
#> e 18.0 ⡗⠒⢺⠓⠒⠒⠒⠒⠒⠓⡗⢓⠒⠓⠒⠒⠒⡗⠒⠒⢒⠲⠒⠒⡗⠒⠒⠒⠲⠒⠒⢺⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⠒⢺
#> c 16.0 ⡗⠒⢺⠒⠒⠒⠒⠒⠚⠒⡗⠚⠒⠒⠒⠒⠒⡗⠒⠒⠲⠒⠒⠒⡗⠒⠒⠒⠒⠒⠲⢺⠒⠒⠒⠒⠒⠒⢺⠒⠒⠒⠒⠒⠒⠒⢺
#> ⣇⣀⣸⣀⣀⣀⣀⣀⣀⣀⣇⣀⣀⣀⣀⣀⣀⣇⣀⣀⣀⣀⣀⣀⣇⣀⣀⣀⣀⣀⣀⣸⣀⣈⣀⣀⣀⣀⣸⣀⣀⣀⣀⣈⣀⣀⣸
#> 50.0 100 150 200 250 300
#> hp
#> ggplotcli automatically respects ggplot2 themes:
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "magenta")
# theme_bw adds grid and border
ggplotcli(p + theme_bw() + labs(title = "theme_bw() - Grid + Border"),
width = 55, height = 10, border = "auto", grid = "auto")
#>
#> theme_bw() - Grid + Border
#> 35.0 ⣏⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣹⣉⣉⣉⣉⣹⣉⣉⣉⣉⣹⣉⣉⣉⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣹⣉⣹
#> m 30.0 ⣯⣭⣭⣯⣯⣭⣭⣭⣯⣭⣭⣭⣭⣯⣭⣭⣭⣭⣽⣭⣭⣭⣭⣽⣭⣭⣭⣭⣽⣭⣭⣭⣭⣭⣯⣭⣭⣭⣭⣯⣭⣭⣭⣭⣽⣭⣽
#> p 25.0 ⡷⠶⠶⡷⠶⠶⠶⠾⡷⠶⠶⢶⠶⡷⠶⠶⠶⠶⢾⠶⡶⠶⠶⢾⠶⠶⠶⠶⢾⠶⠶⠶⠶⠶⡷⠶⠶⠶⠶⡷⠶⠶⠶⠶⢾⠶⢾
#> g 20.0 ⣟⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣻⣛⣛⣛⣛⣿⣛⣛⣛⣟⣻⣛⣛⣛⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣻⣛⣻
#> 15.0 ⣟⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣻⣛⣛⣛⣛⣻⣛⣛⣛⣟⣻⣛⣛⣛⣛⣛⣟⣛⣛⣛⣛⣟⣛⣛⣛⣛⣻⣛⣻
#> 10.0 ⣏⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣹⣉⣉⣉⣉⣹⣉⣉⣉⣉⣹⣉⣉⣉⣉⣉⣏⣉⣉⣉⣉⣏⣉⣉⣉⣉⣹⣉⣹
#> 2.0 3.0 4.0 5.0
#> wt
#>
# theme_classic has border but no grid
ggplotcli(p + theme_classic() + labs(title = "theme_classic() - Border Only"),
width = 55, height = 10, border = "auto", grid = "auto")
#>
#> theme_classic() - Border Only
#> 35.0 ⡏⠉⠉⠉⠉⠉⢉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹
#> m 30.0 ⡇ ⠂⠂ ⠁ ⢸
#> p 25.0 ⡇ ⠈ ⠐ ⢀ ⡠ ⢸
#> g 20.0 ⡇ ⠁⠈ ⠃⠁ ⠈ ⡄ ⡀⠄ ⢸
#> 15.0 ⡇ ⠁ ⠂⠑ ⠐⠄ ⠈ ⠐ ⢸
#> 10.0 ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣈⣀⣈⣀⣀⣸
#> 2.0 3.0 4.0 5.0
#> wt
#> See the full vignette “ggplotcli: Universal ggplot2 to Terminal Plotting” for more examples including all supported geoms, advanced styling, and more.
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.