python - Altair:如何在条形图中包含没有数据的值的位置

标签 python pandas bar-chart altair

我的数据如下:

data = {'ColA': {('A', 'A-1'): 'w',
                 ('A', 'A-2'): 'w',
                 ('A', 'A-3'): 'w',
                 ('B', 'B-1'): 'q',
                 ('B', 'B-2'): 'q',
                 ('B', 'B-3'): 'r',
                 ('C', 'C-1'): 'w',
                 ('C', 'C-2'): 'q',
                 ('C', 'C-3'): 'q',
                 ('C', 'C-4'): 'r'},
        'ColB': {('A', 'A-1'): 'r',
                 ('A', 'A-2'): 'w',
                 ('A', 'A-3'): 'w',
                 ('B', 'B-1'): 'q',
                 ('B', 'B-2'): 'q',
                 ('B', 'B-3'): 'e',
                 ('C', 'C-1'): 'e',
                 ('C', 'C-2'): 'q',
                 ('C', 'C-3'): 'r',
                 ('C', 'C-4'): 'w'}}

然后,我执行以下操作来生成两个条形图:

df               = pd.DataFrame(data)
df[ df.columns ] = df[ df.columns ].astype('category')
df.index         = pd.Index( [ ': '.join( x ) for x in list( df.index.to_flat_index() ) ] )

X = alt.X( alt.repeat(), type = 'nominal' )

Y_scale = alt.Scale( domain = [0, len( df.index ) ] )
Y       = alt.Y( aggregate = 'count', type = 'quantitative', scale = Y_scale )

alt.Chart( df ).mark_bar().encode( X, Y ).repeat( list( df.columns ) )

这会产生两个条形图,如下所示:

bar charts

请注意,ColA 的数据不包含“e”值,因此条形图不包含这些值的任何刻度线。对于 ColA 图表,我希望为“e”添加一个刻度线,并且那里没有条形,这样 ColA 和 ColB 图表看起来相同并且可以轻松比较。

我怎样才能做到这一点?

最佳答案

您可以使用 chart.resolve_scale(x='shared') 指定您希望在图表之间共享 x 比例。例如:

df = pd.DataFrame(data).reset_index(drop=True)

alt.Chart(df).mark_bar().encode(
    x=alt.X(alt.repeat(), type='nominal'),
    y=alt.Y('count():Q', scale=alt.Scale(domain=[0, len(df.index)]))
).repeat(
    list(df.columns)
).resolve_scale(
    x='shared'
)

enter image description here

请注意,我删除了几行无关的代码,例如构建索引(Altair 从数据帧中删除索引)并将数据类型转换为类别(Altair 将类别数据类型转换回字符串)。

关于python - Altair:如何在条形图中包含没有数据的值的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58225652/

相关文章:

python - 执行 pygame 时提高性能?

python - sqlalchemy 测试 : adding same user twice not throwing exception when unique=True

python - 如何根据列的值和该列中的下一个值过滤数据帧的行

javascript - D3 条形图纵轴

charts - 图表在 Angular2 中不起作用

python - 基于位置向量聚合元素

python - 如何在 Python 的 Tkinter 中获取多个 Checkbutton 的文本值列表?

python - 如何删除 pandas 中的 nan 值?

f# - 如何对 Deedle 中的非唯一列/索引进行左连接

javascript - plotly.js - 如何修复条形图中条形之间的空间