【问题标题】:Custom D3 `tickValue` on x axis -- horizontal bar chartx 轴上的自定义 D3 `tickValue` -- 水平条形图
【发布时间】:2017-01-04 00:06:07
【问题描述】:

我正在尝试在 X 轴上创建自定义刻度值。

图表是从 data.csv 文件生成的。有 144 个数据点。每个数据值代表 10 分钟周期,因此第一个刻度应出现在代表 1 小时的第 6 个刻度上。

例如,如果我使用.domain([new Date('2014-03-08T12:00:00'), new Date('2014-03-9T00:00:00')]),我的 X 轴会正确,但我的图表会消失。

在这种情况下我也不能使用tickValues([])

我应该在 X 轴上看到类似 00:00 AM...(6 tick values)...1:00 AM...(6 tick values)...2:00 AM 等的东西。或者它可能是 00:00 AM...(12 tick values)...2:00 AM...(12 tick values)...3:00 AM 等。只是为了能够自定义它。

不确定这是否可能。我尝试按照这个简单的示例 http://bl.ocks.org/phoebebright/3059392 进行操作,但同样,我得到了正确的 X 轴,但我的图表不见了。

这将是代码:https://plnkr.co/edit/kc4E43Bgo4bNMB9hKX2j?p=preview

提前谢谢你!

【问题讨论】:

  • 我很困惑。你到底想要什么刻度?您的数据似乎根本不包含日期。
  • 我的数据不包含日期,不。我想拥有不是从 csv 文件提供的自定义刻度值。

标签: javascript d3.js charts


【解决方案1】:

由于您的数据不包含实际日期值,这是我的解决方案:

您希望显示 6 个刻度中的一个,因为每个刻度代表 10 分钟,并且您只想显示“每小时”刻度。因此,使用您的 x 比例域定义刻度值:

.tickValues(d3.range(x.domain()[0], x.domain()[1]).filter(function(d) {
    return d % 6 === 0;
}))

然后,格式化刻度,为每个刻度添加一个:00

.tickFormat(function(d) {
    return d/6 + ":00";
});

这是您更新的插件:https://plnkr.co/edit/8EOGt8UvYq1J8qpIdArN?p=preview

编辑:正如在 cmets 中所讨论的,这里是“am”和“pm”的解决方案:https://plnkr.co/edit/OvtVlgT4I6Y19hgoMKIK?p=preview

【讨论】:

  • 谢谢弗塔多先生!你又帮了大忙!我清楚地看到了你对.range.filter 所做的事情,但它看起来仍然不太直观。例如,如果我看到数字 18:00,意识到实际上是 3 小时仍然令人困惑。我会看看我是否可以得到带有日期的json。但比我需要全新的图表。我知道这是我能得到的最接近的......如果你这么说,那一定是因为我没有实际的日期值。再次感谢您!
  • 您可以循环进入 24 小时计时(我可以稍后告诉您如何操作,我现在在手机上),即使是上午和下午,但请注意,这将是完全假的轴。
  • 不急!非常感谢!我知道这将是一个假轴。没关系!图表上表示的内容来自 csv,这是最重要的。 24 小时有 144 个数据值,间隔为 10 分钟。谢谢!!!
  • 总是从凌晨 12 点(午夜)开始,对吗?
  • 我只是再次检查您的代码。添加这样的条件语句非常聪明。我必须补充一点。再次感谢!干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2021-10-04
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多