如何在Altair中使用带有特殊字符的列

时间:2019-05-06 14:15:51

标签: python altair

我对Altair库很陌生。如果要绘制的变量在pandas数据框中具有对象dtype,则在生成图形时会遇到困难。

我没有太多运气就尝试了一个条形图和一个箱形图。任何帮助深表感谢。

Barchart: 我正在尝试创建一个如下所示的图表:

Desired Barchart

我已阅读Altair文档并尝试了以下代码:

alt.Chart(psy).mark_bar().encode(x = alt.X('player.q_mother_language', title = 'Mother language'), y  ='count()', color = 'player.q_mother_language')

代码提供的图形为:

enter image description here

箱线图 然后我决定尝试一些箱线图。

我要生成的箱线图是:

enter image description here

我使用的代码是:

alt.Chart(psy).mark_boxplot().encode(x = 'player.q_gender', y = 'player.q_age', color = 'player.q_gender')

我得到的结果是:

enter image description here

数据集如下所示:

player.q_mother_language,player.q_country,player.q_age,player.q_gender
Czech,Czech,21,Male
Serbian,Serbia,23,Female
German,Austria,26,Male
German,Austria,21,Female
Portuguese,Portugal,21
Russian,Kazakhstan,22,Female
Mongolian,Mongolia,32,Female
Ukrainian,Ukraine,19,Female
German,Austria,22,Male

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

问题在于,列名中的特殊字符(包括句点,方括号和引号)用于指示层次结构变量。要继续处理图表,您应该重命名这些列以使其不包含特殊字符,或者在图表编码中转义这些特殊字符。

以下是后一种方法的示例:

import pandas as pd
import io
import altair as alt

data = """player.q_mother_language,player.q_country,player.q_age,player.q_gender
Czech,Czech,21,Male
Serbian,Serbia,23,Female
German,Austria,26,Male
German,Austria,21,Female
Portuguese,Portugal,21
Russian,Kazakhstan,22,Female
Mongolian,Mongolia,32,Female
Ukrainian,Ukraine,19,Female
German,Austria,22,Male
"""

psy = pd.read_csv(io.StringIO(data))

alt.Chart(psy).mark_bar().encode(
    x= alt.X(r'player\.q_mother_language', type='nominal', title = 'Mother language'),
    y='count()',
    color=alt.Color(r'player\.q_mother_language', type='nominal')
)

enter image description here