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.
vizintel is an R package built as a course project. It is a toolkit for understanding data and checking whether a plot communicates it correctly.
Five core visualization intelligence functionalities are available:
viz_recommend() – suggests chart types based on column
profilesviz_audit() – takes a finished ggplot and checks it for
common mistakesviz_explore() – explores relationships between numeric
variables using correlation analysis and a heatmapviz_alternatives() – suggests alternative visualization
types for an existing ggplotviz_accessibility() – checks a finished ggplot for
common accessibility issuesThe package also contains internal helper functionality:
profile_data() for profiling data frames.
# from the local repo
devtools::install("path/to/R-package")Requires R >= 4.0. Packages e1071,
ggplot2, dplyr, and gridExtra are
installed automatically as dependencies. The hexbin package
is suggested (needed only for hexbin chart panels in
plot.viz_recommend_result()).
viz_recommend() looks at your data frame’s columns,
works out what type each one is, and suggests the most appropriate chart
for each.
library(vizintel)
# Recommendations for every column
viz_recommend(mtcars)
# Recommendations for a specific pair of columns
viz_recommend(mtcars, x = "wt", y = "mpg")
# Force a particular goal
viz_recommend(mtcars["mpg"], goal = "distribution")Sample output:
== vizintel chart recommendations ==
mpg -> histogram (score: 1.00)
"Shows the full distribution of a numeric variable."
-> density (score: 0.95)
"Smoother alternative to a histogram for continuous data."
-> log_histogram (score: 0.90)
"Better than a histogram when the data is heavily right- or left-skewed."
The goal parameter accepts: "distribution",
"compare", "trend",
"relationship", "composition". When left
NULL, the goal is inferred from the column type.
viz_recommend() stores the data inside its result, so
you can call plot() directly on it — no need to pass the
data again. Each recommended chart type is rendered as a real
ggplot panel and all panels are arranged in a single view
using gridExtra::grid.arrange():
res <- viz_recommend(mtcars["mpg"])
plot(res) # grid of histogram / density / log_histogram
res2 <- viz_recommend(mtcars, x = "wt", y = "mpg")
plot(res2) # scatter + hexbin panels side-by-side
plot(res, ncol = 1) # pass extra args to grid.arrange()Each panel title shows the chart type and its fit score,
e.g. histogram (score: 1.00).
viz_audit() takes any finished ggplot and runs four
checks on it. Every issue now includes a plain-English
explanation field, printed under the technical message
as "In plain terms: ..." so non-expert readers can
understand what the problem means.
library(ggplot2)
# A bar chart where the y-axis does not start at 0
p <- ggplot(data.frame(x = c("A", "B"), y = c(50, 80)), aes(x, y)) +
geom_col() +
coord_cartesian(ylim = c(40, 85))
report <- viz_audit(p)
print(report)Output:
== vizintel audit report ==
Geoms detected: GeomCol
Issues: 1 critical, 0 warning, 0 info
x [CRITICAL] Y-axis starts at 40, not 0 — bar heights are visually exaggerated.
In plain terms: Because the Y-axis does not start at zero, the bars appear
much taller relative to each other than the actual values justify. A small
real difference can look enormous, making the chart misleading at a glance.
summary(report)
# [FAIL] 1 issue(s) -- 1 critical / 0 warning / 0 infoEach issue object also carries the explanation as a field you can access programmatically:
report$issues[[1]]$explanationThe four checks it runs:
| Check | What triggers it | Level |
|---|---|---|
| Truncated axis | Bar/col plot where y-axis does not start at 0 | critical |
| Lie factor | Displayed axis range is more than 5% off the data range | warning |
| Overplotting | More than 30% of scatter points land on the same grid cell | warning |
| Dual y-axis | A secondary y-axis is defined | info |
profile_data() is internal – used by
viz_recommend() and viz_explore() to identify
and summarise columns. You can call it directly with ::: if
you want to inspect the raw column statistics.
df <- data.frame(
score = c(72, 85, 61, 90, 78),
grade = c("B", "A", "C", "A", "B"),
date = seq(as.Date("2024-01-01"), by = "week", length.out = 5)
)
vizintel:::profile_data(df)Returns one row per column with: type classification, missing count, skewness, kurtosis, normality test result, cardinality (categorical), regularity (datetime).
viz_explore() explores relationships between numeric
variables using a correlation matrix and a correlation heatmap.
library(vizintel)
result <- viz_explore(mtcars)
# View the correlation matrix
result$correlation
# Display the correlation heatmap
result$plotThe function identifies numeric variables automatically and calculates the correlation between each pair of numeric variables.
The result contains:
| Element | Description |
|---|---|
correlation |
Correlation matrix of the numeric variables |
plot |
ggplot2 correlation heatmap |
At least two numeric variables are required. Non-data-frame input and data with fewer than two numeric variables raise clear errors.
viz_alternatives() suggests alternative visualization
types for an existing ggplot based on its geometry and statistical
transformation.
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg)) +
geom_point()
viz_alternatives(p)Example result:
[1] "2D Density Plot"
[2] "2D Histogram"
The alternatives depend on the current visualization:
| Current visualization | Alternatives |
|---|---|
| Scatter plot | 2D Density Plot, 2D Histogram |
| Bar/column plot | Dot Plot, Lollipop Plot |
| Boxplot | Violin Plot, Strip Plot |
| Histogram | Density Plot, ECDF |
Histograms are distinguished from regular bar plots using the plot’s statistical transformation.
viz_accessibility() checks an existing ggplot for common
accessibility issues that may make a visualization difficult to
interpret.
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) +
geom_point()
viz_accessibility(p)The function checks for:
| Check | What it detects | Level |
|---|---|---|
| Colour count | More than 8 colour/fill values represented in the visualization | warning |
| Colour encoding | Categories distinguished through colour/fill | info |
| Text size | Text layers using size below 3 | warning |
| Shape count | More than 8 shape values | warning |
| Label count | More than 30 text labels | warning |
| Overplotting | High concentration of overlapping points | warning |
| Overplotting mitigation | Transparency used for overlapping points | info |
The function returns a list containing an issues
element. Each issue contains a severity level, check name, and
descriptive message.
If no issues are detected, the function returns:
No obvious accessibility issues detected.
The function provides practical checks for common accessibility concerns. It does not perform full WCAG compliance testing.
The five core visualization intelligence functionalities are now implemented:
viz_recommend() – visualization recommendationviz_audit() – visualization integrity auditingviz_explore() – multivariate explorationviz_alternatives() – visualization alternativesviz_accessibility() – visualization accessibilityFuture work may focus on improving the existing checks, expanding supported visualization types, and adding more test coverage.
R/
profile-data.R profile_data() and classify_column() -- internal engine
extract-plot-geometry.R shared ggplot geometry extraction for
viz_audit(), viz_alternatives(), and
viz_accessibility()
viz-recommend.R viz_recommend(), plot.viz_recommend_result(),
taxonomy table, scoring logic, and print method
viz-audit.R viz_audit(), four check functions (each with an
explanation field), print/summary methods
viz-explore.R viz_explore(), correlation analysis and heatmap
viz-alternatives.R viz_alternatives(), visualization alternatives
viz-accessibility.R viz_accessibility(), accessibility checks
tests/testthat/
test-profile-data.R 7 tests for profile_data()
test-viz-recommend.R 12 tests for viz_recommend() and plot()
test-viz-audit.R 11 tests for viz_audit() (incl. explanation field)
test-viz-explore.R 5 tests for viz_explore()
test-viz-alternatives.R 5 tests for viz_alternatives()
test-viz-accessibility.R 5 tests for viz_accessibility()
T Pooja and Ronesha Navaneethan — MIT License 2026
Supervisor: Dr Amrit Pal
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.