这是一个《星球大战》数据库,我在 Altair 和 Genereted 方面制作了这个分组条形图,现在可以在列上产生粉丝对原始电影与前传的偏好,并在行上产生基于性别的分类。但是,我只能在“是”或“否”偏好中生成颜色区分。我想知道如何分别更改每个图表的颜色。例如 - 雄性可以是蓝色和橙色,雌性可以是绿色和红色等。
这是我的数据框在处理原始数据集后的样子,这是我在图表中作为“alpha”传递的数据框。
索引 | 风扇 | 性别 | 偏好 | 百分比 |
---|---|---|---|---|
0 | 没有 | 男 | 原版三部曲偏好 | 0.354167 |
1 | 是的 | 男 | 原版三部曲偏好 | 0.645833 |
2 | 没有 | 女 | 原版三部曲偏好 | 0.308824 |
3 | 是的 | 女 | 原版三部曲偏好 | 0.691176 |
4 | 没有 | 男 | 前传偏好 | 0.313433 |
5 | 是的 | 男 | 前传偏好 | 0.686567 |
6 | 没有 | 女 | 前传偏好 | 0.193548 |
7 | 是的 | 女 | 前传偏好 | 0.806452 |
我在下面附上了我的图表代码 -
chart = alt.Chart(alpha).mark_bar(size = 15).encode(
y = alt.Y('Do you consider yourself to be a fan of the Star Trek franchise?:N',
axis = alt.Axis(title = ''),
sort = 'descending'
),
x = alt.X('Percentage:Q',
axis = None,
scale=alt.Scale(domain=[0, 1])
),
color = alt.Color('Do you consider yourself to be a fan of the Star Trek franchise?:N',
legend = None,
scale=alt.Scale(domain=domain, range=range_)
),
)
text = chart.mark_text(
align = 'left',
baseline = 'middle',
dx = 5,
color = '#4da74a'
).encode(
text = alt.Text('Percentage:Q', format = '.0%')
)
result = alt.layer(
chart, text, data = alpha
).facet(
row = alt.Row('Gender:N', title = None, sort = 'descending'),
column = alt.Column('Preference:N', title = None)
).configure(
background = '#f0f0f0'
).configure_view(
stroke = None
).configure_axis(
labelFontSize = 12,
domainOpacity = 0.4,
labelColor = '#ababab',
labelOpacity = 1,
labelFontWeight = 600,
labelPadding = 5,
tickSize = 10,
tickColor = '#ababab',
tickOpacity = 1
).configure_title(
anchor = 'start',
fontSize = 25,
fontWeight = 700,
dy = -20,
subtitleColor = '#000000',
subtitleFontWeight = 600
).properties(
title = {"text":"Preference for Original Trilogy vs. Prequels",
"subtitle": "by Familiarity with Expanded Universe and Gender(Grouped Bar Chart)"}
)
result
我尝试了一些配置方法,但似乎都不起作用。
由于分面图表中男性和女性子图中的颜色对应于相同的变量级别(是/否),我认为没有一种轻松的方法可以改变它(并注意,有可能会令人困惑)相同变量级别的不同颜色)。作为解决方法,您可以创建一个新列,合并性别和粉丝列以及颜色(这可能是最简单的解决方案,因为您无论如何都不显示图例)。另一种解决方法是创建一个列,其中包含要使用的颜色的原始值,并根据文档的本节设置 .scale(None)
。