diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md
index cf184ab4..a6301656 100644
--- a/Documentation~/zh/changelog.md
+++ b/Documentation~/zh/changelog.md
@@ -76,6 +76,7 @@ slug: /changelog
## master
+* (2024.09.24) 完善`Legend`的`formatter`对多Serie的支持 (#332)
* (2024.09.22) 调整`Documentation`文档显示样式
* (2024.09.09) 增加`numericFormatter`对`date`和`time`的支持
* (2024.09.03) 完善`AreaStyle`的`origin`参数设置区域填充起始位置
diff --git a/Runtime/Component/Legend/LegendHandler.cs b/Runtime/Component/Legend/LegendHandler.cs
index f42ec6e9..aa830414 100644
--- a/Runtime/Component/Legend/LegendHandler.cs
+++ b/Runtime/Component/Legend/LegendHandler.cs
@@ -87,11 +87,14 @@ namespace XCharts.Runtime
ChartHelper.HideAllObject(legendObject);
if (!legend.show) return;
var textLimitInitFlag = false;
+ var isAnySerieColorByData = SeriesHelper.IsAnyColorByDataSerie(chart.series);
for (int i = 0; i < datas.Count; i++)
{
if (!SeriesHelper.IsLegalLegendName(datas[i])) continue;
string legendName = datas[i];
- var legendContent = GetFormatterContent(legend, i, datas[i]);
+ var serieIndex = isAnySerieColorByData ? 0 : i;
+ var dataIndex = isAnySerieColorByData ? i : 0;
+ var legendContent = GetFormatterContent(legend, dataIndex, datas[i], serieIndex);
if (legend.textLimit.enable)
legendContent = legend.textLimit.GetLimitContent(legendContent);
var readIndex = chart.m_LegendRealShowName.IndexOf(datas[i]);
@@ -158,7 +161,7 @@ namespace XCharts.Runtime
legend.refreshComponent();
}
- private string GetFormatterContent(Legend legend, int dataIndex, string category)
+ private string GetFormatterContent(Legend legend, int dataIndex, string category, int serieIndex)
{
#pragma warning disable 0618
if (string.IsNullOrEmpty(legend.formatter) && string.IsNullOrEmpty(legend.labelStyle.formatter))
@@ -168,7 +171,7 @@ namespace XCharts.Runtime
var formatter = string.IsNullOrEmpty(legend.labelStyle.formatter) ? legend.formatter : legend.labelStyle.formatter;
var content = formatter.Replace("{name}", category);
content = content.Replace("{value}", category);
- var serie = chart.GetSerie(0);
+ var serie = chart.GetSerie(serieIndex);
FormatterHelper.ReplaceContent(ref content, dataIndex, legend.labelStyle.numericFormatter, serie, chart, category);
return content;
}
diff --git a/Runtime/Serie/SeriesHelper.cs b/Runtime/Serie/SeriesHelper.cs
index fc65b45b..ed6a0ab7 100644
--- a/Runtime/Serie/SeriesHelper.cs
+++ b/Runtime/Serie/SeriesHelper.cs
@@ -132,6 +132,21 @@ namespace XCharts.Runtime
return false;
}
+ ///
+ /// check if series has any serie which is color by data.
+ /// || 是否有任何一个系列是按数据颜色的。
+ ///
+ ///
+ ///
+ public static bool IsAnyColorByDataSerie(List series)
+ {
+ foreach (var serie in series)
+ {
+ if (serie.defaultColorBy == SerieColorBy.Data) return true;
+ }
+ return false;
+ }
+
///
/// 获得上一个同堆叠且显示的serie。
///