Skip to content

qingkouwei/qcharts

Repository files navigation

qCharts for HarmonyOS

qCharts 是一个功能齐全、高性能且支持深度交互的鸿蒙原生图表库。参考了经典的HelloCharts-AndroidXCL-ChartsMPAndroidChart,并针对 ArkUI/ArkTS 进行了全面重构和优化。


📸 效果展示

折线图 柱状图 饼图
折线图 柱状图 饼图
雷达图 漏斗图 仪表盘
雷达图 漏斗图 仪表盘
组合图 气泡图 范围柱图
组合图 气泡图 范围柱图
圆形进度 象限图 3D柱图
圆形进度 象限图 3D柱图

🌟 主要特性

  • 多种图表类型:折线图、柱状图(3D/横向/背向)、饼图(3D/玫瑰图/圆环)、雷达图、漏斗图、仪表盘、气泡图、组合图、范围柱图、圆形进度图、象限图。
  • 深度交互
    • 缩放与平移:支持流畅的双指捏合缩放(Pinch-to-zoom)和单指拖拽平移。
    • 焦点缩放:缩放操作以手指中心点为基准,体验更自然。
    • 点击选中:支持点击波点、柱体或气泡进行高亮,并弹出详细数据浮窗(Tooltip)。
  • 动效展示:支持数据演变的平滑过渡动画。
  • 视觉美化
    • 支持平滑曲线 (Cubic Line)。
    • 支持 3D 效果气泡(径向渐变)。
    • 支持饼图中心空心设计及分类间距设置。
  • 高度可定制:通过 AxisValueFormatter 自定义轴标签格式(如货币、单位、百分比等)。

📊 图表类型详解

1. 折线图 (LineChart)

最常用的趋势分析图表。

  • 多线对比:支持在同一坐标系展示多条趋势线。
  • 平滑曲线:可一键切换为 Cubic 曲线模式。
  • 数据标记:支持设置关节点形状(圆、方、方块)及标签展示。
  • 背景填充:支持线下方位的颜色填充。

折线图预览 多线对比预览

2. 柱状图 (ColumnChart)

适用于分类统计和对比。

  • 标准模型:展示独立的分类柱体。
  • 堆叠模式 (Stacked):支持将多个子数据项堆叠在同一个柱体内,展示总量与构成的关系。
  • 子项控制:每个柱体可包含多个子柱体(Sub-columns)。

柱状图预览 3D柱图预览 横向条形图预览

3. 饼图 (PieChart)

用于展示比例构成。

  • 空心设计:支持中心圆孔及多行中心文字设置。
  • 切片间距:支持设置不同分类间的物理间距。
  • 动态更新:支持扇区大小变化的动画。

饼图预览

4. 气泡图 (BubbleChart)

展示三维数据关系(X, Y, Z/Radius)。

  • 3D 视觉:气泡自带径向渐变效果,视觉极具深度。
  • 智能缩放:根据气泡大小进行视口自动适配。

气泡图预览

5. 组合图 (ComboChart)

将折线图与柱状图完美结合。

  • 多维度视图:底层展示柱状图背景,顶层叠加折线趋势,适合分析“指标与基准”的关系。

组合图预览

6. 雷达图 (RadarChart)

展示多变量数据的对比。

  • 多轴设计:支持自定义维度的刻度和网格。

雷达图预览

7. 漏斗图 (FunnelChart)

展示各阶段的转化率或占比。

  • 阶梯展示:自动计算各级梯形的宽度比例。

漏斗图预览

8. 仪表盘 (GaugeChart)

展示数值在特定范围内的进度。

  • 刻度与指针:支持分段颜色设置及动态指针显示。

仪表盘预览

9. 范围柱图 (RangeBarChart)

展示区间波动数据(最高/最低)。

  • 高低值对比:自动计算柱体起始和终止位置,适合展示气温变化、股价波动等。

范围柱图预览

10. 圆形进度 (CircleChart)

通过多重同心圆展示多组百分比数据。

  • 环形堆叠:支持设置多层环形的半径和宽度,视觉表现力强。

圆形进度预览

11. 象限图 (QuadrantChart)

将数据分布在四个核心象限中。

  • 多维度分布:通过 X/Y 轴中线将视口分为四个区域,适合 SWOT 分析或波士顿矩阵展示。

