繁体   English   中英

Altair:使用序数值更改轴的 label 间距

[英]Altair: change label spacing for axis with ordinal values

我从这个参考点开始: https://github.com/altair-viz/altair/issues/1576

为此,我能够像这样显示 x 轴 label: 在此处输入图像描述

我正在使用ordinal轴格式来显示日期(为了跳过周末日期)。

我在数据框的索引中动态选择有效日期,但是,有些值没有显示在图表上。

不仅仅是这两个缺失值......某些日期只是不想显示(例如"Jan 29, 2021" ,之前和之后的日期都可以正常显示)。

任何想法为什么这些日期没有出现? 这是datetime解析问题吗? 当我从datetime转换时,我的strftime中没有任何多余的空格。 如果我尝试显示"Jan 29, 2021" ,它仍然不显示。

编辑:添加了问题代码行的示例

import altair as alt
import pandas as pd
from datetime import timedelta

# create dataframe
dates = pd.date_range('1/1/2021', periods=40, freq='B')[1:-1]
count = len(dates)
df = pd.DataFrame({'x':dates, 'y':range(count)})

# identify ordinal date selection for x-axis
x_vals = []
for _ in df['x'][1::int(len(df)/12)]:
    if _ in df['x']:
        x_label = _.strftime('%b %#d, %Y')
        x_vals.append(x_label)
    else:
        d = _ + timedelta(3)
        x_vals.append(d.strftime('%b %#d, %Y'))

# construct chart
line = alt.Chart(df).mark_line().encode(
    alt.X('yearmonthdate(x):O', axis=alt.Axis(values=x_vals)),
    alt.Y('y:Q')
)

line.save('chart.html')

当我创建这个例子时,翻译中可能会丢失一些东西。 例如,我不确定为什么日期会旋转 90 度。 这是图像:

在此处输入图像描述

似乎这里有不同的缺失日期。

EDIT2:生产代码的图像供参考在此处输入图像描述 在此处输入图像描述

我认为外部 function 调用中没有任何会影响图表显示的内容。 我在任何地方的代码中都没有labelAngle=270属性。

您的示例中显示的日期是x_vals中唯一实际包含在 Z6A8064B5DF4794555500553C47C55057DZ 中的日期。 您可以通过以下方式看到这一点:

[x for x in x_vals if pd.to_datetime(x) in df['x'].to_numpy()]
['Jan 08, 2021',
 'Jan 11, 2021',
 'Jan 21, 2021',
 'Jan 29, 2021',
 'Feb 01, 2021',
 'Feb 11, 2021',
 'Feb 19, 2021',
 'Feb 22, 2021']

这是序数的预期结果,因为 Altair 不会为数据中不存在的标签创建标签(这就是您可以使用它来跳过周末日期的原因)。

您看到标签旋转的原因是因为您必须使用axis=alt.Axis(values=x_vals, labelAngle=270)或类似的东西,即使您没有在上面的示例代码中包含它。 如果你不这样做,一些标签将被省略,因为它们会重叠,如下图所示:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM