npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@wc-lib/d3-line-chart

v1.0.14

Published

A D3.js based line chart web component

Downloads

39

Readme

D3折线图Web Component使用说明

本文档提供了关于如何使用D3折线图Web Component (d3-line-chart) 的详细说明,包括安装、配置、API说明以及使用示例。

目录

安装

通过NPM安装

# 使用npm
npm install d3-line-chart

# 使用pnpm
pnpm add d3-line-chart

# 使用yarn
yarn add d3-line-chart

直接引入

您也可以直接通过script标签引入:

<!-- 引入D3.js -->
<script src="https://cdn.jsdelivr.net/npm/d3@7"></script>

<!-- 引入d3-line-chart -->
<script src="path/to/d3-line-chart.min.js"></script>

基本用法

HTML中使用

<!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
  <script src="path/to/d3-line-chart.min.js"></script>
  <style>
    #chart-container {
      width: 800px;
      height: 400px;
      margin: 0 auto;
    }
  </style>
</head>
<body>
  <div id="chart-container">
    <d3-line-chart id="my-chart"></d3-line-chart>
  </div>

  <script>
    // 获取图表实例
    const chart = document.getElementById('my-chart');
    
    // 设置数据
    chart.setData([
      { x: 0, y: 10 },
      { x: 1, y: 15 },
      { x: 2, y: 8 },
      { x: 3, y: 20 },
      { x: 4, y: 12 }
    ]);
    
    // 设置配置
    chart.setConfig({
      lineColor: '#3498db',
      showShadow: true,
      gridColor: '#e0e0e0'
    });
  </script>
</body>
</html>

在框架中使用

React

import React, { useEffect, useRef } from 'react';
import 'path/to/d3-line-chart.min.js';

function LineChartComponent() {
  const chartRef = useRef(null);
  
  useEffect(() => {
    if (chartRef.current) {
      // 设置数据
      chartRef.current.setData([
        { x: 0, y: 10 },
        { x: 1, y: 15 },
        { x: 2, y: 8 }
      ]);
      
      // 设置配置
      chartRef.current.setConfig({
        lineColor: '#3498db',
        showShadow: true
      });
    }
  }, []);
  
  return (
    <div style={{ width: '100%', height: '400px' }}>
      <d3-line-chart ref={chartRef}></d3-line-chart>
    </div>
  );
}

export default LineChartComponent;

Vue

<template>
  <div class="chart-container">
    <d3-line-chart ref="chart"></d3-line-chart>
  </div>
</template>

<script>
export default {
  name: 'LineChartComponent',
  mounted() {
    // 确保组件已注册
    if (typeof window.customElements.get('d3-line-chart') === 'undefined') {
      import('path/to/d3-line-chart.min.js');
    }
    
    // 设置数据
    this.$refs.chart.setData([
      { x: 0, y: 10 },
      { x: 1, y: 15 },
      { x: 2, y: 8 }
    ]);
    
    // 设置配置
    this.$refs.chart.setConfig({
      lineColor: '#3498db',
      showShadow: true
    });
  }
}
</script>

<style scoped>
.chart-container {
  width: 100%;
  height: 400px;
}
</style>

API文档

配置选项

通过setConfig方法可以设置以下配置选项:

| 选项 | 类型 | 默认值 | 描述 | |------|------|--------|------| | lineColor | string | '#3498db' | 折线的颜色 | | showShadow | boolean | true | 是否显示折线下方的阴影 | | gridColor | string | '#e0e0e0' | 网格线的颜色 | | enableAnimation | boolean | true | 是否启用动画 | | animationDuration | number | 1000 | 动画时长(毫秒) | | axisTextColor | string | '#333333' | 坐标轴文本颜色 | | axisTextSize | string | '12px' | 坐标轴文本大小 | | curveType | string | 'linear' | 折线类型,可选值:'linear'(直线)或'curve'(曲线) | | margin | object | {top: 20, right: 30, bottom: 40, left: 50} | 图表边距,用于控制图表内容与容器边缘的距离 | | tickCount | number | 5 | Y轴刻度数量 |

方法