象限图预览


🛠 快速上手

核心模型初始化

// 以折线图为例
let values: PointValue[] = [new PointValue(0, 10), new PointValue(1, 20)];
let line = new ChartLine(values).setColor('#007DFF').setWidth(2);
let data = new LineChartData([line]);

// 设置轴标签格式化
let axisY = new Axis().setHasLines(true);
axisY.setFormatter({
    formatValue(value: number): string {
        return "¥" + value.toFixed(0);
    }
});
data.setAxisYLeft(axisY);

雷达图初始化示例

let labels = ['力量', '敏捷', '体力', '智力', '技巧'];
let dataset = new RadarDataset([80, 70, 90, 65, 85], '#007DFF', '英雄A');
let radarData = new RadarChartData(labels, [dataset]);

组合图初始化示例

let lineData = new LineChartData([line]);
let columnData = new ColumnChartData(columns);
let comboData = new ComboChartData(lineData, columnData);

UI 组件调用

LineChart({ 
    chartData: this.lineChartData, 
    animateTrigger: $animateTrigger 
})
.width('100%')
.height(300)

⚙️ 核心 API 与配置项

1. 坐标轴配置 (Axis)

用于定制 X 轴和 Y 轴的外观与行为。

  • setName(name: string): 设置轴名称。
  • setTextColor(color: string | number): 设置刻度文字颜色。
  • setTextSize(size: number): 设置刻度文字大小。
  • setHasLines(hasLines: boolean): 是否显示网格线。
  • setLinesColor(color: string | number): 设置网格线颜色。
  • setFormatter(formatter: AxisValueFormatter): 设置自定义数值格式化器。

2. 数据项配置

折线 (ChartLine)

  • setColor(color: string): 线条颜色。
  • setWidth(width: number): 线条宽度。
  • setPointRadius(radius: number): 节点圆点半径。
  • setCubic(isCubic: boolean): 是否开启平滑曲线模式。
  • setHasLabels(hasLabels: boolean): 是否在节点上方显示数值标签。
  • setShape(shape: ValueShape): 节点形状(CIRCLE, SQUARE, DIAMOND)。

柱状图 (ColumnChartData)

  • setStacked(isStacked: boolean): 是否开启堆叠模式。
  • getBaseValue(): 获取基准线数值(默认为 0)。

饼图 (PieChartData)

  • setHasCenterCircle(hasCenterCircle: boolean): 是否显示中心圆孔。
  • setCenterText1(text: string): 设置中心主标题。
  • setCenterText1FontSize(size: number): 设置主标题字号。
  • setSlicesSpacing(spacing: number): 设置切片间的间距。

气泡图 (BubbleChartData)

  • setBubbleScale(scale: number): 统一调整气泡的显示比例。

雷达图 (RadarChartData)

  • setWebColor(color: string): 设置网格线颜色。
  • setAxisColor(color: string): 设置轴线颜色。
  • setLabelsColor(color: string): 设置标签文字颜色。

仪表盘 (GaugeChartData)

  • setSegments(segments: GaugeSegment[]): 设置分段颜色范围。
  • setValue(value: number): 设置当前指针数值。

3. 交互控制 (ChartTouchHandler)

所有图表均支持通过代码控制交互开关。

  • setZoomEnabled(enabled: boolean): 开启/关闭缩放功能。
  • setScrollEnabled(enabled: boolean): 开启/关闭平移滚动功能。

📖 交互指南

操作 效果描述
单指滑动 平移视口,查看历史或未来数据。
双指捏合 缩放视口(支持以手指中心点为焦点)。
单指轻触 选中数据点,弹出 Tooltip 详情。
播放动画 平滑更新数据点位置,展示动效。

📦 安装与集成

目前可以直接拷贝 qchartsLib 源码到你的鸿蒙项目中:

  1. qchartsLib 文件夹复制到工程根目录。
  2. oh-package.json5 中添加本地依赖:
    "dependencies": {
      "qcharts": "file:./qchartsLib"
    }

📄 开源协议

本项目采用 MIT License 协议。

About

qCharts for HarmonyOS: 一个支持深度交互(缩放、平移、动效)的鸿蒙原生图表库。参考 HelloCharts/MPAndroidChart 重构,适配 ArkTS 极简流畅。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors