【问题标题】:Python Altair - Setting Minimum Bar Height for Interactive GraphsPython Altair - 为交互式图表设置最小条形高度
【发布时间】:2019-05-29 14:36:21
【问题描述】:

我目前正在生成一个交互式堆叠条形图,其中可以单击条形图的各个堆叠来更新其他图形。

我遇到的问题是规模问题。有时,我会有一个数据集,其中 1 个柱的读数为 25,000,而另一个柱的读数为 1。

当刻度由于另一个读数而上升如此之高时,几乎不可能看到,更不用说单击该条目了。

是否可以为任何条形块设置“最小”高度?我知道由于 Y 轴缩放,这可能很困难或很奇怪。

谢谢!

【问题讨论】:

  • 在尝试解释数据时似乎会产生误导。增加您可以单击的区域的大小而不是增加条的大小会更有意义吗?或者,您可以在差异达到某个阈值时切换到对数刻度。
  • 是的,我也是这么想的。两者之间会很矛盾,但我想我总是可以同时生成两者,并且可以参考在给定时间更容易使用的任何一个。不过感谢您的建议。

标签: python data-visualization vega-lite altair


【解决方案1】:

你可以使用strokeWidth来绘制边缘:

import altair as alt

import pandas as pd
df = pd.DataFrame(dict(x=["a", "b"], y=[1, 1000]))
select = alt.selection(type="single", fields=["x"], empty="none")
alt.Chart(df).mark_bar(strokeWidth=5).encode(
    y="x",
    x="y",
    fill=alt.condition(select, alt.value("red"), alt.value("blue")),
    stroke=alt.condition(select, alt.value("red"), alt.value("blue")),
).add_selection(select)

如果不想显示笔画,可以设置strokeOpacity=0.001。

import altair as alt

import pandas as pd
df = pd.DataFrame(dict(x=["a", "b"], y=[1, 1000]))
select = alt.selection(type="single", fields=["x"], empty="none")
alt.Chart(df).mark_bar(strokeWidth=5, stroke="red", strokeOpacity=0.001).encode(
    y="x",
    x="y",
    fill=alt.condition(select, alt.value("red"), alt.value("blue")),
).add_selection(select).interactive()

【讨论】:

    【解决方案2】:

    没有办法在 Altair 或 Vega-Lite 中设置最小条形高度,除非修改可能会误导的输入数据。

    也许您可以将另一个图表与共享轴连接起来,并通过它提供交互?例如:

    import pandas as pd
    import altair as alt
    
    df = pd.DataFrame({
        'x': list('ABCDE'),
        'y': [1, 2, 3, 10000, 500]
    })
    
    selector = alt.selection_single(fields=['x'])
    color = alt.condition(selector, alt.value('steelblue'), alt.value('lightgray'))
    
    base = alt.Chart(df).mark_bar().encode(
        color=color
    ).add_selection(
        selector
    )
    
    bars = base.encode(
        x=alt.X('x:N', axis=None),
        y='y:Q',
    )
    
    rects = base.encode(
        x='x:N'
    )
    
    alt.vconcat(bars, rects).configure_concat(spacing=0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多