protected override void RefreshTooltip() { base.RefreshTooltip(); bool showTooltip = false; for (int i = 0; i < m_PieTempDataList.Count; i++) { int index = m_Tooltip.dataIndex[i]; if (index < 0) { continue; } showTooltip = true; var serie = m_Series.GetSerie(i); string key = serie.data[index].name; if (string.IsNullOrEmpty(key)) { key = m_Legend.GetData(index); } float value = serie.data[index].data[1]; sb.Length = 0; if (!string.IsNullOrEmpty(serie.name)) { sb.Append(serie.name).Append("\n"); } sb.Append("<color=#").Append(m_ThemeInfo.GetColorStr(index)).Append(">● </color>") .Append(key).Append(": ").Append(ChartCached.FloatToStr(value)); m_Tooltip.UpdateContentText(sb.ToString()); var pos = m_Tooltip.GetContentPos(); if (pos.x + m_Tooltip.width > chartWidth) { pos.x = chartWidth - m_Tooltip.width; } if (pos.y - m_Tooltip.height < 0) { pos.y = m_Tooltip.height; } m_Tooltip.UpdateContentPos(pos); } m_Tooltip.SetActive(showTooltip); }
public string GetFormatterContent(int dataIndex, Series series, string category, DataZoom dataZoom = null) { if (string.IsNullOrEmpty(m_Formatter)) { return(""); } else { string content = m_Formatter; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (serie.show) { var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar; var serieData = serie.GetSerieData(dataIndex, dataZoom); if (i == 0) { content = content.Replace("{a}", serie.name); content = content.Replace("{b}", needCategory ? category : serieData.name); content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1))); //if (serie.type == SerieType.Pie) { var percent = serieData.GetData(1) / serie.yTotal * 100; content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } } content = content.Replace("{a" + i + "}", serie.name); content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name); content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1))); //if (serie.type == SerieType.Pie) { var percent = serieData.GetData(1) / serie.yTotal * 100; content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1)); } } } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
public string GetFormatterContent(float value) { if (string.IsNullOrEmpty(m_Formatter)) { if (value - (int)value == 0) { return(ChartCached.IntToStr((int)value)); } else { return(ChartCached.FloatToStr(value, 1)); } } else { var content = m_Formatter; if (content.Contains("{value:f2}")) { content = m_Formatter.Replace("{value:f2}", ChartCached.FloatToStr(value, 2)); } else if (content.Contains("{value:f1}")) { content = m_Formatter.Replace("{value:f1}", ChartCached.FloatToStr(value, 1)); } else if (content.Contains("{value}")) { if (value - (int)value == 0) { content = m_Formatter.Replace("{value}", ChartCached.IntToStr((int)value)); } else { content = m_Formatter.Replace("{value}", ChartCached.FloatToStr(value, 1)); } } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
private static void InitPieTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, int index, ThemeInfo themeInfo) { string key = serie.data[index].name; var serieData = serie.GetSerieData(index); var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); float value = serieData.GetData(1); sb.Length = 0; if (!string.IsNullOrEmpty(serie.name)) { sb.Append(serie.name).Append(FormatterHelper.PH_NN); } sb.Append("<color=#").Append(themeInfo.GetColorStr(index)).Append(">● </color>"); if (!string.IsNullOrEmpty(key)) { sb.Append(key).Append(": "); } sb.Append(ChartCached.FloatToStr(value, numericFormatter)); }
public static void ReplaceAxisLabelContent(ref string content, string numericFormatter, float value) { var mc = s_RegexForAxisLabel.Matches(content); foreach (var m in mc) { var old = m.ToString(); var args = s_RegexSubForAxisLabel.Matches(m.ToString()); var argsCount = args.Count; if (argsCount <= 0) { continue; } if (argsCount >= 2) { numericFormatter = args[1].ToString(); } content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter)); } content = TrimAndReplaceLine(content); }
public string GetFormatterContent(string serieName, string dataName, float dataValue, float dataTotal = 0) { if (string.IsNullOrEmpty(m_Formatter)) { return(ChartCached.FloatToStr(dataValue)); } else { var content = m_Formatter.Replace("{a}", serieName); content = content.Replace("{b}", dataName); content = content.Replace("{c}", ChartCached.FloatToStr(dataValue)); if (dataTotal > 0) { var percent = dataValue / dataTotal * 100; content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
protected override void RefreshTooltip() { base.RefreshTooltip(); int serieIndex = m_Tooltip.dataIndex[0]; if (serieIndex < 0) { if (m_Tooltip.IsActive()) { m_Tooltip.SetActive(false); RefreshChart(); } return; } m_Tooltip.SetActive(true); var serie = m_Series.GetSerie(serieIndex); var radar = m_Radars[serie.radarIndex]; var serieData = serie.GetSerieData(m_Tooltip.dataIndex[1]); StringBuilder sb = new StringBuilder(serieData.name); for (int i = 0; i < radar.indicatorList.Count; i++) { string key = radar.indicatorList[i].name; float value = serieData.GetData(i); sb.Append("\n"); sb.AppendFormat("{0}: {1}", key, ChartCached.FloatToStr(value, 0, m_Tooltip.forceENotation)); } m_Tooltip.UpdateContentText(sb.ToString()); var pos = m_Tooltip.GetContentPos(); if (pos.x + m_Tooltip.width > chartWidth) { pos.x = chartWidth - m_Tooltip.width; } if (pos.y - m_Tooltip.height < 0) { pos.y = m_Tooltip.height; } m_Tooltip.UpdateContentPos(pos); }
private void UdpateTooltipLabel() { if (tooltip.type != Tooltip.Type.Corss) { return; } var m_Polar = GetPolar(tooltip.runtimePolarIndex); if (m_Polar == null) { return; } var m_AngleAxis = GetAngleAxis(m_Polar.index); var m_RadiusAxis = GetRadiusAxis(m_Polar.index); var cenPos = m_Polar.runtimeCenterPos; var radius = m_Polar.runtimeRadius; m_AngleAxis.SetTooltipLabelActive(true); m_RadiusAxis.SetTooltipLabelActive(true); m_AngleAxis.UpdateTooptipLabelText(ChartCached.FloatToStr(tooltip.runtimeAngle)); var tooltipAngle = tooltip.runtimeAngle + m_AngleAxis.runtimeStartAngle; var ep = ChartHelper.GetPos(cenPos, radius + 5, tooltipAngle, true); m_AngleAxis.UpdateTooltipLabelPos(ep); var dist = Vector2.Distance(pointerPos, cenPos); if (dist > radius) { dist = radius; } float min = m_RadiusAxis.runtimeMinValue; float max = m_RadiusAxis.runtimeMaxValue; var value = (float)(min + dist / radius * m_RadiusAxis.runtimeMinMaxRange); m_RadiusAxis.UpdateTooptipLabelText(ChartCached.FloatToStr(value)); m_RadiusAxis.UpdateTooltipLabelPos(ChartHelper.GetPos(cenPos, dist, m_AngleAxis.runtimeStartAngle, true)); }
public static string GetFormatterContent(Serie serie, SerieData serieData, float dataValue, float dataTotal, SerieLabel serieLabel = null) { if (serieLabel == null) { serieLabel = SerieHelper.GetSerieLabel(serie, serieData); } var numericFormatter = GetLabelNumericFormatter(serie, serieData); var serieName = serie.name; var dataName = serieData != null ? serieData.name : null; if (string.IsNullOrEmpty(serieLabel.formatter)) { return(ChartCached.NumberToStr(dataValue, numericFormatter)); } else { var content = serieLabel.formatter.Replace("{a}", serieName); content = content.Replace("{b}", dataName); content = content.Replace("{c}", ChartCached.NumberToStr(dataValue, numericFormatter)); content = content.Replace("{c:f0}", ChartCached.IntToStr((int)Mathf.Round(dataValue))); content = content.Replace("{c:f1}", ChartCached.FloatToStr(dataValue, string.Empty, 1)); content = content.Replace("{c:f2}", ChartCached.FloatToStr(dataValue, string.Empty, 2)); if (dataTotal > 0) { var percent = dataValue / dataTotal * 100; content = content.Replace("{d}", ChartCached.NumberToStr(percent, numericFormatter)); content = content.Replace("{d:f0}", ChartCached.IntToStr((int)Mathf.Round(percent))); content = content.Replace("{d:f1}", ChartCached.FloatToStr(percent, string.Empty, 1)); content = content.Replace("{d:f2}", ChartCached.FloatToStr(percent, string.Empty, 2)); } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
public string GetFormatterContent(float value, float minValue, float maxValue, bool isLog = false) { if (showAsPositiveNumber && value < 0) { value = Mathf.Abs(value); } if (string.IsNullOrEmpty(m_Formatter)) { if (isLog) { if (value - (int)value == 0) { return(ChartCached.IntToStr((int)value)); } else { return(ChartCached.FloatToStr(value)); } } 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(ChartCached.FloatToStr(value, acc, m_ForceENotation)); } else if (value - (int)value == 0) { return(ChartCached.IntToStr((int)value)); } else { return(ChartCached.FloatToStr(value, 1)); } } else if (m_Formatter.Contains("{value")) { var content = m_Formatter; if (content.Contains("{value:f0}")) { content = m_Formatter.Replace("{value:f0}", ChartCached.IntToStr((int)value)); } if (content.Contains("{value:f2}")) { content = m_Formatter.Replace("{value:f2}", ChartCached.FloatToStr(value, 2)); } else if (content.Contains("{value:f1}")) { content = m_Formatter.Replace("{value:f1}", ChartCached.FloatToStr(value, 1)); } else if (content.Contains("{value}")) { if (value - (int)value == 0) { content = m_Formatter.Replace("{value}", ChartCached.IntToStr((int)value)); } else { content = m_Formatter.Replace("{value}", ChartCached.FloatToStr(value, 1)); } } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } else { return(value.ToString(m_Formatter)); } }
public static string GetPolarFormatterContent(Tooltip tooltip, Series series, ThemeInfo themeInfo, AngleAxis angleAxis) { if (string.IsNullOrEmpty(tooltip.formatter)) { var sb = ChartHelper.sb; sb.Length = 0; var title = tooltip.titleFormatter; var formatTitle = !string.IsNullOrEmpty(title); if ("{i}".Equals(tooltip.titleFormatter)) { title = string.Empty; formatTitle = false; } else if (string.IsNullOrEmpty(title)) { var angle = angleAxis.clockwise ? tooltip.runtimeAngle : 360 - tooltip.runtimeAngle; title = ChartCached.FloatToStr(angle); } foreach (var serie in series.list) { if (serie.show && IsSelectedSerie(tooltip, serie.index)) { if (formatTitle) { FormatterHelper.ReplaceContent(ref title, 0, tooltip.numericFormatter, serie, series, themeInfo, null, null); } var dataIndexList = tooltip.runtimeSerieIndex[serie.index]; for (int i = 0; i < dataIndexList.Count; i++) { var dataIndex = dataIndexList[i]; var serieData = serie.GetSerieData(dataIndex); var itemFormatter = GetItemFormatter(tooltip, serie, serieData); var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); float xValue, yValue; serie.GetXYData(dataIndex, null, out xValue, out yValue); if (string.IsNullOrEmpty(itemFormatter)) { sb.Append("<color=#").Append(themeInfo.GetColorStr(serie.index)).Append(">● </color>"); if (!string.IsNullOrEmpty(serie.name)) { sb.Append(serie.name).Append(": "); } sb.AppendFormat("{0}", ChartCached.FloatToStr(xValue, numericFormatter)); if (i != dataIndexList.Count - 1) { sb.Append(FormatterHelper.PH_NN); } } else { string content = itemFormatter; FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, series, themeInfo, null, null); var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring ? dataIndex : serie.index; sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(dotColorIndex))); sb.Append(content); } } sb.Append(FormatterHelper.PH_NN); } } if (string.IsNullOrEmpty(title)) { return(FormatterHelper.TrimAndReplaceLine(sb)); } else { title = FormatterHelper.TrimAndReplaceLine(title); return(title + FormatterHelper.PH_NN + FormatterHelper.TrimAndReplaceLine(sb)); } } else { string content = tooltip.formatter; FormatterHelper.ReplaceContent(ref content, 0, tooltip.numericFormatter, null, series, themeInfo, null, null); return(content); } }
public static void InitRadarTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, Radar radar, ThemeInfo themeInfo) { if (!serie.show) { return; } if (serie.radarIndex != radar.index) { return; } var dataIndex = tooltip.runtimeDataIndex[1]; var serieData = serie.GetSerieData(dataIndex); if (!serieData.show) { return; } var numericFormatter = GetItemNumericFormatter(tooltip, serie, serieData); switch (serie.radarType) { case RadarType.Multiple: if (radar.isAxisTooltip) { var dimension = tooltip.runtimeDataIndex[2]; if (!string.IsNullOrEmpty(serie.name)) { sb.Append(serie.name).Append("\n"); } var total = serie.GetDataTotal(dimension); var first = true; for (int i = 0; i < serie.dataCount; i++) { var sd = serie.GetSerieData(i); if (!sd.show) { continue; } var key = sd.name; var value = sd.GetData(dimension); var itemFormatter = GetItemFormatter(tooltip, serie, sd); numericFormatter = GetItemNumericFormatter(tooltip, serie, sd); if (!first) { sb.Append("\n"); } first = false; sb.Append("<color=#").Append(themeInfo.GetColorStr(i)).Append(">● </color>"); if (string.IsNullOrEmpty(itemFormatter)) { if (string.IsNullOrEmpty(key)) { key = radar.indicatorList[dataIndex].name; } if (string.IsNullOrEmpty(key)) { sb.AppendFormat("{0}\n", ChartCached.FloatToStr(value, numericFormatter)); } else { sb.AppendFormat("{0}: {1}\n", key, ChartCached.FloatToStr(value, numericFormatter)); } } else { string content = itemFormatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, value, total, serie.name, sd.name); sb.Append(content); } } } else { if (serie.index != tooltip.runtimeDataIndex[0]) { return; } sb.Append(serieData.name); for (int i = 0; i < radar.indicatorList.Count; i++) { string key = radar.indicatorList[i].name; float value = serieData.GetData(i); if ((i == 0 && !string.IsNullOrEmpty(serieData.name)) || i > 0) { sb.Append(FormatterHelper.PH_NN); } sb.AppendFormat("{0}: {1}", key, ChartCached.FloatToStr(value, numericFormatter)); } } break; case RadarType.Single: var key2 = serieData.name; var value2 = serieData.GetData(1); var total2 = serie.GetDataTotal(1); var itemFormatter2 = GetItemFormatter(tooltip, serie, serieData); if (string.IsNullOrEmpty(itemFormatter2)) { if (string.IsNullOrEmpty(key2)) { key2 = radar.indicatorList[dataIndex].name; } sb.AppendFormat("{0}: {1}", key2, ChartCached.FloatToStr(value2, numericFormatter)); } else { string content = itemFormatter2; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, value2, total2, serie.name, serieData.name); sb.Append(content); } break; } }
/// <summary> /// 替换字符串中的通配符,支持的通配符有{.}、{a}、{b}、{c}、{d}。 /// </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, Series series, ChartTheme theme, string category = null, 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 = series.GetSerie(targetIndex); if (serie == null) { continue; } } else if (serie != null) { targetIndex = serie.index; } else { serie = series.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(theme.GetColor(bIndex))); foundDot = true; } else if (p == 'a' || p == 'A') { if (argsCount == 1) { content = content.Replace(old, serie.name); } } else if (p == 'b' || p == 'B') { var bIndex = dataIndex; if (argsCount >= 2) { var args1Str = args[1].ToString(); if (s_RegexN.IsMatch(args1Str)) { bIndex = int.Parse(args1Str); } } var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar; if (needCategory) { content = content.Replace(old, category); } else { var serieData = serie.GetSerieData(bIndex, dataZoom); content = content.Replace(old, serieData.name); } } else if (p == 'c' || p == 'C' || p == 'd' || p == 'D') { var isPercent = p == 'd' || p == 'D'; 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); var percent = total == 0 ? 0 : value / serie.yTotal * 100; content = content.Replace(old, ChartCached.FloatToStr(percent, numericFormatter)); } else { content = content.Replace(old, ChartCached.FloatToStr(value, numericFormatter)); } } } content = s_RegexNewLine.Replace(content, PH_NN); return(foundDot); }
internal string GetFormatterContent(int dataIndex, Series series, string category, DataZoom dataZoom = null) { if (string.IsNullOrEmpty(m_Formatter)) { if (string.IsNullOrEmpty(m_ItemFormatter)) { return(""); } else { var sb = ChartHelper.sb; var title = m_TitleFormatter; var formatTitle = !string.IsNullOrEmpty(title); var needCategory = false; var first = true; sb.Length = 0; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); var serieData = serie.GetSerieData(dataIndex, dataZoom); var percent = serieData.GetData(1) / serie.yTotal * 100; needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar); if (serie.show) { string content = m_ItemFormatter; content = content.Replace("{a}", serie.name); content = content.Replace("{b}", needCategory ? category : serieData.name); content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation)); content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); if (!first) { sb.Append("\n"); } sb.Append(content); first = false; } if (formatTitle) { if (i == 0) { title = title.Replace("{a}", serie.name); title = title.Replace("{b}", needCategory ? category : serieData.name); title = title.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation)); title = title.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } title = title.Replace("{a" + i + "}", serie.name); title = title.Replace("{b" + i + "}", needCategory ? category : serieData.name); title = title.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation)); title = title.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1)); } } if (string.IsNullOrEmpty(title)) { if (needCategory) { return(category + "\n" + sb.ToString()); } else { return(sb.ToString()); } } else { title = title.Replace("\\n", "\n"); title = title.Replace("<br/>", "\n"); return(title + "\n" + sb.ToString()); } } } else { string content = m_Formatter; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (serie.show) { var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar; var serieData = serie.GetSerieData(dataIndex, dataZoom); var percent = serieData.GetData(1) / serie.yTotal * 100; if (i == 0) { content = content.Replace("{a}", serie.name); content = content.Replace("{b}", needCategory ? category : serieData.name); content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation)); content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } content = content.Replace("{a" + i + "}", serie.name); content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name); content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, m_ForceENotation)); content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1)); } } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
protected override void OnRefreshLabel() { var isYAxis = (m_YAxises[0].show && m_YAxises[0].type == Axis.AxisType.Category) || (m_YAxises[1].show && m_YAxises[1].type == Axis.AxisType.Category); for (int i = 0; i < m_Series.Count; i++) { var serie = m_Series.GetSerie(i); if (serie.type == SerieType.Bar && serie.show) { var zeroPos = Vector3.zero; if (serie.label.position == SerieLabel.Position.Bottom || serie.label.position == SerieLabel.Position.Center) { if (isYAxis) { var xAxis = m_XAxises[serie.axisIndex]; zeroPos = new Vector3(coordinateX + xAxis.zeroXOffset, coordinateY); } else { var yAxis = m_YAxises[serie.axisIndex]; zeroPos = new Vector3(coordinateX, coordinateY + yAxis.zeroYOffset); } } for (int j = 0; j < serie.data.Count; j++) { var serieData = serie.data[j]; if (serie.label.show) { var pos = serie.dataPoints[j]; switch (serie.label.position) { case SerieLabel.Position.Center: pos = isYAxis ? new Vector3(zeroPos.x + (pos.x - zeroPos.x) / 2, pos.y) : new Vector3(pos.x, zeroPos.y + (pos.y - zeroPos.y) / 2); break; case SerieLabel.Position.Bottom: pos = isYAxis ? new Vector3(zeroPos.x, pos.y) : new Vector3(pos.x, zeroPos.y); break; } var value = serieData.data[1]; serieData.SetLabelActive(true); serieData.SetLabelText(ChartCached.FloatToStr(value)); if (isYAxis) { if (value >= 0) { serieData.SetLabelPosition(new Vector3(pos.x + serie.label.distance, pos.y)); } else { serieData.SetLabelPosition(new Vector3(pos.x - serie.label.distance, pos.y)); } } else { if (value >= 0) { serieData.SetLabelPosition(new Vector3(pos.x, pos.y + serie.label.distance)); } else { serieData.SetLabelPosition(new Vector3(pos.x, pos.y - serie.label.distance)); } } } else { serieData.SetLabelActive(false); } } } } }
public static string GetFormatterContent(Tooltip tooltip, int dataIndex, Series series, ThemeInfo themeInfo, string category = null, DataZoom dataZoom = null, bool isCartesian = false) { if (string.IsNullOrEmpty(tooltip.formatter)) { var sb = ChartHelper.sb; var title = tooltip.titleFormatter; var formatTitle = !string.IsNullOrEmpty(title); var needCategory = false; var first = true; sb.Length = 0; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (!serie.show) { continue; } var serieData = serie.GetSerieData(dataIndex, dataZoom); if (serieData == null) { continue; } var itemFormatter = GetItemFormatter(tooltip, serie, serieData); var percent = serieData.GetData(1) / serie.yTotal * 100; needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar); if (serie.show) { if (string.IsNullOrEmpty(itemFormatter)) { if (!first) { sb.Append("\n"); } InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian); first = false; continue; } string content = itemFormatter; content = content.Replace("{a}", serie.name); content = content.Replace("{b}", needCategory ? category : serieData.name); content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); if (!first) { sb.Append("\n"); } sb.Append("<color=#").Append(themeInfo.GetColorStr(i)).Append(">● </color>"); sb.Append(content); first = false; } if (formatTitle) { if (i == 0) { title = title.Replace("{a}", serie.name); title = title.Replace("{b}", needCategory ? category : serieData.name); title = title.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); title = title.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } title = title.Replace("{a" + i + "}", serie.name); title = title.Replace("{b" + i + "}", needCategory ? category : serieData.name); title = title.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); title = title.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1)); } } if (string.IsNullOrEmpty(title)) { if (needCategory) { return(category + "\n" + sb.ToString()); } else { return(sb.ToString()); } } else { title = title.Replace("\\n", "\n"); title = title.Replace("<br/>", "\n"); return(title + "\n" + sb.ToString()); } } else { string content = tooltip.formatter; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (serie.show) { var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar; var serieData = serie.GetSerieData(dataIndex, dataZoom); var percent = serieData.GetData(1) / serie.yTotal * 100; if (i == 0) { content = content.Replace("{a}", serie.name); content = content.Replace("{b}", needCategory ? category : serieData.name); content = content.Replace("{c}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); content = content.Replace("{d}", ChartCached.FloatToStr(percent, 1)); } content = content.Replace("{a" + i + "}", serie.name); content = content.Replace("{b" + i + "}", needCategory ? category : serieData.name); content = content.Replace("{c" + i + "}", ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); content = content.Replace("{d" + i + "}", ChartCached.FloatToStr(percent, 1)); } } content = content.Replace("\\n", "\n"); content = content.Replace("<br/>", "\n"); return(content); } }
public static string GetFormatterContent(Tooltip tooltip, int dataIndex, Series series, ThemeInfo themeInfo, string category = null, DataZoom dataZoom = null, bool isCartesian = false) { if (string.IsNullOrEmpty(tooltip.formatter)) { var sb = ChartHelper.sb; var title = tooltip.titleFormatter; var formatTitle = !string.IsNullOrEmpty(title); var needCategory = false; var first = true; var isScatter = false; sb.Length = 0; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (serie.type == SerieType.Scatter || serie.type == SerieType.EffectScatter) { if (serie.show && IsSelectedSerie(tooltip, serie.index)) { isScatter = true; var itemFormatter = GetItemFormatter(tooltip, serie, null); if (string.IsNullOrEmpty(itemFormatter)) { if (!first) { sb.Append(PH_NN); } InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian); first = false; continue; } var itemTitle = title; if (!string.IsNullOrEmpty(itemTitle)) { Replace(ref itemTitle, PH_A, i, serie.name, true); sb.Append(itemTitle).Append(PH_NN); } var dataIndexList = tooltip.runtimeSerieDataIndex[serie.index]; foreach (var tempIndex in dataIndexList) { var foundDot = false; var serieData = serie.GetSerieData(tempIndex); string content = itemFormatter; Replace(ref content, PH_A, i, serie.name, true); Replace(ref content, PH_B, i, needCategory ? category : serieData.name, true); if (itemFormatter.IndexOf(PH_I) >= 0) { foundDot = true; Replace(ref content, PH_I, i, ChartCached.ColorToDotStr(themeInfo.GetColor(serie.index)), true); } for (int n = 0; n < serieData.data.Count; n++) { var valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation); Replace(ref content, GetPHCC(n), i, valueStr, true); } if (!foundDot) { sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(serie.index))); } sb.Append(content).Append(PH_NN); } } } else { var serieData = serie.GetSerieData(dataIndex, dataZoom); if (serieData == null) { continue; } var itemFormatter = GetItemFormatter(tooltip, serie, serieData); var percent = serieData.GetData(1) / serie.yTotal * 100; needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar); if (formatTitle) { var valueStr = ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation); Replace(ref title, PH_A, i, serie.name, true); Replace(ref title, PH_B, i, needCategory ? category : serieData.name, true); Replace(ref title, PH_C, i, valueStr, true); Replace(ref title, PH_D, i, ChartCached.FloatToStr(percent, 1), true); } if (serie.show) { if (string.IsNullOrEmpty(itemFormatter)) { if (!first) { sb.Append(PH_NN); } InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian); first = false; continue; } string content = itemFormatter; var valueStr = ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation); Replace(ref content, PH_A, i, serie.name, true); Replace(ref content, PH_B, i, needCategory ? category : serieData.name, true); Replace(ref content, PH_C, i, valueStr, true); Replace(ref content, PH_D, i, ChartCached.FloatToStr(percent, 1), true); for (int n = 0; n < serieData.data.Count; n++) { valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation); Replace(ref content, GetPHCC(n), i, valueStr, true); } if (!first) { sb.Append(PH_NN); } sb.Append(ChartCached.ColorToDotStr(themeInfo.GetColor(i))); sb.Append(content); first = false; } } } if (isScatter) { return(TrimAndReplaceLine(sb)); } else if (string.IsNullOrEmpty(title)) { if (needCategory) { return(category + PH_NN + TrimAndReplaceLine(sb)); } else { return(TrimAndReplaceLine(sb)); } } else { title = title.Replace(PH_ON, PH_NN); title = title.Replace(PH_BR, PH_NN); return(title + PH_NN + TrimAndReplaceLine(sb)); } } else { string content = tooltip.formatter; for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (serie.show) { var needCategory = serie.type == SerieType.Line || serie.type == SerieType.Bar; var serieData = serie.GetSerieData(dataIndex, dataZoom); var percent = serieData.GetData(1) / serie.yTotal * 100; Replace(ref content, PH_A, i, serie.name); Replace(ref content, PH_B, i, needCategory ? category : serieData.name); Replace(ref content, PH_C, i, ChartCached.FloatToStr(serieData.GetData(1), 0, tooltip.forceENotation)); Replace(ref content, PH_D, i, ChartCached.FloatToStr(percent, 1)); Replace(ref content, PH_I, i, ChartCached.ColorToDotStr(themeInfo.GetColor(i))); for (int n = 0; n < serieData.data.Count; n++) { var valueStr = ChartCached.FloatToStr(serieData.GetData(n), 0, tooltip.forceENotation); if (i == 0) { Replace(ref content, GetPHCC(n), i, valueStr, true); } Replace(ref content, GetPHCC(i, n), i, valueStr, true); } } } content = content.Replace(PH_ON, PH_NN); content = content.Replace(PH_BR, PH_NN); return(content); } }