【问题标题】:How to make lines smoother in an altair plo?如何在 altair plo 中使线条更平滑?
【发布时间】:2021-02-06 22:59:17
【问题描述】:

我有以下数据框:

    {'datum': {78: Timestamp('2019-07-22 00:00:00'),
  116: Timestamp('2020-04-20 00:00:00'),
  31: Timestamp('2018-06-04 00:00:00'),
  5: Timestamp('2017-10-30 00:00:00'),
  125: Timestamp('2020-06-29 00:00:00'),
  45: Timestamp('2018-10-01 00:00:00'),
  14: Timestamp('2018-01-22 00:00:00'),
  44: Timestamp('2018-09-24 00:00:00'),
  73: Timestamp('2019-06-03 00:00:00'),
  89: Timestamp('2019-10-14 00:00:00'),
  130: Timestamp('2020-08-03 00:00:00'),
  53: Timestamp('2018-11-26 00:00:00'),
  85: Timestamp('2019-09-16 00:00:00'),
  93: Timestamp('2019-11-11 00:00:00'),
  29: Timestamp('2018-05-14 00:00:00'),
  16: Timestamp('2018-02-05 00:00:00'),
  35: Timestamp('2018-07-16 00:00:00'),
  90: Timestamp('2019-10-21 00:00:00'),
  83: Timestamp('2019-09-02 00:00:00'),
  19: Timestamp('2018-02-26 00:00:00'),
  40: Timestamp('2018-08-20 00:00:00'),
  92: Timestamp('2019-11-04 00:00:00'),
  122: Timestamp('2020-06-08 00:00:00'),
  98: Timestamp('2019-12-16 00:00:00'),
  59: Timestamp('2019-01-14 00:00:00'),
  42: Timestamp('2018-09-03 00:00:00'),
  33: Timestamp('2018-06-25 00:00:00'),
  99: Timestamp('2019-12-23 00:00:00'),
  69: Timestamp('2019-05-06 00:00:00'),
  97: Timestamp('2019-12-09 00:00:00'),
  17: Timestamp('2018-02-12 00:00:00'),
  28: Timestamp('2018-05-07 00:00:00'),
  65: Timestamp('2019-03-25 00:00:00'),
  109: Timestamp('2020-03-02 00:00:00'),
  115: Timestamp('2020-04-13 00:00:00'),
  66: Timestamp('2019-04-01 00:00:00'),
  18: Timestamp('2018-02-19 00:00:00'),
  4: Timestamp('2017-10-23 00:00:00'),
  111: Timestamp('2020-03-16 00:00:00'),
  39: Timestamp('2018-08-13 00:00:00')},
 'size': {78: 263,
  116: 532,
  31: 151,
  5: 803,
  125: 424,
  45: 161,
  14: 917,
  44: 145,
  73: 175,
  89: 4,
  130: 299,
  53: 643,
  85: 386,
  93: 162,
  29: 56,
  16: 39,
  35: 112,
  90: 421,
  83: 127,
  19: 59,
  40: 125,
  92: 142,
  122: 408,
  98: 609,
  59: 118,
  42: 233,
  33: 395,
  99: 178,
  69: 85,
  97: 537,
  17: 15,
  28: 13,
  65: 50,
  109: 277,
  115: 1008,
  66: 133,
  18: 25,
  4: 23,
  111: 192,
  39: 68}}

每当我尝试使用以下代码用 altair 绘制折线图时:

alt.Chart(dt_pv).mark_line().encode(
    x="yearmonth(datum)",
    y="size").properties(width=800)

我得到这个输出

我能描述的最好的方式是:当线从一个点到另一个点时,它会一直下降到最小值,然后上升到应该在这个时间点显示的实际值。例如,在 2018 年 5 月,这条线下降到 X 轴 = 0(或几乎为零),然后在同一时间点上升到 300 到 400 百之间。

如何使线中点之间的过渡更平滑,从而显示实际趋势?更平滑的意思是,使用上面的相同示例,在从 2018 年 4 月到 2018 年 5 月的过渡期间,这条线应该直接从 100 到 200 之间(4 月)到 300 到 40 万之间(5 月)

如果我尝试绘制条形图:

alt.Chart(dt_pv).mark_bar().encode(
    x="yearmonth(datum)",
    y="size").properties(width=800)

它工作得很好。

所以我认为不是数据有问题,而是我的图表配置有问题。

【问题讨论】:

  • 您似乎对某些日期有多个“大小”值。

标签: python data-visualization altair


【解决方案1】:

问题是某些日期有多个 size 值。如果您想要更平滑的绘图,您可以通过计算maxminmean 等来聚合它们,具体取决于适合您的可视化的内容:

alt.Chart(dt_pv).mark_line().encode(
    x="yearmonth(datum)",
    y="max(size)").properties(width=800)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2020-06-03
    • 2023-01-12
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多