【问题标题】:Align order of text labels with sorted stacked bar segments将文本标签的顺序与已排序的堆叠条形段对齐
【发布时间】:2021-03-09 03:45:10
【问题描述】:

我正在尝试向此图表添加文本。

我使用了这段代码,文本的顺序是正确的,但是它的颜色是可变的根据各个条的颜色所以当我条+文本时,文字是不可见的

人们告诉我这是因为“编码中指定的颜色优先于标记属性中指定的颜色”所以我应该制作一个没有颜色的基本图表并基于该基本图表构建文本,如下所示:

现在文本为黑色,但显示顺序错误。我认为问题是我只能按颜色订购我想要的酒吧(首先是有偿工作,然后是教育,睡眠......)。因此,如果我通过不在基本图表中的条形着色来使文本变黑,我就会失去我想要的顺序。

有什么方法可以在保持正确顺序的同时使文本变黑? (首先是有偿工作,然后是教育、睡眠等)。

【问题讨论】:

    标签: python colors bar-chart visualization altair


    【解决方案1】:

    您将需要使用颜色编码来指定排序顺序,因为这将覆盖mark_text 中设置的任何颜色,您还需要将文本颜色编码的范围设置为仅包括黑色。解析色阶确保只有文本是黑色的。我认为没有办法在每个条形段内水平居中文本。

    import altair as alt
    from vega_datasets import data
    
    source = data.barley()
    
    site_order = ['Duluth', 'Crookston', 'Waseca', 'University Farm', 'Grand Rapids', 'Morris']
    bars = 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'))
    
    text = bars.mark_text(align='right', dx=-2).encode(
        x=alt.X('sum(yield):Q', stack=True),
        color=alt.Color('site', sort=site_order, scale=alt.Scale(range=['black']), legend=None),
        text=alt.Text('sum(yield):Q', format='.1f'))
    
    (bars + text).resolve_scale(color='independent')
    
    

    【讨论】:

    • 哇太棒了,非常感谢@joelostblom 再次帮助我。
    【解决方案2】:

    color=alt.value('black') 放入编码而不是标记中,或者不要从基本图表继承文本标记。

    【讨论】:

      【解决方案3】:

      如您所说,“编码中指定的颜色优先于标记属性中指定的颜色”。这在此处的文档中有详细说明:Global Config vs. Local Config vs. Encoding

      您从基本图表中删除颜色的解决方案是正确的:问题是您还删除了(自然地)使得文本不再具有相同顺序的顺序。从基本图表中删除颜色,但保持顺序,它应该可以工作。

      或者,您可以使用覆盖文本图表中的编码

      chart.encode(
        color=alt.value('black')
      )
      

      【讨论】:

      • 我都试过了,但都不管用。 (1)我用( order=alt.Order('color_Category_sort_index:Q') )保持基本图表中的顺序,并且文本顺序错误(按字母顺序而不是我想要的顺序)(2)我尝试了您推荐的代码以前,不需要基本图表,但它也生成了同样错误的文本顺序
      • 如果您指的是分层轴上 y 标签的排序顺序,这是一个已知问题:github.com/altair-viz/altair/issues/1371 您可以通过设置resolve_scale(y='independent')resolve_scale(color='independent') (我不清楚您关心的顺序是 y 轴还是颜色图例)。
      • 我的意思是颜色图例,我希望文字和图例按这个顺序排列(有偿工作、教育、睡眠……)请看我关于这个问题的第一张图片,我之前在名为 CatOrder 的数组中定义我想要的顺序。我的问题是类别(图例)在 Catorder(我想要的)中,但文本是按字母顺序排列的。
      • 对不起,这有点复杂。由于您在这里的主要问题(如何在彩色条上显示黑色文本)已得到解答,也许您可​​以提出一个关于订单的新问题,并且以后请避免截图代码,而是粘贴代码本身以便它可以复制并粘贴为文本。
      • 嘿对不起,下次会更小心的。感谢您的支持
      猜你喜欢
      • 2017-07-31
      • 2020-08-30
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多