【问题标题】:NVD3/D3 change y axis minimum valueNVD3/D3改变y轴最小值
【发布时间】:2013-06-08 16:32:22
【问题描述】:

我目前正在使用 NVD3 制作一些折线图。我想知道是否可以使 y 轴刻度始终从 0 开始。目前它总是从最低的 y 值开始。我曾尝试使用 tickValues 但我不想更改其他值。我还尝试添加一个值为 0 的数据点,但这似乎是一种解决方法,它会影响图表的外观。有什么想法吗?

【问题讨论】:

    标签: javascript d3.js nvd3.js


    【解决方案1】:

    您不需要添加“虚拟”数据点,您只需调整刻度的输入域,例如像

    chart.yAxis.scale().domain([0, maxValue]);
    

    【讨论】:

    • 有什么方法可以获取图表显示的maxValue 吗?我正在使用 nvd3 boxplot 并且没有显示异常值。所以我想用图表计算的最大值作为上限。
    • 您可以从数据中获取最大值。
    • ngx 图表中是否有类似的东西...我想将 min y 轴值设置为 5,max 应该是自动的。我使用了 yScaleMin=5 但在轴上,它的值像 5,4,3,2,1,0 一样减小到 0,这是我不想要的
    【解决方案2】:

    大多数图表都有一个 forceX 和 forceY 函数,它们采用一组值。你可以这样使用它:

      var chart = nv.models.lineChart();
      chart.forceX([0, 10])
      chart.forceY([-1, 1])
    

    这将确保在您的 xAxis 上始终显示至少 0 和 10,但如果您直接操作它不会限制域。也就是说,如果您执行以下操作:

    chart.yAxis.scale().domain([0, maxValue]);
    

    并且您的数据具有负 X 值,它们不会显示在图表上,因为它们会落在指定域之外,但如果您使用 forceX,它们会。

    【讨论】:

    • 我正在尝试设置比例,但它不起作用 - 例如:chart.y1Axis.scale().domain([0, maxValue]) .tickFormat(d3.format(' ,f'));
    • 当你调用 update() 时,它可能会破坏你直接设置的值。
    • 答案的小补充:我想只设置yAxis上的最小值,最大值应该自动设置。我发现,如果你只用一个值而不是数组来调用 forceY 来设置 [min,max] ,nvd3 会将此值设置为最小值并自行计算最大值。 TL;DR -> 使用 forceY(0) 将最小 yAxis 值设置为 0 并让最大值由 nvd3 计算:)
    • @Fidel90 非常感谢。您应该将您的评论转换为答案。您的评论应该被选为正确答案。
    • 也许自回答后发生了变化...我必须将其作为 .forceY([0]) 传递,以便将最小值设置为 0。
    【解决方案3】:

    我发现这个测试页面在计算 nvd3 图表上的属性时非常有用(即使您不使用角度 btw 也适用)

    https://krispo.github.io/angular-nvd3/#/lineChart

    • 点击“扩展”
    • 单击forceY 旁边的+ 符号
    • 输入-5 之类的值,然后添加它以立即查看效果(示例图已经显示为零)。

    【讨论】:

    • 请注意,这不适用于多图表。在我意识到之前,我一直把头撞在墙上,试图弄清楚为什么这对我的图表不起作用
    【解决方案4】:

    chart.forceX(0) 只能设置最小值

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多