Introduction
Insper’s brand guide covers print, not charts. It specifies Pantone
references, tints and shades per hue family, and rules for text on
colored backgrounds, but no categorical sequence and no guidance on
which palette suits which kind of data. This vignette records how
insperplot fills those gaps, which of its palettes are
brand tokens verbatim, and which are derived.
Accessibility
The main palette is the brand’s own hue set, and it puts
red, green, orange and yellow next to one another. That is a difficult
combination under the common forms of color vision deficiency:
deuteranopia and protanopia both compress the red-green axis, so
categories that look obviously distinct to you may collapse into one
another for roughly 1 in 12 male readers.
insper_palette("main")
When distinguishability matters more than brand fidelity — a chart
with many categories, a slide seen from the back of a room, a document
you cannot control the rendering of — use the colorblind
palette instead. It is the Okabe-Ito set, chosen
precisely so that its colors stay separable across the usual color
vision deficiencies.
insper_palette("colorblind")
This is the one palette in insperplot that contains no
Insper colors, and that is deliberate. Treat it as an escape hatch
rather than a default: reach for main for on-brand work,
and switch when you have a reason to.
A second, separate question is what color text should sit on top
of a brand color. The brand guide rules on this directly for the
family base colors and neutrals, and those rules are shipped in the
acessibilidade column of the
insper_color_reference dataset.
subset(
insper_color_reference,
!is.na(acessibilidade),
select = c(nome, hex, acessibilidade)
)
#> # A tibble: 15 × 3
#> nome hex acessibilidade
#> <chr> <chr> <chr>
#> 1 vermelho #E50505 branco
#> 2 branco #FFFFFF preto
#> 3 preto #000000 branco
#> 4 verde 0 #92D053 preto
#> 5 amarelo 0 #FFCC00 preto
#> 6 laranja 0 #F89D49 preto
#> 7 rosa 0 #F47DCD ambos
#> 8 roxo 0 #730D9F branco
#> 9 turquesa 0 #3ACC9F ambos
#> 10 cinza 0 #DCDCDC preto
#> 11 cinza 1 #ABABAB preto
#> 12 cinza 2 #808080 branco
#> 13 cinza 3 #5B5B5B branco
#> 14 cinza 4 #3F3F3F branco
#> 15 azul escuro #0E171D brancoThe guide does not rule on the tints and shades, so those rows are
NA. For those, insperplot falls back to
computing WCAG relative luminance at draw time — this is what picks the
per-bar label color in insper_barplot() when you use the
stacked or filled variants, so labels stay readable without you
specifying anything.
Typography
Brand guidelines
Insper’s brand guidelines assign three fonts.
- GT Ultra Fine Bold carries titles, subtitles and most highlights.
- Acumin Pro ExtraCondensed Bold carries other highlights, always in uppercase.
- Inter carries body text, with Verdana as a fallback.
Following them literally gives the code below.
theme_minimal(base_family = "Inter 18pt") +
theme_sub_plot(
title = element_text(family = "GT Ultra Fine Bold", size = 22),
subtitle = element_text(family = "GT Ultra Fine Bold", size = 10),
caption = element_text(family = "Inter 18pt")
)
some_plot +
annotate(
"text",
label = "SOME HIGHLIGHT ALWAYS IN CAPS",
family = "Acumin Pro ExtraCondensed",
)There are several problems with this typography scheme. GT Ultra is a proprietary (and expensive) font, Acumin Pro and Verdana are available on some operating systems but not on others. Inter is not available on most operating systems, but is freely available for download from Google Fonts.
insperplot implementation
insperplot bundles Inter, so the font installs with the
package, and falls back to a system serif for titles. The package uses
Inter for everything except the title, which uses Georgia.
tinsper <- theme_insper()
tinsper$plot.title@family
#> "Georgia"
tinsper$plot.subtitle@family
#> "Inter"
tinsper$text@family
#> "Inter"The default theme_insper() will produce a plot like the
one below.
base_plot <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
labs(
title = "Basic Theme",
subtitle = "USING THE PACKAGE TO MAKE PLOTS",
x = "Miles per Gallon",
y = "Weight (lbs)",
caption = "Source: mtcars | Insper"
)
base_plot +
theme_insper()
Users that have GT Ultra, Acumin, or Verdana installed can use them
by setting font_title and font_text in
theme_insper().
base_plot +
theme_insper(font_title = "GT Ultra", font_text = "Verdana")Where Acumin is installed, it can carry subtitles and highlights.
Neither of the two chunks below is evaluated when this vignette is
built, because the fonts they name are not bundled and
element_text() falls back silently when a family is
missing, which would show you a rendered figure in the wrong font.
base_plot +
theme_insper(
font_title = "Georgia",
font_text = "Inter"
) +
theme_sub_plot(
subtitle = element_text(family = "Acumin Pro ExtraCondensed", size = 14)
)Verdana ships with most operating systems, but it buys little here, since Inter is bundled with the package.
base_plot +
theme_insper(
font_title = "Georgia",
font_text = "Verdana"
)Colors
Insper’s brand guidelines are written for printed materials, with little emphasis on data visualization. The kit specifies Pantone references and a handful of tints and shades per hue family; it does not specify a categorical sequence. As a result, the bundled palettes will not always work out of the box, and it helps to know how each one was built.
Where each palette comes from
Some palettes are the brand kit verbatim.
-
mainis the six secondary hue bases plus vermelho, interleaved so that adjacent categories contrast. - The six hue sequentials —
turquesa,verde,amarelo,laranja,rosa,roxo— are the kit’s own five tokens per family, sorted light to dark by perceptual lightness. No color was invented. -
cinzais the five neutral grays.
Others are derived, because the kit does not ship what a chart needs.
-
mutedismaindesaturated by 25%. None of its seven hexes appear in the guide. It exists because full-chroma brand hues are overwhelming across large filled areas. -
vermelhoandazulare interpolated ramps. The kit ships no tints or shades for either, only the single base token, so the intermediate steps were generated perceptually and only the endpoints are official. - The four diverging palettes have brand colors at both arms but share
a neutral midpoint,
#F4F4F2, which is not a brand token.
And colorblind is derived from the Okabe-Ito palette,
which is not an Insper palette.
Building a categorical set by hand
When main is too loud and muted is not
distinct enough, you can pull mid-range steps out of the sequential
ramps. Those steps are still brand colors, and getting them to work is
mostly a trial and error process.
paleta <- c(
insper_palette("turquesa")[4],
insper_palette("amarelo")[3],
insper_palette("roxo")[2],
insper_palette("muted")[1],
insper_palette("cinza")[3],
insper_palette("verde")[3],
insper_palette("laranja")[3]
)The indices are chosen by eye rather than by rule: darker steps for the light families (turquesa, amarelo, verde, laranja) and a lighter step for roxo, which is very dark at its base. The result is shown below on a stacked bar chart and a stacked area chart.


