Altair Chart从TimeStamps中“读取”了比应有的更多信息

如何解决Altair Chart从TimeStamps中“读取”了比应有的更多信息

所有人

我有一个类似于以下内容的DataFrame(我通过执行df.to_dict()来获得):

{'end_datum': {48: Timestamp('2020-09-25 00:00:00'),96: Timestamp('2020-09-30 00:00:00'),77: Timestamp('2020-09-29 00:00:00'),51: Timestamp('2020-09-25 00:00:00'),95: Timestamp('2020-09-30 00:00:00')},'type': {48: 'Frist Gericht',96: 'Frist Gericht',77: 'Berufungsfrist',51: 'Frist Gericht',95: 'Frist Gericht'},'motorenbezeichnung': {48: 'EA 189',96: 'EA 288',77: 'OM 642',51: 'OM 651',95: 'EA 189'},'size': {48: 30,96: 9,77: 1,51: 8,95: 54}}

我用以下代码绘制了一张altair图表:

alt.Chart(pv_clean).mark_bar().encode(
    x= "end_datum:T",y="size:Q",color = "motorenbezeichnung:N").properties(width=1000)

我得到以下输出

chart_with_weird_x_axis

沿X轴的标签包含很多信息。我尝试使用altairtransform_timeunit()

alt.Chart(pv_clean).mark_bar().encode(
    y= "date(end_datum:T)",x="size:Q",color = "motorenbezeichnung:N").properties(width=1000)

但图表变为空白:

blank_chart

有趣的是,如果我将日期从x更改为y,

alt.Chart(pv_clean).mark_bar().encode(
    y= "end_datum:T",color = "motorenbezeichnung:N").properties(width=1000)

日期的解析方式更有意义:

Sensible_dates_displayed_on_y_axis

任何人都可以向我解释以下内容

  1. 如何获取X轴上要显示的月份和月份?

  2. 为什么altair图表在x和y轴上对日期的解释不同?

  3. 当我尝试转换时间单位时,为什么图表变为空白?

我正在使用jupyter实验室2.2.6版和altair 4.1.0版。

谢谢。

解决方法

问题是x轴上的默认刻度数超过了您的期望。

一种解决此问题的简便方法是将刻度之间的最小间距设置为您希望看到的最小间距;对于时间轴,刻度间隔以毫秒为单位,因此使用

x=alt.X("end_datum:T",axis=alt.Axis(tickMinStep=1000*60*60*24))

使事情看起来更好。

以下是使用您提供的数据的完整示例:

alt.Chart(pv_clean).mark_bar().encode(
    x=alt.X("end_datum:T",axis=alt.Axis(tickMinStep=1000*60*60*24)),y="size:Q",color = "motorenbezeichnung:N"
).properties(width=1000)

enter image description here

请注意,您的图表2无效,因为您写了y= "date(end_datum:T)"而不是y= "date(end_datum):T",而图表3却有效,因为y轴的像素较少,导致默认刻度减少了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?