You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除ngx-line-chart折线图X轴自动显示的时间内容

解决方案

你遇到的情况是ngx-charts的默认逻辑导致的:当检测到X轴字段为Date类型时,组件会根据容器宽度自动生成连续时间刻度,空间充足时会自动插入小时级别的中间刻度,哪怕你的原始数据只有日期级别的记录,也会生成对应插值,所以才会出现不存在的时间点数据。
你可以根据自己的需求选下面任意一种方案解决:

方案1:将X轴字段改为字符串类型(最便捷)

不要把返回的日期字符串转为Date对象,直接处理成你想要的日期格式字符串即可,ngx-charts会将其识别为离散分类,不会自动生成额外时间刻度。修改你的createData方法:

private createData(name: string, totals: BrandDemoTotals[]): any {
    return {
        name,
        series: totals.map((total: BrandDemoTotals) => {
            return {
                // 直接截取日期部分,或者用你想要的格式处理
                name: total.date.slice(0,10),
                value: total.numberOfRecipients,
            };
        }),
    };
}

方案2:保留Date类型,自定义刻度格式化

如果你需要保留Date类型用于时间排序、交互等功能,可以自定义X轴刻度的格式化方法,强制隐藏时间部分:

  1. 先在组件代码中新增格式化方法:
// 新增X轴刻度格式化方法
formatXAxisTick(date: Date): string {
  // 自定义输出格式,比如返回 年-月-日 格式
  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
}
  1. 在ngx-line-chart标签上新增格式化属性绑定:
<ngx-charts-line-chart [id]="id" [legend]="legend" [legendPosition]="legendPosition"
    [legendTitle]="legendTitle" [scheme]="colorScheme" [showXAxisLabel]="showXAxisLabel"
    [showYAxisLabel]="showYAxisLabel" [xAxis]="xAxis" [yAxis]="yAxis" [xAxisLabel]="xAxisLabel"
    [yAxisLabel]="yAxisLabel" [timeline]="timeline" [results]="data" *ngIf="!loading && data"
    <!-- 新增这一行 -->
    [xAxisTickFormatting]="formatXAxisTick">
</ngx-charts-line-chart>

如果想要彻底禁止组件自动生成中间插值刻度,可以额外添加[xAxisTicks]属性,传入你自定义的刻度数组:

// 组件中定义自定义刻度数组,取所有数据的日期即可
public customTicks: Date[] = [];

// 处理数据时填充刻度
this.customTicks = totals.map(item => new Date(item.date));

然后在标签上绑定:[xAxisTicks]="customTicks"

内容的提问来源于stack exchange,提问作者r3plica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:03