public string GetFormatterContent(int labelIndex, double value, double minValue, double maxValue, bool isLog = false) { if (showAsPositiveNumber && value < 0) { value = Math.Abs(value); } if (string.IsNullOrEmpty(m_Formatter)) { if (isLog) { return(GetFormatterFunctionContent(labelIndex, value, ChartCached.NumberToStr(value, numericFormatter))); } if (minValue >= -1 && minValue <= 1 && maxValue >= -1 && maxValue <= 1) { int minAcc = ChartHelper.GetFloatAccuracy(minValue); int maxAcc = ChartHelper.GetFloatAccuracy(maxValue); int curAcc = ChartHelper.GetFloatAccuracy(value); int acc = Mathf.Max(Mathf.Max(minAcc, maxAcc), curAcc); return(GetFormatterFunctionContent(labelIndex, value, ChartCached.FloatToStr(value, numericFormatter, acc))); } return(GetFormatterFunctionContent(labelIndex, value, ChartCached.NumberToStr(value, numericFormatter))); } else { var content = m_Formatter; FormatterHelper.ReplaceAxisLabelContent(ref content, numericFormatter, value); return(GetFormatterFunctionContent(labelIndex, value, content)); } }
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, ref List <SerieParams> paramList, ref string title) { dataIndex = serie.context.pointerItemDataIndex; if (dataIndex < 0) { return; } var serieData = serie.GetSerieData(dataIndex); if (serieData == null) { return; } if (string.IsNullOrEmpty(category)) { var xAxis = chart.GetChartComponent <XAxis>(serie.xAxisIndex); if (xAxis != null) { category = xAxis.GetData((int)serieData.GetData(0)); } } title = serie.serieName; var param = serie.context.param; param.serieName = serie.serieName; param.serieIndex = serie.index; param.dimension = defaultDimension; param.dataCount = serie.dataCount; param.serieData = serieData; param.color = serieData.context.color; param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); param.columns.Clear(); param.columns.Add(param.marker); param.columns.Add(category); param.columns.Add(ChartCached.NumberToStr(serieData.GetData(defaultDimension), param.numericFormatter)); paramList.Add(param); }
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, ref List <SerieParams> paramList, ref string title) { if (dataIndex < 0) { dataIndex = serie.context.pointerItemDataIndex; } if (dataIndex < 0) { return; } var serieData = serie.GetSerieData(dataIndex); if (serieData == null) { return; } var param = serie.context.param; param.serieName = serie.serieName; param.serieIndex = serie.index; param.category = category; param.dimension = defaultDimension; param.serieData = serieData; param.dataCount = serie.dataCount; param.value = serieData.GetData(0); param.total = serieData.GetData(1); param.color = SerieHelper.GetItemColor(serie, serieData, chart.theme, dataIndex, false); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);; param.columns.Clear(); param.columns.Add(param.marker); param.columns.Add(serieData.name); param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter)); paramList.Add(param); }
public static string GetFormatterContent(Serie serie, MarkLineData data) { var serieLabel = data.label; var numericFormatter = serieLabel.numericFormatter; if (string.IsNullOrEmpty(serieLabel.formatter)) { var content = ChartCached.NumberToStr(data.runtimeValue, numericFormatter); return(serieLabel.formatterFunction == null? content: serieLabel.formatterFunction(data.index, data.runtimeValue, null, content)); } else { var content = serieLabel.formatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, data.runtimeValue, 0, serie.serieName, data.name, data.name, Color.clear, null); return(serieLabel.formatterFunction == null? content: serieLabel.formatterFunction(data.index, data.runtimeValue, null, content)); } }
public static string GetFormatterContent(Serie serie, SerieData serieData, double dataValue, double dataTotal, LabelStyle serieLabel, Color color) { if (serieLabel == null) { serieLabel = SerieHelper.GetSerieLabel(serie, serieData); } var numericFormatter = serieLabel == null ? "" : serieLabel.numericFormatter; var serieName = serie.serieName; var dataName = serieData != null ? serieData.name : null; if (string.IsNullOrEmpty(serieLabel.formatter)) { var currentContent = ChartCached.NumberToStr(dataValue, numericFormatter); if (serieLabel.formatterFunction == null) { return(currentContent); } else { return(serieLabel.formatterFunction(serieData.index, dataValue, null, currentContent)); } } else { var content = serieLabel.formatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, dataValue, dataTotal, serieName, dataName, dataName, color, serieData); if (serieLabel.formatterFunction == null) { return(content); } else { return(serieLabel.formatterFunction(serieData.index, dataValue, null, content)); } } }
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, ref List <SerieParams> paramList, ref string title) { if (dataIndex < 0) { dataIndex = serie.context.pointerItemDataIndex; } if (dataIndex < 0) { return; } var serieData = serie.GetSerieData(dataIndex); if (serieData == null) { return; } title = category; var color = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false); var newMarker = SerieHelper.GetItemMarker(serie, serieData, marker); var newItemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); var param = serie.context.param; param.serieName = serie.serieName; param.serieIndex = serie.index; param.category = category; param.dimension = 1; param.serieData = serieData; param.dataCount = serie.dataCount; param.value = 0; param.total = 0; param.color = color; param.marker = newMarker; param.itemFormatter = newItemFormatter; param.numericFormatter = newNumericFormatter; param.columns.Clear(); param.columns.Add(param.marker); param.columns.Add(serie.serieName); param.columns.Add(string.Empty); paramList.Add(param); for (int i = 0; i < 4; i++) { param = new SerieParams(); param.serieName = serie.serieName; param.serieIndex = serie.index; param.dimension = i; param.serieData = serieData; param.dataCount = serie.dataCount; param.value = serieData.GetData(i); param.total = SerieHelper.GetMaxData(serie, i); param.color = color; param.marker = newMarker; param.itemFormatter = newItemFormatter; param.numericFormatter = newNumericFormatter; param.columns.Clear(); param.columns.Add(param.marker); param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i)); param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter)); paramList.Add(param); } }
/// <summary> /// 替换字符串中的通配符,支持的通配符有{.}、{a}、{b}、{c}、{d}、{e}、{f}、{g}。 /// </summary> /// <param name="content">要替换的字符串</param> /// <param name="dataIndex">选中的数据项serieData索引</param> /// <param name="numericFormatter">默认的数字格式化</param> /// <param name="serie">选中的serie</param> /// <param name="series">所有serie</param> /// <param name="theme">用来获取指定index的颜色</param> /// <param name="category">选中的类目,一般用在折线图和柱状图</param> /// <param name="dataZoom">dataZoom</param> /// <returns></returns> public static bool ReplaceContent(ref string content, int dataIndex, string numericFormatter, Serie serie, BaseChart chart, DataZoom dataZoom = null) { var foundDot = false; var mc = s_Regex.Matches(content); foreach (var m in mc) { var old = m.ToString(); var args = s_RegexSub.Matches(m.ToString()); var argsCount = args.Count; if (argsCount <= 0) { continue; } int targetIndex = 0; char p = GetSerieIndex(args[0].ToString(), ref targetIndex); if (targetIndex >= 0) { serie = chart.GetSerie(targetIndex); if (serie == null) { continue; } } else if (serie != null) { targetIndex = serie.index; } else { serie = chart.GetSerie(0); targetIndex = 0; } if (serie == null) { continue; } if (p == '.') { var bIndex = targetIndex; if (argsCount >= 2) { var args1Str = args[1].ToString(); if (s_RegexN.IsMatch(args1Str)) { bIndex = int.Parse(args1Str); } } content = content.Replace(old, ChartCached.ColorToDotStr(chart.theme.GetColor(bIndex))); foundDot = true; } else if (p == 'a' || p == 'A') { if (argsCount == 1) { content = content.Replace(old, serie.serieName); } } else if (p == 'b' || p == 'B' || p == 'e' || p == 'E') { var bIndex = dataIndex; if (argsCount >= 2) { var args1Str = args[1].ToString(); if (s_RegexN.IsMatch(args1Str)) { bIndex = int.Parse(args1Str); } } var needCategory = (p != 'e' && p != 'E') && (serie is Line || serie is Bar); if (needCategory) { var category = chart.GetTooltipCategory(dataIndex, serie, dataZoom); content = content.Replace(old, category); } else { var serieData = serie.GetSerieData(bIndex, dataZoom); content = content.Replace(old, serieData.name); } } else if (p == 'g' || p == 'G') { content = content.Replace(old, ChartCached.NumberToStr(serie.dataCount, "")); } else if (p == 'c' || p == 'C' || p == 'd' || p == 'D' || p == 'f' || p == 'f') { var isPercent = p == 'd' || p == 'D'; var isTotal = p == 'f' || p == 'f'; var bIndex = dataIndex; var dimensionIndex = -1; if (argsCount >= 2) { var args1Str = args[1].ToString(); if (s_RegexFn.IsMatch(args1Str)) { numericFormatter = args1Str; } else if (s_RegexN_N.IsMatch(args1Str)) { var temp = args1Str.Split('-'); bIndex = int.Parse(temp[0]); dimensionIndex = int.Parse(temp[1]); } else if (s_RegexN.IsMatch(args1Str)) { dimensionIndex = int.Parse(args1Str); } else { Debug.LogError("unmatch:" + args1Str); continue; } } if (argsCount >= 3) { numericFormatter = args[2].ToString(); } if (dimensionIndex == -1) { dimensionIndex = 1; } if (numericFormatter == string.Empty) { numericFormatter = SerieHelper.GetNumericFormatter(serie, serie.GetSerieData(bIndex), ""); } var value = serie.GetData(bIndex, dimensionIndex, dataZoom); if (isPercent) { var total = serie.GetDataTotal(dimensionIndex, serie.GetSerieData(bIndex)); var percent = total == 0 ? 0 : value / serie.yTotal * 100; content = content.Replace(old, ChartCached.FloatToStr(percent, numericFormatter)); } else if (isTotal) { var total = serie.GetDataTotal(dimensionIndex, serie.GetSerieData(bIndex)); content = content.Replace(old, ChartCached.FloatToStr(total, numericFormatter)); } else { content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter)); } } } content = s_RegexNewLine.Replace(content, PH_NN); return(foundDot); }
public static void ReplaceSerieLabelContent(ref string content, string numericFormatter, int dataCount, double value, double total, string serieName, string category, string dataName, Color color, SerieData serieData) { var mc = s_RegexForSerieLabel.Matches(content); foreach (var m in mc) { var old = m.ToString(); var args = s_RegexSubForSerieLabel.Matches(old); var argsCount = args.Count; if (argsCount <= 0) { continue; } var pstr = args[0].ToString(); var p = pstr.ElementAt(0); var pIndex = -1; if (pstr.Length > 1) { int.TryParse(pstr.Substring(1, pstr.Length - 1), out pIndex); } if (argsCount >= 2) { numericFormatter = args[1].ToString(); } if (p == '.') { content = content.Replace(old, ChartCached.ColorToDotStr(color)); } else if (p == 'a' || p == 'A') { content = content.Replace(old, serieName); } else if (p == 'b' || p == 'B') { content = content.Replace(old, category); } else if (p == 'e' || p == 'E') { content = content.Replace(old, dataName); } else if (p == 'd' || p == 'D') { var rate = total == 0 ? 0 : value / total * 100; content = content.Replace(old, ChartCached.NumberToStr(rate, numericFormatter)); } else if (p == 'c' || p == 'C') { if (pIndex >= 0 && serieData != null) { content = content.Replace(old, ChartCached.NumberToStr(serieData.GetData(pIndex), numericFormatter)); } else { content = content.Replace(old, ChartCached.NumberToStr(value, numericFormatter)); } } else if (p == 'f' || p == 'f') { content = content.Replace(old, ChartCached.NumberToStr(total, numericFormatter)); } else if (p == 'g' || p == 'G') { content = content.Replace(old, ChartCached.NumberToStr(dataCount, numericFormatter)); } } content = TrimAndReplaceLine(content); }
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, string itemFormatter, string numericFormatter, ref List <SerieParams> paramList, ref string title) { if (!serie.context.pointerEnter) { return; } dataIndex = serie.context.pointerItemDataIndex; if (dataIndex < 0) { return; } if (serie.radarType == RadarType.Single) { UpdateItemSerieParams(ref paramList, ref title, dataIndex, category, marker, itemFormatter, numericFormatter); return; } var radar = chart.GetChartComponent <RadarCoord>(serie.radarIndex); if (radar == null) { return; } var serieData = serie.GetSerieData(dataIndex); if (serieData == null) { return; } var color = SerieHelper.GetItemColor(serie, serieData, chart.theme, dataIndex, false);; title = serieData.name; for (int i = 0; i < serieData.data.Count; i++) { var indicator = radar.GetIndicator(i); if (indicator == null) { continue; } var param = new SerieParams(); param.serieName = serie.serieName; param.serieIndex = serie.index; param.dimension = i; param.serieData = serieData; param.dataCount = serie.dataCount; param.value = serieData.GetData(i); param.total = indicator.max; param.color = color; param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); param.columns.Clear(); param.columns.Add(param.marker); param.columns.Add(indicator.name); param.columns.Add(ChartCached.NumberToStr(serieData.GetData(i), param.numericFormatter)); paramList.Add(param); } }