Insper Cidades
The Centro de Estudos das Cidades — Laboratório Arq.Futuro publishes its own application manual, with four colors of its own alongside the shared institutional vermelho, branco and preto.
insper_palette("cidades")
These are folhagem, solar,
asfalto and tijolo. Everything prefixed
cidades in insperplot comes from that manual
rather than the institutional brand kit, and nothing in the package
defaults to them — they are opt-in.
The sequential ramps are derived
Unlike the six institutional hue families, the Cidades manual ships no tints or shades — just the four standalone colors. The ramps are therefore built here, not transcribed: seven steps interpolated in CIELAB from a lightened anchor through the official color to a darkened one, with the official color pinned at position 4.
insper_palette("cidades_folhagem")
The pin matters more than it sounds. Lab interpolation rounds
endpoints by a bit, so without it folhagem would come back
from its own ramp as #009880 rather than the official
#019881.
Text contrast
The Cidades manual has no accessibility page, so unlike the institutional colors there is no official ruling on what text color to put on these backgrounds. The values below are computed from WCAG relative luminance rather than taken from a guide.
| Color | Contrast vs white | Contrast vs black | Use |
|---|---|---|---|
folhagem |
3.61 | 5.81 | black text |
solar |
1.95 | 10.78 | black text |
asfalto |
9.01 | 2.33 | white text |
tijolo |
3.36 | 6.26 | black text |
Asfalto is the only one of the four that takes white text.
Diverging data
There are two Cidades diverging palettes.
insper_palette("cidades_folhagem_asfalto")
insper_palette("cidades_folhagem_tijolo")
Both share the same neutral midpoint (#F4F4F2) as the
institutional diverging palettes, so they drop into
scale_fill_insper_c() the same way.
