【问题标题】:sort a normalized stacked bar chart with Altair使用 Altair 对标准化堆积条形图进行排序
【发布时间】:2021-05-26 14:14:39
【问题描述】:

我正在尝试根据特定顺序对标准化堆积条形图进行排序。

我想要按此顺序排序的堆积条:

Order = dict({'Paid work':1,'Education':2,'Sleep':3,'Other unpaid work':4,'Housework & Shopping':5,'Personal care':6, 'Eating and drinking':7,'TV and Radio':8,'Seeing friends':9,'Other leisures':10})

国家(Y 轴)也应按“有偿工作”条的长度排序。

但我得到的是图表左端带有“电视和广播”的订单,无法看到在哪个国家/地区人们花在“有偿工作”上的时间最多。

我的尝试:

错误代码:

alt.Chart(df).mark_bar(size=15).encode(
    alt.Y('Country:O'),
    alt.X('Time:Q', stack='normalize',sort=alt.EncodingSortField(field='Order',order='descending')),
    
    alt.Color('Category:N',sort=alt.EncodingSortField(field='Order')),
    tooltip=['Country', 'Category', 'Time']
).properties(
    width=600,
    height=600, title = {'text' :'How do people spend their time?',
'subtitle' : 'Average of minutes per day from time-use diaries for people between 15 and 64'})

我是这个平台的新手,请看一下这个笔记本中的数据和我的简单代码:https://www.kaggle.com/hoangyennhi/exercise-dv

【问题讨论】:

    标签: python data-visualization altair


    【解决方案1】:

    我按照您的指南成功订购了该类别,结果如下:

    但是我可以再问你一个问题吗?我现在遇到了文本颜色的问题,当我添加文本时,它与条的颜色相同,因此它是不可见的。我想让它变黑但不可能。

    我在一些 github(来源:https://github.com/altair-viz/altair/issues/1033)上搜索,他们告诉我创建一个基本图表而不给我的条着色,并使用该基本图表创建文本。但是我不能在没有不同颜色的情况下制作我的基础,同时仍然保持类别的顺序(类别的顺序是基于我在 CatOrder 中定义的颜色)

    我的问题是:如何在保持每个条形行中类别顺序的同时使文本变黑?

    如果我的问题让您感到困惑,请查看我的代码:https://www.kaggle.com/hoangyennhi/exercise-dv

    非常感谢您的帮助。

    【讨论】:

    • 您能否将其作为一个单独的问题发布,并在问题中包含重现该问题所需的最少代码?随意在这里链接,我会看看。
    • 你说得对,我很抱歉那些乱七八糟的代码。我在这里提出一个新问题,希望你有时间看看。万分感谢。 stackoverflow.com/questions/66540502/…
    【解决方案2】:

    如果您将alt.Color() 中的sort 参数设置为'ascending''descending',它将自动对堆叠的条形图进行排序:

    import altair as alt
    from vega_datasets import data
    
    source = data.barley()
    
    alt.Chart(source).mark_bar().encode(
        x='sum(yield)',
        y='variety',
        color=alt.Color('site', sort='descending'))
    

    但是,当您指定自定义排序顺序时,它不会像 not yet supported by Vega-Lite 那样。一个workaround was described in this comment,它提到可以使用一个名为color_<name-of-column>_sort_index 的特殊字段,根据颜色索引进行排序。在这个例子中,它看起来像这样:

    site_order = ['Duluth', 'Crookston', 'Waseca', 'University Farm', 'Grand Rapids', 'Morris']
    alt.Chart(source).mark_bar().encode(
        x='sum(yield)',
        y='variety',
        color=alt.Color('site', sort=site_order),
        order=alt.Order('color_site_sort_index:Q'))
    

    【讨论】:

    • 非常感谢。我按照你说的做了。我应该早点检查一下,抱歉回复晚了,我想我会收到一封通知电子邮件:3
    • 不客气@NhiHoang!不要忘记用绿色复选标记将问题标记为已解决。顺便说一句,如果您想设置电子邮件通知,可以在您的个人资料设置中进行:Click your portrait in the top bar -> Edit profile and settings -> Edit email settings
    • 嗨@joelostblom 再次感谢您对我的问题的帮助。但是我现在对文本颜色有进一步的疑问。我把它放在另一个评论打击中,我希望你有一些空闲时间来帮助这个。衷心感谢。
    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多