| 方法 | 参数 | 返回值 | 描述 | |------|------|--------|------| | setConfig | config: object | this | 设置图表配置 | | setData | data: Array<{x: number, y: number}> | this | 设置图表数据 | | setKeyPoints | keyPoints: Array<{x: number, y: number, render: string}> | this | 设置折线图的关键点 | | setKeyTicks | keyTicks: Array<{x: number, label: string}> | this | 设置折线图的关键刻度点 | | setEnableAnimation | enable: boolean, duration?: number | this | 设置是否启用动画及动画时长 | | getConfig | - | object | 获取当前配置 | | getData | - | Array<{x: number, y: number}> | 获取当前数据 | | getKeyPoints | - | Array<{x: number, y: number, render: string}> | 获取当前关键点 | | getKeyTicks | - | Array<{x: number, label: string}> | 获取当前关键刻度点 | | getEnableAnimation | - | boolean | 获取是否启用动画 | | getAnimationDuration | - | number | 获取动画时长 | | getGridColor | - | string | 获取网格线颜色 | | getLineColor | - | string | 获取折线颜色 | | getCurveType | - | string | 获取折线类型('linear'或'curve') | | getAxisTextColor | - | string | 获取坐标轴文本颜色 | | getAxisTextSize | - | string | 获取坐标轴文本大小 | | getMargin | - | {top: number, right: number, bottom: number, left: number} | 获取图表边距配置 | | getShowShadow | - | boolean | 获取是否显示阴影 | | getTickCount | - | number | 获取Y轴刻度数量 |

数据结构

数据点

interface DataPoint {
  x: number;  // X坐标
  y: number;  // Y坐标
}

关键点

interface KeyPoint {
  x: number;    // X坐标
  y: number;    // Y坐标
  render: string; // 关键点的渲染HTML
}

关键刻度点

interface KeyTick {
  x: number;    // X坐标
  label: string; // 刻度点显示的文本
}

高级用法

关键点设置

关键点允许在折线上的特定位置显示自定义的HTML内容:

chart.setKeyPoints([
  { 
    x: 2, 
    y: 15, 
    render: `<div style="border: 2px solid #3498db; border-radius: 50%; width: 30px; height: 30px; overflow: hidden;">
      <img src="https://example.com/image.jpg" style="width:100%; height:100%;" />
    </div>` 
  },
  { 
    x: 4, 
    y: 25, 
    render: `<div style="background-color: #e74c3c; color: white; padding: 5px; border-radius: 3px;">
      重要点
    </div>` 
  }
]);

关键刻度点设置

关键刻度点允许在X轴上的特定位置显示自定义文本:

chart.setKeyTicks([
  { x: 0, label: '开始' },
  { x: 2, label: '中间点' },
  { x: 4, label: '结束' }
]);

动画控制

您可以控制折线图的动画效果:

// 启用动画,设置动画时长为2秒
chart.setEnableAnimation(true, 2000);

// 禁用动画
chart.setEnableAnimation(false);

大数值处理

当处理大数值时,组件会自动将数值格式化为更易读的形式(如10K、1M等):

// 生成大数值数据
const largeData = [];
for (let i = 0; i < 10; i++) {
  largeData.push({
    x: i,
    y: Math.random() * 1000000 // 大数值
  });
}

// 设置数据
chart.setData(largeData);

自定义边距

您可以通过设置margin配置来自定义图表的边距,这对于适应不同的显示需求非常有用:

// 设置自定义边距
chart.setConfig({
  margin: {
    top: 30,    // 上边距
    right: 40,  // 右边距
    bottom: 50, // 下边距
    left: 60    // 左边距
  }
});

边距配置对于以下场景特别有用:

  • 当坐标轴标签较长时,增加左边距和下边距
  • 当图表需要更多的顶部空间来显示标题或注释时
  • 当需要在不同尺寸的容器中保持一致的视觉效果时

性能优化

数据抽稀

组件内部使用Ramer-Douglas-Peucker算法进行数据抽稀,以提高渲染性能。对于大量数据点的情况,这种优化是自动进行的,无需手动配置。

渲染优化

组件使用Canvas绘制折线和阴影,使用SVG绘制网格线、坐标轴和关键点,充分发挥两种技术的优势,提高渲染性能。

响应式设计

组件会自动监听容器大小变化并调整图表尺寸,使用了防抖处理以避免频繁重绘导致的性能问题。

浏览器兼容性

组件使用现代Web技术(Web Components、Canvas、SVG等),兼容所有主流现代浏览器:

  • Chrome 60+
  • Firefox 63+
  • Safari 10.1+
  • Edge 79+

常见问题

图表不显示

  1. 确保引入了D3.js库
  2. 确保容器元素有明确的宽高设置
  3. 检查是否正确设置了数据

关键点不显示

  1. 确保关键点的坐标在图表的可见范围内
  2. 检查render字段的HTML是否有语法错误

大数值显示问题

如果大数值显示不够精确,可以通过gridNumberDecimal配置项调整小数位数:

chart.setConfig({
  gridNumberDecimal: 2 // 显示2位小数
});

自定义样式

如果需要更多样式自定义,可以使用CSS变量或直接修改组件内部样式:

d3-line-chart {
  --line-color: #3498db;
  --grid-color: #e0e0e0;
  --axis-text-color: #333333;
}

如有更多问题或建议,请参考示例代码或联系开发团队。