Categorical
The default 9-color palette used automatically when the theme is enabled.
0
#34A7F2
1
#FF9800
2
#664AB6
3
#4EC2C0
4
#F3578E
5
#081079
6
#0C7C68
7
#AA0000
8
#DDDA21
An accessible text-contrast variant is available when categorical colors are applied to text rather than marks:
0
#106CA1
1
#B65F0C
2
#664AB6
3
#208383
4
#BB3B64
5
#081079
6
#0C7C68
7
#AA0000
8
#767712
attaviz.CATEGORICAL # 9-color palette (default)
attaviz.CATEGORICAL_TEXT # high-contrast text variant
attaviz.BINARY # two-color pair
Sequential
Five monochrome ramps. Use with alt.Scale(range=...):
alt.Chart(data).mark_rect().encode(
color= alt.Color("value:Q" , scale= alt.Scale(range = attaviz.SEQ_GREEN))
)
0
#E3F6FD
#D2FFE1
#FFE2FF
#FDF7DB
#FFD6B9
1
#75CCEC
#8AD4A7
#D3ACE6
#ECB63A
#F99C78
2
#089BD4
#54A67F
#A37ACD
#BE792B
#E56245
3
#0169A1
#27795A
#6F4CB4
#8D4117
#C1261A
4
#023B6F
#084D31
#2F1E9C
#5C0000
#870000
Two semantic sequential ramps convey “good → bad” direction:
0
#FDF6DB
#E3F6FD
1
#A1CBCF
#91C5F0
2
#5D99C2
#8B8AC0
3
#2868A0
#88506E
4
#023B6F
#691B15
Diverging
Three diverging palettes with a neutral midpoint (#EFEFEF). Pair with domainMid=0 for symmetric scales centered at zero:
alt.Chart(data).mark_bar().encode(
color= alt.Color(
"change:Q" ,
scale= alt.Scale(range = attaviz.DIV_DEFAULT, domainMid= 0 ),
)
)
0
#920000
#24768E
#002C8B
1
#BD6126
#4EA2AC
#4868AF
2
#E3A763
#98CBCC
#79A7D5
3
#EFEFEF
#EFEFEF
#EFEFEF
4
#80BDE7
#D1AEE3
#ECA08C
5
#3587C3
#A873C4
#C9573E
6
#025288
#754493
#920000
Semantic palettes
Regions
NAC
#34A7F2
SSF
#FF9800
MEA
#664AB6
SAS
#4EC2C0
EAS
#F3578E
LCN
#0C7C68
ECS
#AA0000
AFW
#DDDA21
AFE
#FF9800
WLD
#081079
Text variants:
NAC
#106CA1
SSF
#B65F0C
MEA
#664AB6
SAS
#208383
EAS
#BB3B64
LCN
#0C7C68
ECS
#AA0000
AFW
#767712
AFE
#B65F0C
WLD
#081079
Secondary shades:
NAC
#34A7F2, #80D2E8, #163C6C, #106CA1
SSF
#FF9800, #FFD554, #8F3B18, #C2660D
MEA
#664AB6, #B38FD8, #462F98, #EDC2F1
SAS
#4EC2C0, #228B8B, #006061, #95E2E2
EAS
#F3578E, #F8A8DF, #BB3B64, #801E37
LCN
#0C7C68, #54AE89, #084D31, #9ADEAA
ECS
#AA0000, #EB6E51, #FF9E75, #D43729
AFW
#DDDA21, #7B7C13, #ABAA22, #4E5200
AFE
#FF9800, #FFD554, #8F3B18, #C2660D
attaviz.REGIONS # code → hex (e.g. "NAC", "SSF", ...)
attaviz.REGIONS_TEXT # accessible text variants
attaviz.REGIONS_SECONDARY # 4-shade series per region
Use in an explicit scale:
regions = attaviz.REGIONS
alt.Chart(data).mark_bar().encode(
color= alt.Color(
"region:N" ,
scale= alt.Scale(domain= list (regions), range = list (regions.values())),
)
)
Income groups
HIC
#016B6C
UMC
#73AF48
LMC
#DB95D7
LIC
#3B4DA6
attaviz.INCOME # dict: "HIC", "UMC", "LMC", "LIC" → hex
attaviz.INCOME_LIST # ordered list (HIC → LIC)
Demographics
female
#FF9800
male
#664AB6
diverse
#4EC2C0
urban
#6D88D1
rural
#54AE89
0
#F8A8DF
1
#B38FD8
2
#462F98
3
#6D88D1
4
#A1C6FF
attaviz.GENDER # dict: "female", "male", ...
attaviz.URBANIZATION # dict: "urban", "rural"
attaviz.AGE # list, youngest → oldest (5 shades)
Pillars
Institutional pillar colors.
people
#F7B841
planet
#07AB50
prosperity
#872C8F
infrastructure
#91302F
digital
#5D6472
corporate
#004972
attaviz.PILLARS
# {'people': '#F7B841', 'planet': '#07AB50', 'prosperity': '#872C8F',
# 'infrastructure': '#91302F', 'digital': '#5D6472', 'corporate': '#004972'}
Grey scale
Five greys used across the theme.
GREY_500
#111111
primary text
GREY_400
#666666
secondary text
GREY_300
#8A969F
reference lines
GREY_200
#CED4DE
grid lines
GREY_100
#EBEEF4
backgrounds
Functional
attaviz.REFERENCE # "#8A969F" — reference line color
attaviz.NO_DATA # "#CED4DE" — missing-data fill
attaviz.TOTAL # "#163C6C" — total/aggregate color
attaviz.SELECTION_PRIMARY # "#0071BC" — active selection
attaviz.SELECTION_SECONDARY # "#8963C1" — companion selection color
attaviz.TEXT # "#111111" — primary text color
attaviz.TEXT_SUBTLE # "#666666" — subtle text color (captions)