Color palettes where every color has a paper behind it.
Named after entoptic phenomena — visual experiences generated within the eye itself, such as Haidinger's brushes and Eigengrau, both of which appear in this package.
devtools::install_github("thhaase/entoptic")| Option | Name | Type | Story |
|---|---|---|---|
"A" |
First Light | Sequential | Eigengrau (darkness) → CMB Beige (first light of the universe) |
"B" |
Science | Qualitative | 5 colors from scientific phenomena |
"C" |
Understorey | Sequential | Dark teal → Hospital Green → parchment |
"D" |
Open Wound | Sequential | Tissue cross-section: eschar → necrotic → blood → granulation → adipose |
"E" |
Hemolysis | Sequential | Hemoglobin degradation cascade during wound healing |
| Color | Hex | Phenomenon | Reference |
|---|---|---|---|
| Baker-Miller Pink | #FF91AF |
Aggression reduction in prison cells | Schauss, A.G. (1979). Journal of Orthomolecular Psychiatry, 8(4), 218–221 |
| Hospital Green | #5B8C5A |
Surgical complement to blood-red; reduces retinal afterimages | Sherman, H.M. (1914). California State Journal of Medicine, 12(5), 181–183 |
| YInMn Blue | #2E5090 |
First new inorganic blue pigment in over 200 years | Smith, A.E. et al. (2009). Journal of the American Chemical Society, 131(47), 17084–17086 |
| Haidinger's Brush | #E8D44D |
Human polarization vision via xanthophyll dichroism in the macula (entoptic phenomenon) | Haidinger, W. (1844). Annalen der Physik, 139(10), 29–39 |
| Eigengrau | #16161D |
Color perceived in total darkness; spontaneous retinal neuron firing (entoptic phenomenon) | Barlow, H.B. (1956). Journal of the Optical Society of America, 46(8), 634–639 |
The dark pole is Eigengrau (#16161D, L*≈5): the color your visual cortex
generates in total absence of light, caused by spontaneous retinal neuron firing.
Barlow, H.B. (1956). Retinal noise and absolute threshold. Journal of the Optical Society of America, 46(8), 634–639. Baylor, D.A., Lamb, T.D., & Yau, K.W. (1979). Responses of retinal rods to single photons. Journal of Physiology, 288, 613–634.
The light pole is CMB Beige (#FFEFD5, L*≈95): the color of the Cosmic
Microwave Background — the oldest light in the observable universe, the 2.725 K
blackbody radiation released ~380,000 years after the Big Bang, first detected by
Penzias & Wilson and later mapped across the full sky.
Penzias, A.A. & Wilson, R.W. (1965). A measurement of excess antenna temperature at 4080 Mc/s. The Astrophysical Journal, 142, 419–421. Bennett, C.L., et al. (2003). First-year WMAP observations. The Astrophysical Journal Supplement, 148(1), 1–27. Planck Collaboration (2020). Planck 2018 results I. Astronomy & Astrophysics, 641, A1. Glazebrook, K. & Baldry, I. (2002). The 2dF Galaxy Redshift Survey. The Astrophysical Journal, 571(1), 169–186.
Anchored on Hospital Green (#5B8C5A), sweeping from dark teal to warm
parchment. The anchor color is grounded in the same surgical science as the
Science palette:
Sherman, H.M. (1914). California State Journal of Medicine, 12(5), 181–183.
A vertical cross-section through an open wound, from deep necrotic tissue to the surface fat layer:
| Layer | Hex | Tissue | Notes |
|---|---|---|---|
| Eschar | #120305 |
Necrotic, desiccated tissue at the wound base | Deepest layer (L*≈4); devitalized and insensate |
| Necrotic muscle | #3D0E14 |
Devitalized muscle beneath the eschar | Dark, poorly perfused |
| Venous pool | #6E1520 |
Deoxygenated hemoglobin in collapsed capillaries | Wound margin |
| Hemoglobin | #DC143C |
Fresh oxygenated blood (oxyhemoglobin) | Diagnostic red of a healthy bleeding wound |
| Granulation | #C95555 |
Vascularized collagen III matrix | Salmon-pink; indicates active healing |
| Dermis | #D49080 |
Exposed subcutaneous connective tissue | Wound edge |
| Adipose | #E4CCB8 |
Subcutaneous fat layer | Surface margin (L*≈82) |
The temporal color cascade of hemoglobin degradation during wound healing. Each anchor maps to a biochemically distinct pigment stage in chronological order:
| Stage | Hex | Pigment | Time | Reference |
|---|---|---|---|---|
| Anoxic | #2B0D26 |
Deoxyhemoglobin Fe²⁺ (absorbs at 760 nm) | 0–24 h | — |
| Venous | #6B1A2A |
Hemoglobin losing O₂ | 1–2 days | — |
| Hemoglobin | #C41E3A |
Oxyhemoglobin (Soret 415 nm, Q bands 541/576 nm) | Day 0 | Zijlstra, W.G. et al. (2000). Hemoglobin. VU University Press |
| Methemoglobin | #7B3B1A |
Oxidized heme Fe³⁺ (absorbs at 630 nm) | 2–4 days | — |
| Biliverdin | #4A7856 |
First linear tetrapyrrole from heme ring cleavage | 5–7 days | Tenhunen, R. et al. (1968). Proceedings of the National Academy of Sciences, 55, 748–755 |
| Bilirubin | #D4A843 |
Product of biliverdin reductase (absorbs at 450 nm) | 7–14 days | Kutty, R.K. & Maines, M.D. (1981). Journal of Biological Chemistry, 256, 3956–3962 |
| Hemosiderin | #9B6B2A |
Insoluble ferric oxyhydroxide-protein polymer | 14+ days | — |
library(entoptic)
# Generate n colors
entoptic(5, option = "science")
entoptic(256, option = "firstlight")
# Convenience functions
science(5)
understorey(9)
firstlight(256)
openwound(7) # or open_wound(7)
hemolysis(7)
# Plots
image(volcano, col = firstlight(256))
filled.contour(volcano, color.palette = understorey)
barplot(1:5, col = science(5))
heatmap(as.matrix(mtcars), col = openwound(64))
heatmap(as.matrix(mtcars), col = hemolysis(64))
# Preview
entoptic_show("open_wound")
entoptic_show("hemolysis")
# Reverse & subset
firstlight(10, direction = -1)
entoptic(7, option = "hemolysis", begin = 0.2, end = 0.8)library(ggplot2)
library(entoptic)
# ── Continuous ──────────────────
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_tile() +
scale_fill_entoptic_c(option = "firstlight")
ggplot(iris, aes(Sepal.Length, Sepal.Width, colour = Petal.Length)) +
geom_point(size = 3) +
scale_colour_entoptic_c(option = "understorey")
# ── Discrete ────────────────────
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point(size = 2) +
scale_colour_entoptic_d(option = "science")
ggplot(mpg, aes(class, fill = class)) +
geom_bar() +
scale_fill_entoptic_d(option = "science")
# ── Binned ──────────────────────
ggplot(iris, aes(Sepal.Length, Sepal.Width, colour = Petal.Length)) +
geom_point(size = 3) +
scale_colour_entoptic_b(option = "firstlight")| Function | Purpose |
|---|---|
entoptic(n, option) |
Generate n hex colors |
science(n) |
Science palette shortcut |
understorey(n) |
Understorey shortcut |
firstlight(n) |
First Light shortcut |
open_wound(n) |
Open Wound shortcut |
openwound(n) |
Open Wound shortcut (alias) |
hemolysis(n) |
Hemolysis shortcut |
entoptic_pal(option) |
Palette function (ggplot2 compatible) |
scale_colour_entoptic_c() |
ggplot2 continuous colour |
scale_fill_entoptic_c() |
ggplot2 continuous fill |
scale_colour_entoptic_d() |
ggplot2 discrete colour |
scale_fill_entoptic_d() |
ggplot2 discrete fill |
scale_colour_entoptic_b() |
ggplot2 binned colour |
scale_fill_entoptic_b() |
ggplot2 binned fill |
entoptic_show(option) |
Preview a palette |
entoptic_palettes() |
List all palettes |
All scale_colour_* have scale_color_* aliases.
All palette functions accept:
| Param | Default | Description |
|---|---|---|
alpha |
1 |
Transparency [0, 1] |
begin |
0 |
Start position [0, 1] |
end |
1 |
End position [0, 1] |
direction |
1 |
1 = dark→light, -1 = reversed |
option |
varies | Palette name or letter "A"–"E" |