protected void AddSerieLabel(Serie serie, SerieData serieData, int count = -1) { if (m_SerieLabelRoot == null) { return; } if (count == -1) { count = serie.dataCount; } var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData); if (serie.IsPerformanceMode()) { return; } if (!serieLabel.show && !iconStyle.show) { return; } if (serie.animation.enable && serie.animation.HasFadeOut()) { return; } var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index); var color = Color.grey; if (serie.type == SerieType.Pie) { color = (serieLabel.position == SerieLabel.Position.Inside) ? Color.white : (Color)m_Theme.GetColor(count); } else { color = !ChartHelper.IsClearColor(serieLabel.textStyle.color) ? serieLabel.textStyle.color : (Color)m_Theme.GetColor(serie.index); } var labelObj = SerieLabelPool.Get(textName, m_SerieLabelRoot.transform, serieLabel, color, iconStyle.width, iconStyle.height, theme); var iconImage = labelObj.transform.Find("Icon").GetComponent <Image>(); var isAutoSize = serieLabel.backgroundWidth == 0 || serieLabel.backgroundHeight == 0; var item = new ChartLabel(); item.SetLabel(labelObj, isAutoSize, serieLabel.paddingLeftRight, serieLabel.paddingTopBottom); item.SetIcon(iconImage); item.SetIconActive(iconStyle.show); serieData.labelObject = item; }
internal static Color32 GetItemColor(Serie serie, SerieData serieData, ChartTheme theme, int index, bool highlight) { if (serie == null) { return(ChartConst.clearColor32); } if (highlight) { var itemStyleEmphasis = GetItemStyleEmphasis(serie, serieData); if (itemStyleEmphasis != null && !ChartHelper.IsClearColor(itemStyleEmphasis.color)) { var color = itemStyleEmphasis.color; ChartHelper.SetColorOpacity(ref color, itemStyleEmphasis.opacity); return(color); } } var itemStyle = GetItemStyle(serie, serieData); if (!ChartHelper.IsClearColor(itemStyle.color)) { return(itemStyle.GetColor()); } else { var color = theme.GetColor(index); if (highlight) { color = ChartHelper.GetHighlightColor(color); } ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return(color); } }
internal static Color32 GetLineColor(Serie serie, ChartTheme theme, int index, bool highlight) { Color32 color = ChartConst.clearColor32; if (highlight) { var itemStyleEmphasis = GetItemStyleEmphasis(serie, null); if (itemStyleEmphasis != null && !ChartHelper.IsClearColor(itemStyleEmphasis.color)) { color = itemStyleEmphasis.color; ChartHelper.SetColorOpacity(ref color, itemStyleEmphasis.opacity); return(color); } } if (!ChartHelper.IsClearColor(serie.lineStyle.color)) { color = serie.lineStyle.GetColor(); } else if (!ChartHelper.IsClearColor(serie.itemStyle.color)) { color = serie.itemStyle.GetColor(); } if (ChartHelper.IsClearColor(color)) { color = theme.GetColor(index); ChartHelper.SetColorOpacity(ref color, serie.lineStyle.opacity); } if (highlight) { color = ChartHelper.GetHighlightColor(color); } return(color); }
public static void ResetLabel(ChartText labelObject, SerieLabel label, ChartTheme theme, int colorIndex) { if (labelObject == null) { return; } labelObject.SetColor(!ChartHelper.IsClearColor(label.textStyle.color) ? label.textStyle.color : (Color)theme.GetColor(colorIndex)); labelObject.SetFontSize(label.textStyle.GetFontSize(theme.common)); labelObject.SetFontStyle(label.textStyle.fontStyle); }
public static Color GetLabelColor(Serie serie, ChartTheme theme, int index) { if (!ChartHelper.IsClearColor(serie.label.textStyle.color)) { return(serie.label.textStyle.color); } else { return(theme.GetColor(index)); } }
public static Color GetContentColor(int legendIndex, Legend legend, ChartTheme theme, bool active) { var textStyle = legend.textStyle; if (active) { if (legend.textAutoColor) { return(theme.GetColor(legendIndex)); } else { return(!ChartHelper.IsClearColor(textStyle.color) ? textStyle.color : theme.legend.textColor); } } else { return(theme.legend.unableColor); } }
internal Color32 GetPointerColor(ChartTheme theme, int serieIndex, float angle, ItemStyle itemStyle) { Color32 color; if (!ChartHelper.IsClearColor(itemStyle.color)) { return(itemStyle.GetColor()); } for (int i = 0; i < runtimeStageAngle.Count; i++) { if (angle < runtimeStageAngle[i]) { color = axisLine.stageColor[i].color; ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return(color); } } color = theme.GetColor(serieIndex); ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return(color); }
public RadarAxisTheme(Theme theme) : base(theme) { m_SplitAreaColors.Clear(); switch (theme) { case Theme.Dark: m_SplitAreaColors.Add(ChartTheme.GetColor("#6f6f6f")); m_SplitAreaColors.Add(ChartTheme.GetColor("#606060")); break; case Theme.Default: m_SplitAreaColors.Add(ChartTheme.GetColor("#f6f6f6")); m_SplitAreaColors.Add(ChartTheme.GetColor("#e7e7e7")); break; case Theme.Light: m_SplitAreaColors.Add(ChartTheme.GetColor("#f6f6f6")); m_SplitAreaColors.Add(ChartTheme.GetColor("#e7e7e7")); break; } }
internal static Color32 GetItemBackgroundColor(Serie serie, SerieData serieData, ChartTheme theme, int index, bool highlight, bool useDefault = true) { var color = ChartConst.clearColor32; if (highlight) { var itemStyleEmphasis = GetItemStyleEmphasis(serie, serieData); if (itemStyleEmphasis != null && !ChartHelper.IsClearColor(itemStyleEmphasis.backgroundColor)) { color = itemStyleEmphasis.backgroundColor; ChartHelper.SetColorOpacity(ref color, itemStyleEmphasis.opacity); return(color); } } var itemStyle = GetItemStyle(serie, serieData); if (!ChartHelper.IsClearColor(itemStyle.backgroundColor)) { color = itemStyle.backgroundColor; if (highlight) { color = ChartHelper.GetHighlightColor(color); } ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return(color); } else if (useDefault) { color = theme.GetColor(index); if (highlight) { color = ChartHelper.GetHighlightColor(color); } color.a = 50; return(color); } return(color); }
/// <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 static Color32 GetAreaColor(Serie serie, ChartTheme theme, int index, bool highlight) { var areaStyle = serie.areaStyle; var color = !ChartHelper.IsClearColor(areaStyle.color) ? areaStyle.color : theme.GetColor(index); if (highlight) { if (!ChartHelper.IsClearColor(areaStyle.highlightColor)) { color = areaStyle.highlightColor; } else { color = ChartHelper.GetHighlightColor(color); } } ChartHelper.SetColorOpacity(ref color, areaStyle.opacity); return(color); }
public static void InitRadarTooltip(ref StringBuilder sb, Tooltip tooltip, Serie serie, Radar radar, ChartTheme theme) { if (radar == null) { return; } if (!serie.show) { return; } if (tooltip.runtimeGridIndex >= 0) { 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(theme.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, theme.GetColor(i)); sb.Append(content); } } } else { if (serie.index != tooltip.runtimeDataIndex[0]) { return; } sb.Append(serieData.name); for (int i = 0; i < radar.indicatorList.Count; i++) { var key = radar.indicatorList[i].name; var 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, theme.GetColor(serie.index)); sb.Append(content); } break; } }
protected override void Reset() { base.Reset(); title.text = "HeatmapChart"; tooltip.type = Tooltip.Type.None; grid.left = 100; grid.right = 60; grid.bottom = 60; m_XAxes[0].type = Axis.AxisType.Category; m_XAxes[0].boundaryGap = true; m_YAxes[0].type = Axis.AxisType.Category; m_YAxes[0].boundaryGap = true; m_XAxes[0].splitNumber = 10; m_YAxes[0].splitNumber = 10; RemoveData(); var heatmapGridWid = 10f; int xSplitNumber = (int)(grid.runtimeWidth / heatmapGridWid); int ySplitNumber = (int)(grid.runtimeHeight / heatmapGridWid); SerieTemplate.AddDefaultHeatmapSerie(this, "serie1"); visualMap.enable = true; visualMap.max = 10; visualMap.range[0] = 0f; visualMap.range[1] = 10f; visualMap.orient = Orient.Vertical; visualMap.calculable = true; visualMap.location.align = Location.Align.BottomLeft; visualMap.location.bottom = 100; visualMap.location.left = 30; var colors = new List <string> { "#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026" }; visualMap.inRange.Clear(); foreach (var str in colors) { visualMap.inRange.Add(ChartTheme.GetColor(str)); } for (int i = 0; i < xSplitNumber; i++) { m_XAxes[0].data.Add((i + 1).ToString()); } for (int i = 0; i < ySplitNumber; i++) { m_YAxes[0].data.Add((i + 1).ToString()); } for (int i = 0; i < xSplitNumber; i++) { for (int j = 0; j < ySplitNumber; j++) { var value = 0f; var rate = Random.Range(0, 101); if (rate > 70) { value = Random.Range(8f, 10f); } else { value = Random.Range(1f, 8f); } var list = new List <float> { i, j, value }; AddData(0, list); } } }
internal Color32 GetAxisLineColor(ChartTheme theme, int index) { var color = !ChartHelper.IsClearColor(axisLine.barColor) ? axisLine.barColor : theme.GetColor(index); ChartHelper.SetColorOpacity(ref color, axisLine.lineStyle.opacity); return(color); }
public static string GetFormatterContent(Tooltip tooltip, int dataIndex, Series series, ChartTheme theme, string category = null, DataZoom dataZoom = null, bool isCartesian = false, Radar radar = null) { if (string.IsNullOrEmpty(tooltip.formatter)) { var sb = ChartHelper.sb; var title = tooltip.titleFormatter; var formatTitle = !string.IsNullOrEmpty(title); var titleIsIgnroe = false; var needCategory = false; var first = true; var isScatter = false; sb.Length = 0; if ("{i}".Equals(tooltip.titleFormatter)) { title = string.Empty; formatTitle = false; titleIsIgnroe = true; } for (int i = 0; i < series.Count; i++) { var serie = series.GetSerie(i); if (tooltip.runtimeGridIndex >= 0 && serie.runtimeGridIndex != tooltip.runtimeGridIndex) { continue; } 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(FormatterHelper.PH_NN); } InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, theme, dataZoom, isCartesian, radar); first = false; continue; } var itemTitle = title; if (!string.IsNullOrEmpty(itemTitle)) { FormatterHelper.ReplaceContent(ref itemTitle, dataIndex, tooltip.numericFormatter, serie, series, theme, category, dataZoom); sb.Append(itemTitle).Append(FormatterHelper.PH_NN); } var dataIndexList = tooltip.runtimeSerieIndex[serie.index]; foreach (var tempIndex in dataIndexList) { string content = itemFormatter; var foundDot = FormatterHelper.ReplaceContent(ref content, tempIndex, tooltip.numericFormatter, serie, series, theme, category, dataZoom); if (!foundDot) { sb.Append(ChartCached.ColorToDotStr(theme.GetColor(serie.index))); } sb.Append(content).Append(FormatterHelper.PH_NN); } } } else if (IsNeedTooltipSerie(serie, tooltip)) { var itemFormatter = string.Empty; if (serie.type == SerieType.Gauge) { var serieData = serie.GetSerieData(0, dataZoom); if (serieData == null) { continue; } itemFormatter = GetItemFormatter(tooltip, serie, serieData); } else { var serieData = serie.GetSerieData(dataIndex, dataZoom); if (serieData == null) { continue; } itemFormatter = GetItemFormatter(tooltip, serie, serieData); } needCategory = needCategory || (serie.type == SerieType.Line || serie.type == SerieType.Bar); if (formatTitle) { FormatterHelper.ReplaceContent(ref title, dataIndex, tooltip.numericFormatter, serie, series, theme, category, dataZoom); } if (serie.show) { if (string.IsNullOrEmpty(itemFormatter) || serie.type == SerieType.Radar) { if (!first) { sb.Append(FormatterHelper.PH_NN); } InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, theme, dataZoom, isCartesian, radar); first = false; continue; } string content = itemFormatter; FormatterHelper.ReplaceContent(ref content, dataIndex, tooltip.numericFormatter, serie, series, theme, category, dataZoom); if (!first) { sb.Append(FormatterHelper.PH_NN); } var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring ? dataIndex : i; sb.Append(ChartCached.ColorToDotStr(theme.GetColor(dotColorIndex))); sb.Append(content); first = false; } } } if (isScatter) { return(FormatterHelper.TrimAndReplaceLine(sb)); } else if (string.IsNullOrEmpty(title)) { if (needCategory && !titleIsIgnroe) { return(category + FormatterHelper.PH_NN + FormatterHelper.TrimAndReplaceLine(sb)); } else { 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, dataIndex, tooltip.numericFormatter, null, series, theme, category, dataZoom); return(content); } }
public static string GetPolarFormatterContent(Tooltip tooltip, Series series, ChartTheme theme, 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, theme, 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(theme.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, theme, null, null); var dotColorIndex = serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring ? dataIndex : serie.index; sb.Append(ChartCached.ColorToDotStr(theme.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, theme, null, null); return(content); } }