ggplotcli is a universal converter that renders any
ggplot2 plot in the terminal using Unicode/ASCII characters. It
automatically extracts data, aesthetics, and styling from ggplot
objects, supporting 15+ geom types, faceting, color aesthetics, and
legends.
library(plotcli)
#> Loading required package: R6
#> Loading required package: ggplot2
#> plotcli loaded. Use plotcli_options() to set global options.
library(ggplot2)
# Create a ggplot
p <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point() +
labs(title = "MPG vs Weight by Cylinders")
# Render in terminal
ggplotcli(p, width = 60, height = 16)
#>
#> MPG vs Weight by Cylinders
#> 35.0 [31m⠄[39m
#> [31m⠐[39m
#> 30.0 [31m⠐[39m[31m⠐[39m
#> [31m⠠[39m factor(cyl)
#> m 25.0 [31m⠁[39m [31m⢀[39m [31m*[39m 4
#> p [31m⠄[39m [31m⠄[39m [36m*[39m 6
#> g 20.0 [31m⠐[39m [36m⠠[39m [31m⠐[39m[36m⠠[39m [36m⠐[39m [35m*[39m 8
#> [36m⠈[39m [36m⢰[39m [35m⠐[39m
#> [35m⡀[39m [35m⠁[39m [35m⠄[39m
#> 15.0 [35m⠈[39m[35m⠈[39m[35m⠆[39m [35m⠈[39m [35m⠂[39m
#> [35m⠁[39m
#> 10.0 [35m⠂[39m [35m⠂[39m
#> 2.0 3.0 4.0 5.0
#> wt
#> 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 = 16)
#>
#> Iris: Sepal Dimensions by Species
#> S 4.5 [31m⠠[39m
#> e [31m⡀[39m [31m⠄[39m
#> p 4.0 [31m⢀[39m [31m⠂[39m
#> a [31m⢐[39m [31m⢀[39m[31m⢀[39m [31m⠐[39m [35m⠐[39m [35m⠂[39m Species
#> l 3.5 [31m⠁[39m [31m⠁[39m[31m⠨[39m[31m⠠[39m [31m⠄[39m [31m⠄[39m [35m⠁[39m [31m*[39m setosa
#> . [31m⢀[39m [31m⡁[39m[31m⢀[39m [31m⠁[39m [31m⢨[39m[31m⠨[39m [31m⠁[39m [31m⠈[39m [36m⡀[39m[36m⠈[39m [35m⠁[39m[35m⠨[39m[35m⢀[39m [35m⡀[39m [35m⠠[39m [35m⡀[39m[35m⡀[39m[36m⢀[39m [35m⡀[39m [36m*[39m versicolor
#> W 3.0 [31m⢀[39m[31m⢀[39m [31m⠂[39m [31m⡂[39m[31m⡂[39m[31m⢀[39m [36m⢀[39m [36m⡀[39m[36m⢀[39m [35m⡀[39m[35m⢀[39m[35m⢀[39m [35m⠐[39m [35m⡀[39m[36m⢀[39m[35m⢐[39m [35m⡀[39m[35m⠂[39m [35m⡀[39m[35m⡀[39m [35m⢀[39m[35m⢀[39m [35m*[39m virginica
#> i [31m⠐[39m [35m⡂[39m[36m⢐[39m [35m⡀[39m [36m⠐[39m[36m⢐[39m [35m⡂[39m[35m⢐[39m[35m⢐[39m [36m⡀[39m[36m⠐[39m [36m⡀[39m [35m⠐[39m[35m⢀[39m [35m⢀[39m
#> d 2.5 [36m⠁[39m [36m⠄[39m[36m⠁[39m[36m⠠[39m [35m⠅[39m [36m⠈[39m[35m⠠[39m [35m⠈[39m[35m⠈[39m [35m⠠[39m
#> t [35m⠅[39m [36m⠈[39m [36m⠅[39m[36m⠁[39m[35m⠈[39m [35m⠈[39m [35m⠈[39m
#> h [31m⠁[39m [36m⠈[39m [36m⠁[39m [35m⠐[39m [36m⠂[39m[36m⠈[39m
#> 2.0 [36m⠐[39m
#> 5.0 6.0 7.0 8.0
#> Sepal.Length
#> # Multiple colored lines
df <- data.frame(
x = rep(1:30, 2),
y = c(sin(1:30/4) * 10, cos(1:30/4) * 10),
type = rep(c("sin", "cos"), each = 30)
)
p <- ggplot(df, aes(x, y, color = type)) +
geom_line() +
labs(title = "Sine and Cosine Waves")
ggplotcli(p, width = 60, height = 12)
#>
#> Sine and Cosine Waves
#> 10.0 [31m⠠[39m[31m⢄[39m[31m⡀[39m [35m⣀[39m[35m⠤[39m[35m⠒[39m[35m⠢[39m[35m⠤[39m[35m⣀[39m[35m⡀[39m [31m⣀[39m[31m⠤[39m[31m⠔[39m[31m⠒[39m[31m⠤[39m[31m⠤[39m[31m⣀[39m [35m⣀[39m[35m⠄[39m
#> [31m⠈[39m[35m⡱[39m[35m⢖[39m[35m⠉[39m [35m⠈[39m[35m⠑[39m[35m⠤[39m[35m⡀[39m [31m⣀[39m[31m⠔[39m[31m⠊[39m [35m⢉[39m[35m⠶[39m[35m⢎[39m type
#> 5.0 [35m⡠[39m[35m⠊[39m [31m⠑[39m[31m⠢[39m[31m⡀[39m [35m⠈[39m[35m⠢[39m[35m⡀[39m [31m⢠[39m[31m⠊[39m [35m⣀[39m[35m⠔[39m[35m⠁[39m [31m⠣[39m[31m⡀[39m [31m*[39m cos
#> y [35m⠈[39m [31m⠘[39m[31m⢄[39m [35m⠑[39m[35m⢄[39m [31m⢀[39m[31m⠔[39m[31m⠁[39m [35m⢠[39m[35m⠊[39m [35m*[39m sin
#> 0 [31m⠑[39m[31m⢄[39m [35m⠑[39m[35m⠤[39m[35m⡀[39m [31m⢀[39m[31m⠔[39m[31m⠁[39m [35m⢀[39m[35m⠔[39m[35m⠁[39m
#> -5.0 [31m⠑[39m[31m⠤[39m[31m⡀[39m [35m⠈[39m[35m⢆[39m [31m⢀[39m[31m⠔[39m[31m⠁[39m [35m⡰[39m[35m⠁[39m
#> [31m⠈[39m[31m⠢[39m[31m⡀[39m [35m⡱[39m[35m⠶[39m[35m⣁[39m [35m⡠[39m[35m⠒[39m[35m⠉[39m
#> -10.0 [31m⠈[39m[31m⠑[39m[31m⠒[39m[31m⠒[39m[31m⠤[39m[31m⠤[39m[31m⠒[39m[31m⠉[39m [35m⠉[39m[35m⠑[39m[35m⠒[39m[35m⠤[39m[35m⠔[39m[35m⠒[39m[35m⠉[39m
#> 0 5.0 10.0 15.0 20.0 25.0 30.0
#> x
#> p <- ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
geom_histogram(bins = 10, position = "dodge") +
labs(title = "MPG Distribution by Cylinders")
ggplotcli(p, width = 60, height = 12)
#>
#> MPG Distribution by Cylinders
#> [35m⣶[39m[35m⣶[39m
#> c 6.0 [35m⣿[39m[35m⣿[39m factor(cyl)
#> o [35m⣿[39m[35m⣿[39m [31m*[39m 4
#> u 4.0 [35m⣿[39m[35m⣿[39m [36m⢰[39m[36m⣶[39m[36m⡆[39m [36m*[39m 6
#> n [35m⣿[39m[35m⣿[39m [36m⣤[39m[35m⣤[39m[35m⣤[39m[35m⡄[39m[36m⢸[39m[36m⣿[39m[36m⡇[39m[31m⢠[39m[31m⣤[39m[31m⣤[39m [31m⣤[39m[31m⣤[39m [35m*[39m 8
#> t 2.0 [35m⢠[39m[35m⣤[39m[35m⡄[39m [35m⣤[39m[35m⣤[39m [35m⣿[39m[35m⣿[39m [36m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣧[39m[36m⣼[39m[36m⣿[39m[36m⡇[39m[31m⢸[39m[31m⣿[39m[31m⣿[39m [31m⢠[39m[31m⣤[39m[31m⡄[39m [31m⣿[39m[31m⣿[39m
#> [35m⢸[39m[35m⣿[39m[35m⡇[39m [35m⣿[39m[35m⣿[39m [35m⣿[39m[35m⣿[39m [36m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[36m⣿[39m[36m⣿[39m[36m⡇[39m[31m⢸[39m[31m⣿[39m[31m⣿[39m [31m⢸[39m[31m⣿[39m[31m⡇[39m [31m⣿[39m[31m⣿[39m [31m⢠[39m[31m⣤[39m[31m⡄[39m
#> 0 [31m⠠[39m[31m⠤[39m[36m⠤[39m[35m⠼[39m[35m⠿[39m[35m⠧[39m[36m⠤[39m[36m⠤[39m[35m⠿[39m[35m⠿[39m[31m⠤[39m[36m⠤[39m[36m⠤[39m[35m⠿[39m[35m⠿[39m[31m⠤[39m[36m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[36m⠿[39m[36m⠿[39m[35m⠧[39m[35m⠼[39m[31m⠿[39m[36m⠿[39m[36m⠤[39m[35m⠤[39m[35m⠼[39m[31m⠿[39m[36m⠧[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[36m⠤[39m[36m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠿[39m[36m⠿[39m[36m⠤[39m[35m⠤[39m[35m⠼[39m[31m⠿[39m[36m⠧[39m[35m⠤[39m[35m⠤[39m[35m⠄[39m
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> mpg
#> 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 [35m⣠[39m[35m⢦[39m
#> e 0.20 [35m⢠[39m[35m⠃[39m[35m⠈[39m[35m⣇[39m [36m⢀[39m[36m⡠[39m[36m⠞[39m[36m⠙[39m[36m⣆[39m factor(cyl)
#> n [35m⡞[39m [35m⠸[39m[35m⡀[39m [36m⢠[39m[36m⠚[39m[36m⠉[39m[36m⠁[39m [36m⠸[39m[36m⡄[39m [31m*[39m 4
#> s 0.15 [35m⢠[39m[35m⠃[39m [35m⢣[39m [36m⢠[39m[36m⠃[39m [36m⢧[39m [36m*[39m 6
#> i 0.10 [35m⢀[39m[35m⡎[39m [35m⠈[39m[35m⢆[39m[36m⡎[39m [36m⠘[39m[36m⡄[39m [35m*[39m 8
#> t 0.05 [35m⠘[39m[35m⢦[39m [35m⢀[39m[35m⡞[39m [35m⡼[39m[35m⠳[39m[35m⠤[39m[35m⠖[39m[35m⠒[39m[35m⢦[39m [31m⢀[39m[31m⣠[39m[31m⠤[39m[31m⠖[39m[36m⢳[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠦[39m[31m⠤[39m[31m⠤[39m[31m⣄[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m
#> y [35m⠈[39m[35m⢣[39m[35m⡀[39m[35m⣠[39m[35m⠞[39m [36m⡰[39m[36m⠁[39m [31m⢀[39m[31m⣀[39m[31m⡤[39m[31m⠔[39m[35m⢻[39m[35m⡉[39m [36m⠈[39m[36m⢧[39m [31m⠈[39m[31m⠉[39m[31m⠉[39m[31m⠓[39m[31m⠂[39m
#> 0 [36m⠠[39m[36m⠤[39m[36m⠤[39m[35m⠭[39m[35m⠥[39m[36m⠤[39m[36m⠤[39m[36m⠤[39m[36m⠴[39m[36m⠶[39m[36m⠒[39m[36m⠚[39m[36m⠓[39m[31m⠒[39m[31m⠉[39m[31m⠉[39m [35m⠙[39m[35m⠒[39m[35m⠦[39m[35m⠤[39m[35m⠤[39m[35m⠬[39m[35m⠷[39m[35m⠶[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠄[39m
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> mpg
#> df <- data.frame(
category = c("A", "B", "C", "D", "E", "F"),
value = c(25, 45, 30, 60, 35, 50)
)
p <- ggplot(df, aes(x = category, y = value, fill = category)) +
geom_col() +
labs(title = "Category Values")
ggplotcli(p, width = 60, height = 12)
#>
#> Category Values
#> 60.0 [36m⣶[39m[36m⣶[39m[36m⣶[39m[36m⣶[39m[36m⣶[39m[36m⣶[39m[36m⣶[39m[36m⣶[39m category
#> v 50.0 [36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m [35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m [31m*[39m A
#> a 40.0 [33m⢸[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⡇[39m [36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m [35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m [33m*[39m B
#> l 30.0 [33m⢸[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⡇[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[32m⣀[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[34m⢰[39m[34m⣶[39m[34m⣶[39m[34m⣶[39m[34m⣶[39m[34m⣶[39m[34m⣶[39m[34m⣶[39m[34m⡆[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m [32m*[39m C
#> u [31m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣤[39m[33m⢸[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⡇[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[34m⢸[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⡇[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m [36m*[39m D
#> e 20.0 [31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[33m⢸[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⡇[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[34m⢸[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⡇[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m [34m*[39m E
#> 10.0 [31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[33m⢸[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⣿[39m[33m⡇[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[32m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[36m⣿[39m[34m⢸[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⣿[39m[34m⡇[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m [35m*[39m F
#> 0 [31m⠿[39m[31m⠿[39m[31m⠿[39m[31m⠿[39m[31m⠿[39m[31m⠿[39m[31m⠿[39m[31m⠿[39m[33m⠸[39m[33m⠿[39m[33m⠿[39m[33m⠿[39m[33m⠿[39m[33m⠿[39m[33m⠿[39m[33m⠿[39m[33m⠇[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[32m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[36m⠿[39m[34m⠸[39m[34m⠿[39m[34m⠿[39m[34m⠿[39m[34m⠿[39m[34m⠿[39m[34m⠿[39m[34m⠿[39m[34m⠇[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m
#> A B C D E F
#> category
#> Boxplots are rendered with box-drawing characters by default, showing whiskers, box (Q1-Q3), median line, and outliers:
set.seed(42)
df <- data.frame(
group = factor(rep(paste0("Group ", 1:6), each = 50)),
value = c(rnorm(50, 10, 3), rnorm(50, 5, 2), rnorm(50, 8, 4),
rnorm(50, 6, 2), rnorm(50, 12, 3), rnorm(50, 7, 2))
)
p <- ggplot(df, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
labs(title = "Boxplot Colored by Group", y = "Value", x = "Group")
ggplotcli(p, width = 80, height = 20, boxplot_style = "ascii")
#>
#> Boxplot Colored by Group
#> [32m*[39m [34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m
#> [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [34m│[39m
#> [31m│[39m [32m*[39m [34m│[39m
#> 15.0 [31m│[39m [34m┌[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m┐[39m group
#> [31m│[39m [32m─[39m[32m─[39m[32m─[39m[32m*[39m[32m─[39m[32m─[39m[32m─[39m [34m│[39m [34m│[39m [31m*[39m Group 1
#> V [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m [32m│[39m [34m│[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m│[39m [35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m [33m*[39m Group 2
#> a [31m│[39m [31m│[39m [32m│[39m [34m└[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m┘[39m [35m│[39m [32m*[39m Group 3
#> l 10.0 [31m│[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m│[39m [32m┌[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┐[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [34m│[39m [35m│[39m [36m*[39m Group 4
#> u [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m [32m│[39m [32m│[39m [36m┌[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┐[39m [34m│[39m [35m┌[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m┐[39m [34m*[39m Group 5
#> e [31m│[39m [33m┌[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┐[39m [32m└[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┘[39m [36m│[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m│[39m [34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m [35m│[39m [35m│[39m [35m*[39m Group 6
#> 5.0 [31m│[39m [33m│[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m│[39m [32m│[39m [36m└[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┘[39m [35m└[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m┘[39m
#> [31m│[39m [33m└[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┘[39m [32m│[39m [36m│[39m [35m│[39m
#> [31m─[39m[31m─[39m[31m─[39m[31m*[39m[31m─[39m[31m─[39m[31m─[39m [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m [32m│[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m
#> [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m
#> 0 [33m*[39m [32m*[39m
#>
#> Group 1 Group 2 Group 3 Group 4 Group 5 Group 6
#> Group
#> You can also use Braille rendering for boxplots:
ggplotcli(p, width = 80, height = 20, boxplot_style = "braille")
#>
#> Boxplot Colored by Group
#> [32m⡀[39m
#> [34m⠒[39m[34m⠒[39m[34m⡖[39m[34m⠒[39m[34m⠂[39m
#> [31m⠉[39m[31m⠉[39m[31m⡏[39m[31m⠉[39m[31m⠁[39m [34m⡇[39m
#> 15.0 [31m⡇[39m [32m⠂[39m [34m⡇[39m group
#> [31m⡇[39m [32m⠂[39m [34m⢰[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⠓[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⢲[39m [31m*[39m Group 1
#> V [31m⢀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣇[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⡀[39m [32m⠉[39m[32m⠉[39m[32m⡏[39m[32m⠉[39m[32m⠁[39m [34m⢸[39m [34m⢸[39m [35m⢀[39m[35m⣀[39m[35m⣀[39m[35m⣀[39m[35m⣀[39m [33m*[39m Group 2
#> a [31m⢸[39m [31m⡇[39m [32m⡇[39m [34m⢸[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⢹[39m [35m⢸[39m [32m*[39m Group 3
#> l 10.0 [31m⢸[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⡇[39m [32m⡇[39m [36m⠐[39m[36m⠒[39m[36m⢲[39m[36m⠒[39m[36m⠒[39m [34m⠘[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⡖[39m[34m⠒[39m[34m⠒[39m[34m⠒[39m[34m⠚[39m [35m⢸[39m [36m*[39m Group 4
#> u [31m⠸[39m[31m⠤[39m[31m⠤[39m[31m⠤[39m[31m⠤[39m[31m⡤[39m[31m⠤[39m[31m⠤[39m[31m⠤[39m[31m⠇[39m [33m⠠[39m[33m⠤[39m[33m⢤[39m[33m⠤[39m[33m⠤[39m [32m⢰[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠓[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⢲[39m [36m⢸[39m [34m⡇[39m [35m⢰[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠚[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⡆[39m [34m*[39m Group 5
#> e [31m⡇[39m [33m⣀[39m[33m⣀[39m[33m⣀[39m[33m⣀[39m[33m⣸[39m[33m⣀[39m[33m⣀[39m[33m⣀[39m[33m⣀[39m[33m⡀[39m [32m⢸[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⢺[39m [36m⡖[39m[36m⠒[39m[36m⠒[39m[36m⠒[39m[36m⠚[39m[36m⠒[39m[36m⠒[39m[36m⠒[39m[36m⠒[39m[36m⡆[39m [34m⡇[39m [35m⢸[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⡇[39m [35m*[39m Group 6
#> 5.0 [31m⡇[39m [33m⡗[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⠒[39m[33m⡇[39m [32m⠘[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⡖[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠚[39m [36m⣏[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⣉[39m[36m⡇[39m [34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠉[39m[34m⠁[39m [35m⠘[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⢲[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠒[39m[35m⠃[39m
#> [31m⡇[39m [33m⠧[39m[33m⠤[39m[33m⠤[39m[33m⠤[39m[33m⢤[39m[33m⠤[39m[33m⠤[39m[33m⠤[39m[33m⠤[39m[33m⠇[39m [32m⡇[39m [36m⢸[39m [35m⢸[39m
#> [31m⠤[39m[31m⠤[39m[31m⡧[39m[31m⠤[39m[31m⠄[39m [33m⢀[39m[33m⣀[39m[33m⣸[39m[33m⣀[39m[33m⣀[39m [32m⡇[39m [36m⠠[39m[36m⠤[39m[36m⠼[39m[36m⠤[39m[36m⠤[39m [35m⢸[39m
#> [32m⠒[39m[32m⠒[39m[32m⠓[39m[32m⠒[39m[32m⠂[39m [35m⠐[39m[35m⠒[39m[35m⠚[39m[35m⠒[39m[35m⠒[39m
#> 0 [32m⠄[39m
#> [33m⠈[39m
#> Group 1 Group 2 Group 3 Group 4 Group 5 Group 6
#> Group
#> # 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 [35m⢰[39m[35m⣶[39m[35m⣶[39m[35m⣶[39m[35m⣶[39m[35m⣶[39m
#> e 0.08 [35m⢸[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣶[39m[31m⣶[39m[31m⣶[39m[31m⣶[39m[31m⣶[39m[35m⣶[39m[35m⣶[39m[35m⣶[39m[35m⣶[39m
#> n 0.06 [35m⢸[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m
#> s [31m⢀[39m[31m⡴[39m[31m⢻[39m[31m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[31m⣿[39m[31m⠑[39m[31m⢦[39m[31m⡀[39m
#> i 0.04 [31m⢀[39m[31m⡴[39m[31m⠋[39m [35m⢸[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣤[39m[35m⣤[39m[31m⣭[39m[31m⣷[39m[31m⣤[39m[31m⡀[39m [35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m
#> t 0.02 [35m⢠[39m[35m⣤[39m[31m⣤[39m[31m⣤[39m[31m⣾[39m[31m⣥[39m[35m⣤[39m[35m⣤[39m[35m⣤[39m[35m⣼[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[31m⣭[39m[31m⣷[39m[31m⣦[39m[31m⣤[39m[31m⣄[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣀[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[35m⣿[39m
#> y [35m⢸[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⣿[39m[35m⡇[39m [35m⣿[39m[35m⣿[39m[35m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣽[39m[31m⣶[39m[31m⣦[39m[35m⣤[39m[35m⡄[39m
#> 0 [35m⠸[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠧[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠤[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠿[39m[35m⠇[39m
#> 10.0 15.0 20.0 25.0 30.0 35.0
#> mpg
#> # Points with smooth line
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "gray") +
geom_smooth(method = "loess", color = "red") +
labs(title = "Scatter with LOESS Smooth")
suppressMessages(ggplotcli(p, width = 60, height = 12))
#>
#> Scatter with LOESS Smooth
#>
#> 35.0 [31m⢐[39m[31m⢤[39m[31m⣀[39m[31m⣀[39m[36m⠁[39m [36m⠐[39m
#> m 30.0 [31m⠉[39m[31m⠲[39m[31m⠢[39m[31m⢄[39m[31m⡀[39m
#> p 25.0 [31m⠉[39m[31m⠉[39m[31m⡒[39m[31m⠤[39m[31m⣀[39m[31m⣀[39m [36m⡐[39m
#> g 20.0 [36m⠈[39m [36m⠐[39m[31m⠉[39m[31m⠩[39m[31m⠙[39m[31m⠒[39m[31m⠒[39m[31m⠢[39m[31m⠬[39m[31m⢄[39m[31m⣀[39m[31m⣠[39m [36m⠠[39m
#> 15.0 [36m⠄[39m [31m⢈[39m[31m⠩[39m[31m⡒[39m[31m⠒[39m[31m⢣[39m[31m⠤[39m[31m⠤[39m[31m⢄[39m[31m⣂[39m[31m⣀[39m[31m⣀[39m [36m⡀[39m
#> 10.0 [36m⠁[39m [31m⠉[39m[31m⠉[39m[31m⠉[39m[31m⠉[39m[31m⠑[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠒[39m[31m⠢[39m[31m⠤[39m[31m⡤[39m[31m⠤[39m[31m⡄[39m
#>
#> 2.0 3.0 4.0 5.0
#> wt
#> Faceting works seamlessly with color/fill aesthetics and legends:
mtcars$cyl_fac <- factor(mtcars$cyl)
p <- ggplot(mtcars, aes(x = wt, y = mpg, color = cyl_fac)) +
geom_point() +
facet_wrap(~cyl_fac) +
labs(title = "MPG vs Weight: Faceted by Cylinders")
ggplotcli(p, width = 75, height = 16)
#>
#> MPG vs Weight: Faceted by Cylinders
#> 4, 1 6, 1 8, 1
#> [31m⠠[39m
#> [31m⣀[39m [31m⠁[39m
#> 30.0 cyl_fac
#> [31m⠁[39m[31m⠄[39m [31m*[39m 4
#> m [31m⡀[39m [31m⢀[39m[31m⠁[39m [36m*[39m 6
#> p 20.0 [31m⠈[39m [31m⠂[39m [36m⠂[39m[36m⡐[39m [36m⠂[39m [35m*[39m 8
#> g [36m⠅[39m [35m⠂[39m[35m⢀[39m[35m⠁[39m
#> [35m⠂[39m[35m⢤[39m[35m⠠[39m [35m⠁[39m [35m⡀[39m
#> [35m⠂[39m
#> 10.0 [35m⠐[39m[35m⠐[39m
#> 2.0 4.0 2.0 4.0 2.0 4.0
#>
#> wt
#> p <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(gear))) +
geom_point() +
facet_grid(am ~ cyl) +
labs(title = "MPG: AM (rows) x Cylinders (cols)")
ggplotcli(p, width = 80, height = 20)
#>
#> MPG: AM (rows) x Cylinders (cols)
#> 0, 4, 1 0, 6, 1 0, 8, 1
#>
#> 30.0
#> [36m⢀[39m[36m⠂[39m
#> 20.0 [31m⠁[39m [31m⠁[39m[36m⡄[39m [31m⡀[39m [31m⠄[39m
#> [31m⠔[39m[31m⠌[39m[31m⡄[39m[31m⠐[39m [31m⠄[39m factor(gear)
#> m 10.0 [31m⠠[39m[31m⠠[39m [31m*[39m 3
#> p 1, 4, 1 1, 6, 1 1, 8, 1 [36m*[39m 4
#> g [36m⠐[39m [36m⠠[39m [35m*[39m 5
#> 30.0 [35m⠉[39m [36m⡀[39m
#> [35m⠈[39m[36m⡀[39m
#> 20.0 [36m⠈[39m [35m⠢[39m[36m⠂[39m
#> [35m⠐[39m [35m⠄[39m
#> 10.0
#> 2.0 4.0 2.0 4.0 2.0 4.0
#>
#> wt
#>
#> p <- ggplot(mtcars, aes(x = hp, y = qsec)) +
geom_point(color = "cyan") +
labs(title = "Quarter Mile Time vs HP")
# With border
ggplotcli(p, width = 55, height = 12, border = TRUE)
#>
#> Quarter Mile Time vs HP
#> ⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹
#> 22.0 ⡇ [36m⠠[39m ⢸
#> q ⡇ ⢸
#> s 20.0 ⡇ [36m⢲[39m [36m⠂[39m[36m⠡[39m [36m⢀[39m ⢸
#> e 18.0 ⡇ [36m⠈[39m [36m⠁[39m [36m⢈[39m [36m⠈[39m [36m⡀[39m [36m⢀[39m[36m⠰[39m [36m⠂[39m[36m⠐[39m [36m⠠[39m ⢸
#> c ⡇ [36m⠁[39m [36m⠐[39m[36m⠁[39m [36m⠁[39m [36m⢀[39m [36m⢠[39m ⢸
#> 16.0 ⡇ [36m⠂[39m [36m⠂[39m ⢸
#> ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
#> 50.0 100 150 200 250 300
#> hp
#>
# With grid
ggplotcli(p, width = 55, height = 12, grid = "major")
#>
#> Quarter Mile Time vs HP
#> [90m⡇[39m [36m⠐[39m[90m⢸[39m [90m⡇[39m [90m⡇[39m [90m⢸[39m [90m⡇[39m
#> 22.0 [90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⢹[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⢹[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m
#> q [90m⣀[39m[90m⣀[39m[90m⣇[39m[36m⣀[39m[36m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[36m⣸[39m[36m⣄[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣇[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣇[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣸[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣇[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m[90m⣀[39m
#> s 20.0 [90m⡇[39m [36m⡂[39m [90m⢸[39m [36m⠂[39m[36m⢀[39m [90m⡇[39m [90m⡇[39m [90m⢸[39m [90m⡇[39m
#> e 18.0 [90m⠤[39m[90m⠤[39m[36m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[36m⠥[39m[90m⢼[39m[36m⠬[39m[90m⠤[39m[36m⠴[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[36m⡤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[36m⠤[39m[36m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m
#> c [90m⡇[39m [36m⠄[39m[90m⢸[39m [36m⡆[39m [36m⡇[39m [36m⠐[39m[36m⠁[39m [90m⡇[39m [36m⠈[39m [90m⢸[39m [90m⡇[39m
#> 16.0 [90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[36m⠲[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[36m⣺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m
#> [90m⡇[39m [90m⢸[39m [90m⡇[39m [90m⡇[39m [90m⢸[39m [36m⠄[39m [90m⡇[39m [36m⠐[39m
#> 50.0 100 150 200 250 300
#> hp
#>
# Both
ggplotcli(p, width = 55, height = 12, border = TRUE, grid = "major")
#>
#> Quarter Mile Time vs HP
#> ⡏⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉⠉⠉⢹
#> 22.0 ⡇ [90m⡇[39m [36m⠠[39m[90m⡇[39m [90m⡇[39m [90m⡇[39m [90m⡇[39m [90m⡇[39m ⢸
#> q [90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⡏[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⠉[39m[90m⢹[39m
#> s 20.0 [90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[36m⢲[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[36m⡗[39m[36m⠳[39m[90m⠒[39m[36m⢒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> e 18.0 [90m⡗[39m[90m⠒[39m[90m⠒[39m[36m⡟[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[36m⠓[39m[90m⡗[39m[36m⢚[39m[90m⠒[39m[36m⠚[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[36m⡗[39m[90m⠒[39m[90m⠒[39m[36m⢒[39m[36m⠲[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[36m⠒[39m[36m⠒[39m[90m⠒[39m[36m⠲[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> c [90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[36m⠥[39m[90m⡧[39m[36m⠴[39m[36m⠥[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[36m⡧[39m[90m⠤[39m[90m⠤[39m[36m⢤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[36m⢤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m
#> 16.0 ⡇ [90m⡇[39m [90m⡇[39m [90m⡇[39m [90m⡇[39m [90m⡇[39m [36m⠂[39m [90m⡇[39m [36m⠂[39m ⢸
#> ⣇⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀⣀⣀⣸
#> 50.0 100 150 200 250 300
#> hp
#> ggplotcli automatically respects ggplot2 themes:
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "blue") +
labs(title = "theme_bw() - Grid + Border")
# theme_bw has both grid and border
ggplotcli(p + theme_bw(), width = 60, height = 14, border = "auto", grid = "auto")
#>
#> theme_bw() - Grid + Border
#> 35.0 ⡏⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⢹
#> [90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[34m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m
#> 30.0 [90m⣏[39m[90m⣉[39m[90m⣉[39m[34m⣹[39m[90m⣉[39m[34m⣍[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[34m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m
#> m [90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[34m⣲[39m[90m⣗[39m[90m⣒[39m[34m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m
#> p 25.0 [90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[34m⡒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[34m⡒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> g 20.0 [90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[34m⠭[39m[90m⡯[39m[34m⠯[39m[90m⠭[39m[34m⠭[39m[34m⠯[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[34m⠭[39m[90m⠭[39m[34m⢭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[34m⡭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m
#> [90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[34m⢭[39m[90m⠭[39m[90m⠭[39m[34m⢭[39m[34m⣯[39m[90m⠭[39m[34m⠽[39m[34m⢭[39m[90m⠭[39m[90m⢽[39m[34m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m
#> 15.0 [90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[34m⣓[39m[90m⣒[39m[90m⣒[39m[34m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[34m⣓[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m
#> [90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[34m⠒[39m[90m⠒[39m[34m⢺[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> 10.0 ⣇⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣸
#> 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 = 60, height = 14, border = "auto", grid = "auto")
#>
#> theme_classic() - Border Only
#> 35.0 ⡏⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⢹[39m⠉⠉⠉⠉⠉[90m⡏[39m⠉⠉⠉⠉[90m⢹[39m⠉⠉⢹
#> [90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[34m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⡧[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m[90m⠤[39m[90m⠤[39m[90m⢼[39m
#> 30.0 [90m⣏[39m[90m⣉[39m[90m⣉[39m[34m⣹[39m[90m⣉[39m[34m⣍[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[34m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣏[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m[90m⣉[39m[90m⣉[39m[90m⣹[39m
#> m [90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[34m⣲[39m[90m⣗[39m[90m⣒[39m[34m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m
#> p 25.0 [90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[34m⡒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[34m⡒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> g 20.0 [90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[34m⠭[39m[90m⡯[39m[34m⠯[39m[90m⠭[39m[34m⠭[39m[34m⠯[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[34m⠭[39m[90m⠭[39m[34m⢭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[34m⡭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m
#> [90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[34m⢭[39m[90m⠭[39m[90m⠭[39m[34m⢭[39m[34m⣯[39m[90m⠭[39m[34m⠽[39m[34m⢭[39m[90m⠭[39m[90m⢽[39m[34m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⡯[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m[90m⠭[39m[90m⠭[39m[90m⢽[39m
#> 15.0 [90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[34m⣓[39m[90m⣒[39m[90m⣒[39m[34m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[90m⣗[39m[90m⣒[39m[90m⣒[39m[90m⣒[39m[34m⣓[39m[90m⣺[39m[90m⣒[39m[90m⣒[39m[90m⣺[39m
#> [90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⠒[39m[90m⡗[39m[90m⠒[39m[90m⠒[39m[34m⠒[39m[90m⠒[39m[34m⢺[39m[90m⠒[39m[90m⠒[39m[90m⢺[39m
#> 10.0 ⣇⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣸[39m⣀⣀⣀⣀⣀[90m⣇[39m⣀⣀⣀⣀[90m⣸[39m⣀⣀⣸
#> 2.0 3.0 4.0 5.0
#> wt
#> Three rendering modes are available:
wave <- ggplot(data.frame(x = 1:25, y = sin(1:25/4)*8), aes(x, y)) +
geom_line(color = "green")
# Braille (highest resolution - 2x4 dots per character)
ggplotcli(wave + labs(title = "Braille Canvas (highest resolution)"),
width = 50, height = 8, canvas_type = "braille")
#>
#> Braille Canvas (highest resolution)
#> [32m⢀[39m[32m⣀[39m[32m⠤[39m[32m⠔[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠒[39m[32m⠤[39m[32m⢄[39m[32m⡀[39m
#> y 5.0 [32m⠔[39m[32m⠊[39m[32m⠁[39m [32m⠈[39m[32m⠑[39m[32m⠤[39m[32m⣀[39m
#> -5.0 [32m⠉[39m[32m⠑[39m[32m⠢[39m[32m⢄[39m[32m⡀[39m [32m⣀[39m[32m⠤[39m[32m⠒[39m[32m⠉[39m
#> [32m⠈[39m[32m⠑[39m[32m⠢[39m[32m⠤[39m[32m⠤[39m[32m⠤[39m[32m⠤[39m[32m⠤[39m[32m⠤[39m[32m⠒[39m[32m⠊[39m[32m⠉[39m
#> 0 5.0 10.0 15.0 20.0 25.0
#> x
#>
# Block (medium resolution - uses block characters)
ggplotcli(wave + labs(title = "Block Canvas (medium resolution)"),
width = 50, height = 8, canvas_type = "block")
#>
#> Block Canvas (medium resolution)
#> [32m▄[39m[32m▄[39m[32m▄[39m[32m▀[39m[32m▀[39m[32m▀[39m[32m▀[39m[32m▀[39m[32m▄[39m[32m▄[39m[32m▄[39m
#> y 5.0 [32m▄[39m[32m▀[39m[32m▀[39m [32m▀[39m[32m▀[39m[32m▀[39m[32m▄[39m[32m▄[39m
#> -5.0 [32m▀[39m[32m▄[39m[32m▄[39m[32m▄[39m [32m▄[39m[32m▄[39m[32m▀[39m[32m▀[39m
#> [32m▀[39m[32m▀[39m[32m▀[39m[32m▄[39m[32m▄[39m[32m▄[39m[32m▄[39m[32m▄[39m[32m▀[39m[32m▀[39m[32m▀[39m
#> 0 5.0 10.0 15.0 20.0 25.0
#> x
#>
# ASCII (basic, most compatible)
ggplotcli(wave + labs(title = "ASCII Canvas (most compatible)"),
width = 50, height = 8, canvas_type = "ascii")
#>
#> ASCII Canvas (most compatible)
#> [32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m
#> y 5.0 [32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m [32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m
#> -5.0 [32m*[39m[32m*[39m[32m*[39m[32m*[39m [32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m
#> [32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m[32m*[39m
#> 0 5.0 10.0 15.0 20.0 25.0
#> x
#> ggplotcli intelligently maps ggplot2 colors to terminal colors (red, yellow, green, cyan, blue, magenta). The mapping prioritizes color distinctness over hue accuracy to maximize visual differentiation between groups.
Even with many groups, colors are distributed to minimize repetition:
set.seed(123)
df <- data.frame(
group = factor(rep(paste0("G", 1:8), each = 30)),
value = unlist(lapply(1:8, function(i) rnorm(30, mean = i * 2, sd = 1.5)))
)
p <- ggplot(df, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
labs(title = "8 Groups with Optimized Color Distribution")
ggplotcli(p, width = 85, height = 18, boxplot_style = "ascii")
#>
#> 8 Groups with Optimized Color Distribution
#> [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m
#> [35m*[39m [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [33m┌[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┐[39m group
#> [35m*[39m [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m [33m└[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┘[39m [31m*[39m G1
#> 15.0 [35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m [31m│[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m│[39m [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m [33m*[39m G2
#> v [34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m [35m┌[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m┐[39m [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m [32m*[39m G3
#> a [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [34m┌[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m┐[39m [35m└[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m─[39m[35m┘[39m [36m*[39m G4
#> l 10.0 [32m*[39m [36m┌[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┐[39m [34m│[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m│[39m [34m*[39m G5
#> u [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [36m└[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┘[39m [34m└[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m─[39m[34m┘[39m [35m*[39m G6
#> e [33m│[39m [32m└[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┘[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [31m*[39m G7
#> 5.0 [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [33m┌[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┐[39m [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [33m*[39m G8
#> [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m [33m└[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m┘[39m [32m*[39m
#> [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m [33m─[39m[33m─[39m[33m─[39m[33m─[39m[33m─[39m
#> 0 [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m
#>
#> G1 G2 G3 G4 G5 G6 G7 G8
#> group
#> set.seed(42)
df <- data.frame(
treatment = factor(rep(c("Control", "Drug A", "Drug B"), each = 60)),
timepoint = factor(rep(rep(c("Baseline", "Week 4", "Week 8"), each = 20), 3)),
response = c(
rnorm(20, 50, 10), rnorm(20, 52, 10), rnorm(20, 51, 10), # Control
rnorm(20, 50, 10), rnorm(20, 65, 12), rnorm(20, 70, 11), # Drug A
rnorm(20, 50, 10), rnorm(20, 58, 11), rnorm(20, 62, 10) # Drug B
)
)
p <- ggplot(df, aes(x = timepoint, y = response)) +
geom_boxplot(aes(fill = treatment)) +
labs(title = "Treatment Response Over Time",
subtitle = "Faceted by treatment group",
x = "Timepoint", y = "Response") +
theme_bw()
ggplotcli(p, width = 100, height = 22, boxplot_style = "ascii")
#>
#> Treatment Response Over Time
#> Faceted by treatment group
#> ⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹
#> 100 ⡇ [32m*[39m ⢸
#> ⡇ ⢸
#> ⡇ [32m*[39m ⢸
#> R 80.0 ⡇ [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [32m─[39m[32m─[39m[32m*[39m[32m─[39m[32m─[39m ⢸
#> e ⡇ [32m┌[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┐[39m [32m│[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m ⢸ treatment
#> s ⡇ [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [32m│[39m [32m│[39m [36m*[39m [32m┌[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┐[39m[36m┌[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┐[39m ⢸ [31m*[39m Control
#> p ⡇ [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [31m│[39m [32m│[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m│[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [32m└[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┘[39m[36m│[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m│[39m ⢸ [32m*[39m Drug A
#> o 60.0 ⡇ [31m│[39m [31m│[39m[32m┌[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┐[39m [36m│[39m [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m[32m└[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┘[39m[36m┌[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┐[39m [31m┌[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┐[39m [32m│[39m [36m└[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┘[39m ⢸ [36m*[39m Drug B
#> n ⡇ [31m│[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m│[39m[32m│[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m│[39m[36m┌[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┐[39m [31m│[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m│[39m [32m│[39m [36m└[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┘[39m [31m│[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m│[39m [32m─[39m[32m─[39m[32m*[39m[32m─[39m[32m─[39m [36m│[39m ⢸
#> s ⡇ [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m[32m└[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m┘[39m[36m│[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m│[39m [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [31m└[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m┘[39m [36m─[39m[36m─[39m[36m*[39m[36m─[39m[36m─[39m ⢸
#> e ⡇ [31m│[39m [32m─[39m[32m─[39m[32m─[39m[32m─[39m[32m─[39m [36m└[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m┘[39m [31m│[39m [36m*[39m [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m ⢸
#> 40.0 ⡇ [31m│[39m [36m│[39m [31m│[39m ⢸
#> ⡇ [31m│[39m [36m─[39m[36m─[39m[36m─[39m[36m─[39m[36m─[39m [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m ⢸
#> ⡇ [31m─[39m[31m─[39m[31m─[39m[31m─[39m[31m─[39m [31m*[39m ⢸
#> 20.0 ⡇ ⢸
#> ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
#> Baseline Week 4 Week 8
#> Timepoint
#> # Simulated experiment data
set.seed(123)
x <- seq(0, 10, length.out = 50)
df <- data.frame(
x = rep(x, 3),
y = c(
2 * x + rnorm(50, 0, 1.5),
1.5 * x + 3 + rnorm(50, 0, 1.2),
x^1.2 + rnorm(50, 0, 1)
),
group = rep(c("Linear", "Offset", "Power"), each = 50)
)
p <- ggplot(df, aes(x = x, y = y, color = group)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "loess", se = FALSE) +
labs(title = "Multi-Group Regression Analysis",
subtitle = "Points with LOESS smoothing",
x = "Predictor", y = "Response") +
theme_minimal()
suppressMessages(ggplotcli(p, width = 70, height = 18))
#>
#> Multi-Group Regression Analysis
#> Points with LOESS smoothing
#> [31m⠄[39m [31m⠠[39m
#> 20.0 [31m⠂[39m[31m⢀[39m[31m⡐[39m[31m⣤[39m[31m⢰[39m[31m⣾[39m
#> R [31m⡀[39m[31m⣠[39m[31m⡄[39m[31m⣶[39m[31m⢰[39m[31m⣇[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m
#> e 15.0 [31m⢀[39m[31m⢀[39m[31m⠠[39m[31m⡀[39m[31m⣤[39m[31m⣠[39m[31m⣾[39m[31m⣸[39m[31m⣯[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⡟[39m[31m⣿[39m[31m⢹[39m[31m⠿[39m group
#> s [31m⠂[39m[31m⡀[39m[31m⡀[39m[31m⣬[39m[31m⢰[39m[31m⣾[39m[31m⣸[39m[31m⣧[39m[31m⣿[39m[31m⣾[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⡟[39m[31m⣿[39m[31m⠹[39m[31m⠇[39m[31m⠛[39m[31m⢁[39m[31m⠁[39m [36m⠈[39m [31m*[39m Linear
#> p [32m⢀[39m [32m⡀[39m [32m⠐[39m[31m⠐[39m[31m⣀[39m[31m⣠[39m[31m⢠[39m[31m⣦[39m[31m⣿[39m[31m⣷[39m[31m⣿[39m[31m⣿[39m[31m⣿[39m[31m⢿[39m[31m⡟[39m[31m⣿[39m[31m⢻[39m[31m⠿[39m[31m⠸[39m[31m⠃[39m[31m⠋[39m[31m⠡[39m [36m⠂[39m[36m⠁[39m [32m*[39m Offset
#> o 10.0 [32m⠠[39m [31m⡀[39m[31m⣠[39m[31m⢠[39m[31m⣴[39m[31m⢴[39m[31m⡇[39m[31m⣿[39m[31m⣷[39m[31m⣿[39m[31m⣿[39m[31m⡟[39m[31m⣿[39m[31m⡏[39m[31m⡿[39m[31m⢸[39m[31m⠛[39m[31m⠘[39m[31m⠁[39m[31m⡁[39m [36m⠈[39m [36m*[39m Power
#> n [31m⡀[39m[31m⣥[39m[31m⡆[39m[31m⣶[39m[31m⢰[39m[31m⣿[39m[31m⢸[39m[31m⡇[39m[31m⣿[39m[31m⣸[39m[31m⣿[39m[31m⣿[39m[31m⡿[39m[31m⣿[39m[31m⡯[39m[31m⠿[39m[31m⠘[39m[31m⠃[39m[31m⠉[39m [36m⠐[39m
#> s [32m⡀[39m [32m⠐[39m [31m⢄[39m[31m⣀[39m[31m⢤[39m[31m⡆[39m[31m⣶[39m[31m⣖[39m[31m⣿[39m[31m⢸[39m[31m⡇[39m[31m⣿[39m[31m⣇[39m[31m⣿[39m[31m⣼[39m[31m⣿[39m[31m⢾[39m[31m⡟[39m[31m⡿[39m[31m⡹[39m[31m⠟[39m[31m⠘[39m[31m⠑[39m[31m⠁[39m [36m⠈[39m
#> e 5.0 [31m⢀[39m[31m⡀[39m[31m⣠[39m[31m⢠[39m[31m⣴[39m[31m⢰[39m[31m⡇[39m[31m⣿[39m[31m⢸[39m[31m⣿[39m[31m⢸[39m[31m⡇[39m[31m⣿[39m[31m⣧[39m[31m⣿[39m[31m⣾[39m[31m⡿[39m[31m⣿[39m[31m⡟[39m[31m⡿[39m[31m⠹[39m[31m⠫[39m[31m⠈[39m [36m⠂[39m
#> [31m⣿[39m[31m⡇[39m[31m⣿[39m[31m⢸[39m[31m⣿[39m[31m⣸[39m[31m⣿[39m[31m⣿[39m[31m⢾[39m[31m⣿[39m[31m⢻[39m[31m⡟[39m[31m⠿[39m[31m⠃[39m[31m⠛[39m[31m⠈[39m[31m⠁[39m
#> 0 [31m⣿[39m[31m⡷[39m[31m⣿[39m[31m⠿[39m[31m⢿[39m[31m⠙[39m[31m⠣[39m[31m⠋[39m[31m⡊[39m[31m⠁[39m [36m⠈[39m
#> [31m⠋[39m
#> 0 2.0 4.0 6.0 8.0 10.0
#> Predictor
#> p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
geom_point() +
facet_wrap(~Species) +
labs(title = "Iris Dataset: Sepal vs Petal Length",
subtitle = "Faceted by species with color legend") +
theme_bw()
ggplotcli(p, width = 80, height = 16)
#>
#> Iris Dataset: Sepal vs Petal Length
#> Faceted by species with color legend
#> setosa, 1 versicolor, 1 virginica, 1
#> P ⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹ ⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹ ⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹
#> e 6.0⡇ ⢸ ⡇ ⢸ ⡇ [35m⢀[39m[35m⡄[39m ⢸
#> t ⡇ ⢸ ⡇ ⢸ ⡇ [35m⡀[39m[35m⣄[39m[35m⠄[39m[35m⡤[39m[35m⡀[39m[35m⠴[39m[35m⠑[39m [35m⠂[39m[35m⠁[39m ⢸ Species
#> a ⡇ ⢸ ⡇ [36m⡀[39m[36m⣀[39m[36m⠠[39m[36m⣂[39m[36m⣄[39m[36m⣀[39m[36m⡢[39m[36m⢄[39m ⢸ ⡇ [35m⢀[39m [35m⠔[39m[35m⠒[39m[35m⠮[39m[35m⠎[39m[35m⠃[39m[35m⠊[39m[35m⠃[39m ⢸ [31m*[39m setosa
#> l 4.0⡇ ⢸ ⡇ [36m⡀[39m[36m⠄[39m[36m⠸[39m[36m⣖[39m[36m⠖[39m[36m⠊[39m[36m⠉[39m[36m⠈[39m[36m⠁[39m ⢸ ⡇ ⢸ [36m*[39m versicolor
#> . ⡇ ⢸ ⡇ [36m⠈[39m[36m⠑[39m ⢸ ⡇ ⢸ [35m*[39m virginica
#> L 2.0⡇ [31m⡀[39m[31m⣀[39m[31m⣂[39m[31m⣰[39m[31m⣀[39m[31m⣄[39m[31m⢠[39m ⢸ ⡇ ⢸ ⡇ ⢸
#> e ⡇ [31m⠈[39m[31m⠉[39m[31m⠊[39m [31m⠁[39m [31m⠉[39m [31m⠁[39m ⢸ ⡇ ⢸ ⡇ ⢸
#> n ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸ ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸ ⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
#> g 5.0 6.0 7.0 8.0 5.0 6.0 7.0 8.0 5.0 6.0 7.0 8.0
#>
#> Sepal.Length
#> | Feature | Status |
|---|---|
| geom_point | ✓ |
| geom_line, geom_path | ✓ |
| geom_bar, geom_col, geom_histogram | ✓ |
| geom_density | ✓ |
| geom_smooth | ✓ |
| geom_area | ✓ |
| geom_segment, geom_hline, geom_vline | ✓ |
| geom_rect | ✓ |
| geom_text | ✓ |
| geom_boxplot | ✓ |
| Color/fill aesthetics | ✓ |
| Legends (auto-generated) | ✓ |
| facet_wrap, facet_grid | ✓ |
| Titles, subtitles, captions | ✓ |
| Theme auto-detection | ✓ |
| Optimized color mapping | ✓ |
| Multiple canvas types | ✓ |
| geom_tile (heatmaps) | Planned |
| geom_violin | Planned |