aardio 文档

Chart 图表

AntdUI.Chart 用于在桌面窗口中展示折线、柱状、饼图、面积、雷达等常见统计图。适合中低复杂度的业务趋势、分类占比、多系列对比。

颜色约定: AntdUI 的 System.Drawing.Color 在 aardio 中就是 0xAARRGGBB 格式数值,与 GDI+、gdip 及 plus 控件运行时颜色格式相同。图表颜色属性直接写该数值,不需要调用 System.Drawing.Color.FromArgb(...)

定位提醒:Chart 适合快速内嵌本地图表。若需要复杂交互看板、流式布局、前端现成图表生态,优先使用 web.view + 前端图表库。

最小示例:折线图

AntdUI.Chart(winform.host) 会自动创建 AntdUI.BaseForm 并填充 custom 宿主,一般不需要再写 Dock = Fill

import win.ui;
/*DSG{{*/
var winform = win.form(text="AntdUI Chart";right=780;bottom=460)
winform.add(
host={cls="custom";left=16;top=16;right=764;bottom=444;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import dotNet.AntdUI;

var chart = AntdUI.Chart(winform.host);
chart.Title = "周订单趋势";
chart.ChartType = AntdUI.TChartType.Line;
chart.ShowLegend = true;
chart.ShowGrid = true;
chart.ShowAxes = true;
chart.ShowTooltip = true;
chart.EnableAnimation = true;
chart.ShowXAxisLabels = true;
chart.ShowYAxisLabels = true;

var dataset = AntdUI.ChartDataset("订单量");
dataset.FillColor = 0x781677FF;
dataset.BorderColor = 0xFF1677FF;
dataset.BorderWidth = 2;
dataset.AddPoint("周一",1,35);
dataset.AddPoint("周二",2,48);
dataset.AddPoint("周三",3,42);
dataset.AddPoint("周四",4,61);
dataset.AddPoint("周五",5,55);
chart.AddDataset(dataset);
chart.RefreshChart();

winform.show();
win.loopMessage();

多系列柱状图

import win.ui;
/*DSG{{*/
var winform = win.form(text="多系列柱状图";right=820;bottom=480)
winform.add(
host={cls="custom";left=16;top=16;right=804;bottom=464;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import dotNet.AntdUI;
import System.Drawing;

var chart = AntdUI.Chart(winform.host);
chart.Title = "本周 / 上周对比";
chart.ChartType = AntdUI.TChartType.Bar;
chart.ShowLegend = true;
chart.ShowGrid = true;
chart.ShowAxes = true;
chart.ShowTooltip = true;
chart.EnableAnimation = true;
chart.LegendPosition = System.Drawing.ContentAlignment.BottomCenter;
chart.YAxisLabelFormat = "0";

var thisWeek = AntdUI.ChartDataset("本周",0xB41677FF);
thisWeek.BorderColor = 0xFF1677FF;
thisWeek.AddPoint("一",1,12);
thisWeek.AddPoint("二",2,18);
thisWeek.AddPoint("三",3,15);
thisWeek.AddPoint("四",4,22);
thisWeek.AddPoint("五",5,19);

var lastWeek = AntdUI.ChartDataset("上周",0xA052C41A);
lastWeek.BorderColor = 0xFF52C41A;
lastWeek.AddPoint("一",1,9);
lastWeek.AddPoint("二",2,14);
lastWeek.AddPoint("三",3,11);
lastWeek.AddPoint("四",4,16);
lastWeek.AddPoint("五",5,13);

chart.AddDataset(thisWeek);
chart.AddDataset(lastWeek);
chart.RefreshChart();

winform.show();
win.loopMessage();

饼图 / 环形图

饼图、环形图、极坐标面积图通常只使用一个数据集,并关闭坐标轴与网格。

import win.ui;
/*DSG{{*/
var winform = win.form(text="区域占比";right=720;bottom=480)
winform.add(
host={cls="custom";left=16;top=16;right=704;bottom=464;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import dotNet.AntdUI;

var chart = AntdUI.Chart(winform.host);
chart.Title = "区域占比";
chart.ChartType = AntdUI.TChartType.Pie; // 或 AntdUI.TChartType.Doughnut
chart.ShowAxes = false;
chart.ShowGrid = false;
chart.ShowLegend = true;
chart.ShowTooltip = true;
chart.EnablePieHoverValue = true;
chart.EnableAnimation = true;

var pie = AntdUI.ChartDataset("区域");

// 数据点颜色直接使用 0xAARRGGBB 数值
var east = AntdUI.ChartDataPoint("华东",1,36);
east.Color = 0xFF1677FF;
var south = AntdUI.ChartDataPoint("华南",2,24);
south.Color = 0xFF52C41A;
pie.AddPoint(east);
pie.AddPoint(south);
pie.AddPoint("华北",3,22);
pie.AddPoint("西部",4,18);

chart.AddDataset(pie);
chart.RefreshChart();

winform.show();
win.loopMessage();

气泡图

气泡图的第 4 个数值是半径,可用 AddPoint(label,x,y,radius)

import win.ui;
/*DSG{{*/
var winform = win.form(text="渠道气泡图";right=760;bottom=480)
winform.add(
host={cls="custom";left=16;top=16;right=744;bottom=464;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import dotNet.AntdUI;

var chart = AntdUI.Chart(winform.host);
chart.Title = "渠道效果";
chart.ChartType = AntdUI.TChartType.Bubble;
chart.ShowAxes = true;
chart.ShowGrid = true;
chart.ShowLegend = true;
chart.EnableAnimation = true;

var bubble = AntdUI.ChartDataset("渠道");
bubble.FillColor = 0x8C1677FF;
bubble.BorderColor = 0xFF1677FF;
bubble.AddPoint("搜索",20,35,14);
bubble.AddPoint("社媒",45,55,22);
bubble.AddPoint("线下",70,25,10);
chart.AddDataset(bubble);
chart.RefreshChart();

winform.show();
win.loopMessage();

更新数据与刷新

chart.ClearDatasets();

var dataset = AntdUI.ChartDataset("访问量");
dataset.AddPoint("周一",1,350);
dataset.AddPoint("周二",2,420);
dataset.AddPoint("周三",3,390);
chart.AddDataset(dataset);

// 修改数据集后调用 RefreshChart 立即重绘
chart.RefreshChart();

常用属性

成员 说明
ChartType 图表类型,见下方枚举。
Datasets 数据集集合(.NET List<ChartDataset>)。建议用 AddDataset 管理。索引从 0 开始。
Title 标题文本。
TitleColor / TitleFont 标题颜色与字体;颜色直接使用 0xAARRGGBB 数值。
ShowLegend 是否显示图例。
LegendPosition 图例位置,System.Drawing.ContentAlignment
LegendPadding 图例内边距。
LegendBackColor / LegendBorderColor 图例背景与边框颜色,直接使用 0xAARRGGBB 数值。
ShowGrid 是否显示网格。
ShowAxes 是否显示坐标轴。饼图/环形图通常设为 false
ShowXAxisLabels / ShowYAxisLabels 是否显示轴标签。
ShowTooltip 是否显示悬停提示。
EnableAnimation 是否启用入场动画。
AnimationDuration 动画时长(毫秒)。
Padding 图表内边距。
AxisColor / GridColor 轴线颜色与网格颜色,直接使用 0xAARRGGBB 数值。
XMin / XMax / YMin / YMax 轴范围;不设置时自动计算。
XAxisLabelFormat / YAxisLabelFormat 轴标签格式串,例如 "0""0.0"
CursorMode 十字/水平/垂直光标,AntdUI.TChartCursor
ShowCursorAxisValue 显示光标对应轴值。
EnablePieHoverValue 饼图悬停时显示数值。
ShowRadarValues 雷达图显示数值。
PieColors 饼图颜色数组(System.Drawing.Color[]);数组元素仍直接使用 0xAARRGGBB 数值。也可给每个 ChartDataPoint.Color 单独上色。
HoveredPoint 当前悬停点,ChartDataPoint

ChartDataset

成员 说明
Label 图例名称。
DataPoints 数据点集合,索引从 0 开始;读取可用 dataset.DataPoints.get_Item(0)
Count 点数量。
FillColor 填充色,直接使用 0xAARRGGBB 数值。
BorderColor 边框/折线色,直接使用 0xAARRGGBB 数值。
BorderWidth 边框宽度。
LegendBoxFillColor 图例色块颜色,直接使用 0xAARRGGBB 数值。
Opacity 透明度,0~1
Visible 是否显示该系列。
XFormat / YFormat / RadiusFormat 提示文本中的数值格式。

构造:

var ds1 = AntdUI.ChartDataset("系列A");
var ds2 = AntdUI.ChartDataset("系列B",0xA052C41A);

ChartDataPoint

成员 说明
Label 标签文本。
X / Y 坐标值。
Radius 半径,气泡图使用。
Color 点/扇区颜色;aardio 中直接使用 0xAARRGGBB 数值。
Tooltip 自定义提示文本。
Visible 是否显示。
var point = AntdUI.ChartDataPoint("华东",1,36);
point.Color = 0xFF1677FF;
point.Tooltip = "华东 36%";
dataset.AddPoint(point);

图表类型

chart.ChartType = AntdUI.TChartType.xxx

枚举 说明
Line 折线
Spline 平滑折线
SteppedLine 阶梯折线
Area 面积
SplineArea 平滑面积
SteppedArea 阶梯面积
Bar 柱状
HorizontalBar 水平条形
StackedBar 堆叠柱状
StackedHorizontalBar 堆叠水平条形
Pie 饼图
Doughnut 环形图
PolarArea 极坐标面积
Radar 雷达图
Scatter 散点
Bubble 气泡

光标模式 AntdUI.TChartCursor

事件

事件签名为 (sender,e)

chart.PointClick = function(sender,e){
    var point = e.DataPoint;
    if(point){
        winform.text = string.format(
            "点击 %s  y=%s  系列索引=%s  点索引=%s",
            point.Label,point.Y,e.DatasetIndex,e.PointIndex
        );
    }
}

chart.PointHover = function(sender,e){
    if(e.DataPoint){
        winform.text = "悬停 " + e.DataPoint.Label + " = " + e.DataPoint.Y;
    }
}

chart.AreaClick = function(sender,e){
    // e.Location 为点击位置
    winform.text = "区域点击 x=" + e.Location.X + " y=" + e.Location.Y;
}
事件 说明
PointClick 点击数据点。e.DataPointe.DatasetIndexe.PointIndex
PointHover 悬停数据点。另有 e.Location
AreaClick 点击图表空白区域。e.Location

索引都是 .NET 风格的 0 基

颜色写法

在 aardio 中,.NET 的 System.Drawing.Color 会直接转换为 0xAARRGGBB 格式数值,反向传给 .NET 颜色属性时也会自动转换。因此直接写 ARGB 数值即可,不需要调用 System.Drawing.Color.FromArgb(...),其格式与 GDI+、plus 控件运行时颜色相同:

dataset.FillColor = 0x781677FF;   // A=0x78,R=0x16,G=0x77,B=0xFF
dataset.BorderColor = 0xFF1677FF;
chart.GridColor = 0xFFE6E6E6;

注意不要把普通 GDI COLORREF0xBBGGRR 与这里的 0xAARRGGBB 混用。

注意

Markdown 格式