diff --git a/CHANGELOG.md b/CHANGELOG.md index ac3a2181..8b460da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 更新日志 +* (2020.03.21) 增加`BarChart`和`HeatmapChart`可通过`ignore`参数设置忽略数据的支持 * (2020.03.21) 增加`ItemStyle`的`tooltipFormatter`参数可单独配置`Serie`的`Tooltip`显示 * (2020.03.20) 修复`X Axis 1`和`Y Axis 1`配置变更时不会自动刷新的问题 * (2020.03.20) 增加`AxisTick`的`width`参数可单独设置坐标轴刻度的宽度 diff --git a/Editor/PropertyDrawers/SerieDrawer.cs b/Editor/PropertyDrawers/SerieDrawer.cs index 2b3168ed..b0c4184a 100644 --- a/Editor/PropertyDrawers/SerieDrawer.cs +++ b/Editor/PropertyDrawers/SerieDrawer.cs @@ -172,6 +172,10 @@ namespace XCharts drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_Clip); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + EditorGUI.PropertyField(drawRect, m_Ignore); + drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + EditorGUI.PropertyField(drawRect, m_IgnoreValue); + drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_ItemStyle); drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); EditorGUI.PropertyField(drawRect, m_Label); @@ -245,6 +249,10 @@ namespace XCharts drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); break; case SerieType.Heatmap: + EditorGUI.PropertyField(drawRect, m_Ignore); + drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + EditorGUI.PropertyField(drawRect, m_IgnoreValue); + drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; EditorGUI.PropertyField(drawRect, m_ItemStyle); drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); EditorGUI.PropertyField(drawRect, m_Label); @@ -474,7 +482,7 @@ namespace XCharts height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); break; case SerieType.Bar: - height += 16 * EditorGUIUtility.singleLineHeight + 15 * EditorGUIUtility.standardVerticalSpacing; + height += 18 * EditorGUIUtility.singleLineHeight + 17 * EditorGUIUtility.standardVerticalSpacing; height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); @@ -514,7 +522,7 @@ namespace XCharts height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); break; case SerieType.Heatmap: - height += 4 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing; + height += 6 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing; height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); diff --git a/Runtime/Component/Main/Serie.cs b/Runtime/Component/Main/Serie.cs index ac13960b..3b91c5da 100644 --- a/Runtime/Component/Main/Serie.cs +++ b/Runtime/Component/Main/Serie.cs @@ -1516,12 +1516,25 @@ namespace XCharts return false; } - public bool IsIngoreValue(float value) + public bool IsIgnoreIndex(int index, int dimension) + { + if (m_Ignore) + { + var serieData = GetSerieData(index); + if (serieData != null) + { + return IsIgnoreValue(serieData.GetData(dimension)); + } + } + return false; + } + + public bool IsIgnoreValue(float value) { return m_Ignore && Mathf.Approximately(value, m_IgnoreValue); } - public bool IsIngorePoint(int index) + public bool IsIgnorePoint(int index) { if (index >= 0 && index < dataPoints.Count) { diff --git a/Runtime/Helper/TooltipHelper.cs b/Runtime/Helper/TooltipHelper.cs index ca3ae720..c7a73614 100644 --- a/Runtime/Helper/TooltipHelper.cs +++ b/Runtime/Helper/TooltipHelper.cs @@ -82,7 +82,7 @@ namespace XCharts string key = serie.name; float xValue, yValue; serie.GetXYData(index, dataZoom, out xValue, out yValue); - var isIngore = serie.IsIngorePoint(index); + var isIngore = serie.IsIgnorePoint(index); if (isCartesian) { var serieData = serie.GetSerieData(index, dataZoom); @@ -97,10 +97,9 @@ namespace XCharts { var valueTxt = isIngore ? tooltip.ignoreDataDefaultContent : ChartCached.FloatToStr(yValue, 0, tooltip.forceENotation); - sb.Append("\n") - .Append("● ") - .Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : "") - .Append(valueTxt); + sb.Append("● ") + .Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : "") + .Append(valueTxt); } } @@ -147,15 +146,17 @@ namespace XCharts if (!serie.show) continue; var serieData = serie.GetSerieData(dataIndex, dataZoom); var itemFormatter = GetItemFormatter(tooltip, serie, serieData); - if (string.IsNullOrEmpty(itemFormatter)) - { - InitDefaultContent(ref sb, tooltip, serie, dataIndex, category, themeInfo, dataZoom, isCartesian); - continue; - } 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); diff --git a/Runtime/Internal/CoordinateChart.cs b/Runtime/Internal/CoordinateChart.cs index 1a8f3987..b6069ce7 100644 --- a/Runtime/Internal/CoordinateChart.cs +++ b/Runtime/Internal/CoordinateChart.cs @@ -1461,12 +1461,14 @@ namespace XCharts var serieData = serie.data[j]; var pos = serie.dataPoints[j]; var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); + var dimension = 1; + var isIgnore = serie.IsIgnoreIndex(j, 1); serieData.SetGameObjectPosition(serieData.labelPosition); serieData.UpdateIcon(); - if (serie.show && serieLabel.show && serieData.canShowLabel) + if (serie.show && serieLabel.show && serieData.canShowLabel && !isIgnore) { float value = 0f; - var dimension = 1; + if (serie.type == SerieType.Heatmap) { dimension = m_VisualMap.enable && m_VisualMap.dimension > 0 ? m_VisualMap.dimension - 1 : diff --git a/Runtime/Internal/CoordinateChart_DrawBar.cs b/Runtime/Internal/CoordinateChart_DrawBar.cs index c20ed042..6e001358 100644 --- a/Runtime/Internal/CoordinateChart_DrawBar.cs +++ b/Runtime/Internal/CoordinateChart_DrawBar.cs @@ -56,6 +56,11 @@ namespace XCharts seriesHig.Add(0); } var serieData = showData[i]; + if (serie.IsIgnoreValue(serieData.GetData(1))) + { + serie.dataPoints.Add(Vector3.zero); + continue; + } var highlight = (m_Tooltip.show && m_Tooltip.IsSelected(i)) || serie.data[i].highlighted || serie.highlighted; @@ -185,6 +190,11 @@ namespace XCharts seriesHig.Add(0); } var serieData = showData[i]; + if (serie.IsIgnoreValue(serieData.GetData(1))) + { + serie.dataPoints.Add(Vector3.zero); + continue; + } var highlight = (m_Tooltip.show && m_Tooltip.IsSelected(i)) || serie.data[i].highlighted || serie.highlighted; diff --git a/Runtime/Internal/CoordinateChart_DrawHeatmap.cs b/Runtime/Internal/CoordinateChart_DrawHeatmap.cs index c6898059..d4501700 100644 --- a/Runtime/Internal/CoordinateChart_DrawHeatmap.cs +++ b/Runtime/Internal/CoordinateChart_DrawHeatmap.cs @@ -147,6 +147,11 @@ namespace XCharts var serieData = dataList[dataIndex]; var dimension = m_VisualMap.enable && m_VisualMap.dimension > 0 ? m_VisualMap.dimension - 1 : serieData.data.Count - 1; + if (serie.IsIgnoreIndex(dataIndex, dimension)) + { + serie.dataPoints.Add(Vector3.zero); + continue; + } var value = serieData.GetCurrData(dimension, dataChangeDuration); if (serieData.IsDataChanged()) dataChanging = true; var pos = new Vector3(zeroX + (i + 0.5f) * xWidth, zeroY + (j + 0.5f) * yWidth); diff --git a/Runtime/Internal/CoordinateChart_DrawLine.cs b/Runtime/Internal/CoordinateChart_DrawLine.cs index 9e7be274..5386a715 100644 --- a/Runtime/Internal/CoordinateChart_DrawLine.cs +++ b/Runtime/Internal/CoordinateChart_DrawLine.cs @@ -127,7 +127,7 @@ namespace XCharts { for (int j = 0; j < rate; j++) seriesHig.Add(0); } - if (serie.IsIngoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i].GetData(1))) { serie.dataPoints.Add(Vector3.zero); } @@ -148,7 +148,7 @@ namespace XCharts { i = maxCount - 1; seriesHig.Add(0); - if (serie.IsIngoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i].GetData(1))) { serie.dataPoints.Add(Vector3.zero); } @@ -181,7 +181,7 @@ namespace XCharts if (serie.minShow > 0 && serie.minShow < showData.Count) { i = serie.minShow - 1; - if (serie.IsIngoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i].GetData(1))) { serie.dataPoints.Add(Vector3.zero); } @@ -198,7 +198,7 @@ namespace XCharts if (serie.maxShow > 0 && serie.maxShow < showData.Count) { i = serie.maxShow; - if (serie.IsIngoreValue(showData[i].GetData(1))) + if (serie.IsIgnoreValue(showData[i].GetData(1))) { serie.dataPoints.Add(Vector3.zero); }