diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md
index 545b770b..8b7a3567 100644
--- a/Documentation~/zh/changelog.md
+++ b/Documentation~/zh/changelog.md
@@ -70,6 +70,7 @@ slug: /changelog
## master
+* (2023.12.10) 增加`Serie`的`minShowLabel`可隐藏小于指定值的`label`
* (2023.12.09) 增加`LevelStyle`的`LineStyle`和`depth`支持
* (2023.12.09) 增加`Serie`的`Link`可用于桑基图添加节点边关系
* (2023.12.05) 增加`ResetChartStatus()`可主动重置图表状态
diff --git a/Editor/Series/BarEditor.cs b/Editor/Series/BarEditor.cs
index b2521820..f28b1bbd 100644
--- a/Editor/Series/BarEditor.cs
+++ b/Editor/Series/BarEditor.cs
@@ -48,6 +48,8 @@ namespace XCharts.Editor
PropertyField("m_Large");
PropertyField("m_LargeThreshold");
PropertyField("m_PlaceHolder");
+ PropertyField("m_MinShowLabel");
+ PropertyField("m_MinShowLabelValue");
});
PropertyField("m_ItemStyle");
PropertyField("m_Animation");
diff --git a/Editor/Series/PieEditor.cs b/Editor/Series/PieEditor.cs
index 22df5cc3..54fe463b 100644
--- a/Editor/Series/PieEditor.cs
+++ b/Editor/Series/PieEditor.cs
@@ -23,6 +23,8 @@ namespace XCharts.Editor
PropertyField("m_IgnoreValue");
PropertyField("m_ClickOffset");
PropertyField("m_RadiusGradient");
+ PropertyField("m_MinShowLabel");
+ PropertyField("m_MinShowLabelValue");
});
PropertyField("m_ItemStyle");
PropertyField("m_Animation");
diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs
index d39c9199..f3577e7a 100644
--- a/Runtime/Serie/Pie/PieHandler.cs
+++ b/Runtime/Serie/Pie/PieHandler.cs
@@ -238,7 +238,7 @@ namespace XCharts.Runtime
serieData.context.currentAngle = serie.animation.CheckDetailBreak(serieData.context.toAngle)
? serie.animation.GetCurrDetail() : serieData.context.toAngle;
serieData.context.insideRadius = serie.context.insideRadius;
- serieData.context.canShowLabel = serieData.context.currentAngle >= serieData.context.halfAngle;
+ serieData.context.canShowLabel = serieData.context.currentAngle >= serieData.context.halfAngle && !serie.IsMinShowLabelValue(value);
UpdateSerieDataRadius(serieData, value);
UpdatePieLabelPosition(serie, serieData);
startDegree = serieData.context.toAngle;
diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs
index a807c1c4..c851bac5 100644
--- a/Runtime/Serie/Serie.cs
+++ b/Runtime/Serie/Serie.cs
@@ -281,6 +281,8 @@ namespace XCharts.Runtime
[SerializeField] private float[] m_Center = new float[2] { 0.5f, 0.48f };
[SerializeField] private float[] m_Radius = new float[2] { 0, 0.28f };
[SerializeField][Since("v3.8.0")] private float m_MinRadius = 0f;
+ [SerializeField][Since("v3.10.0")] private bool m_MinShowLabel = false;
+ [SerializeField][Since("v3.10.0")] private double m_MinShowLabelValue = 0;
[SerializeField][Range(2, 10)] private int m_ShowDataDimension;
[SerializeField] private bool m_ShowDataName;
@@ -963,6 +965,24 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_PlaceHolder, value)) SetAllDirty(); }
}
///
+ /// Whether the label is not displayed when the enabled value is less than the specified value.
+ /// ||是否开启值小于指定值`minShowLabelValue`时不显示标签。
+ ///
+ public bool minShowLabel
+ {
+ get { return m_MinShowLabel; }
+ set { if (PropertyUtil.SetStruct(ref m_MinShowLabel, value)) SetVerticesDirty(); }
+ }
+ ///
+ /// When 'minShowLabel' is enabled, labels are not displayed if the value is less than this value.
+ /// ||当开启`minShowLabel`时,值小于该值时不显示标签。
+ ///
+ public double minShowLabelValue
+ {
+ get { return m_MinShowLabelValue; }
+ set { if (PropertyUtil.SetStruct(ref m_MinShowLabelValue, value)) { SetVerticesDirty(); } }
+ }
+ ///
/// 系列中的数据内容数组。SerieData可以设置1到n维数据。
///
public List data { get { return m_Data; } }
@@ -1896,6 +1916,24 @@ namespace XCharts.Runtime
return false;
}
+ public bool IsMinShowLabelValue(int index, int dimension = 1)
+ {
+ var serieData = GetSerieData(index);
+ if (serieData != null)
+ return IsMinShowLabelValue(serieData, dimension);
+ return false;
+ }
+
+ public bool IsMinShowLabelValue(SerieData serieData, int dimension = 1)
+ {
+ return IsMinShowLabelValue(serieData.GetData(dimension));
+ }
+
+ public bool IsMinShowLabelValue(double value)
+ {
+ return m_MinShowLabel && value <= m_MinShowLabelValue;
+ }
+
public bool IsSerie() where T : Serie
{
return this is T;
diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs
index 8f91d196..59c42154 100644
--- a/Runtime/Serie/SerieHandler.cs
+++ b/Runtime/Serie/SerieHandler.cs
@@ -505,7 +505,7 @@ namespace XCharts.Runtime
SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
currLabel, color);
var offset = GetSerieDataLabelOffset(serieData, currLabel);
- labelObject.SetActive(currLabel.show && !isIgnore);
+ labelObject.SetActive(currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value));
labelObject.SetText(content);
labelObject.SetPosition(serieData.context.dataPoints[i] + offset);
labelObject.UpdateIcon(currLabel.icon);
@@ -526,7 +526,7 @@ namespace XCharts.Runtime
ChartCached.NumberToStr(value, currLabel.numericFormatter) :
SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
currLabel, color);
- serieData.SetLabelActive(currLabel.show && !isIgnore);
+ serieData.SetLabelActive(currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value));
serieData.labelObject.UpdateIcon(currLabel.icon);
serieData.labelObject.SetText(content);
UpdateLabelPosition(serieData, currLabel);