增加漏斗图基础代码支持

This commit is contained in:
monitor1394
2021-05-29 22:07:09 +08:00
parent 7c52279aba
commit 8ca1ac1dea
18 changed files with 351 additions and 68 deletions

View File

@@ -20,7 +20,7 @@ namespace XCharts
private static Regex s_RegexN = new Regex(@"^\d+", RegexOptions.IgnoreCase);
private static Regex s_RegexN_N = new Regex(@"\d+-\d+", RegexOptions.IgnoreCase);
private static Regex s_RegexFn = new Regex(@"[c-g|x|p|r]\d*|0\.#*", RegexOptions.IgnoreCase);
private static Regex s_RegexNewLine = new Regex(@"[\\|/]+n", RegexOptions.IgnoreCase);
private static Regex s_RegexNewLine = new Regex(@"[\\|/]+n|</br>|<br>|<br/>", RegexOptions.IgnoreCase);
private static Regex s_RegexForAxisLabel = new Regex(@"{value(:[c-g|x|p|r]\d*)?}", RegexOptions.IgnoreCase);
private static Regex s_RegexSubForAxisLabel = new Regex(@"(value)|([c-g|x|p|r]\d*)", RegexOptions.IgnoreCase);
private static Regex s_RegexForSerieLabel = new Regex(@"{[a-d|\.](:[c-g|x|p|r]\d*)?}", RegexOptions.IgnoreCase);

View File

@@ -18,18 +18,19 @@ namespace XCharts
else return theme.legend.unableColor;
}
public static Color GetIconColor(Legend legend, int readIndex, ChartTheme theme, Series series, string legendName, bool active)
public static Color GetIconColor(BaseChart chart, int readIndex, string legendName, bool active)
{
if (active)
{
var legend = chart.legend;
if (legend.itemAutoColor || legend.GetIcon(readIndex) == null)
{
return SeriesHelper.GetNameColor(series, readIndex, legendName, theme);
return SeriesHelper.GetNameColor(chart, readIndex, legendName);
}
else
return Color.white;
}
else return theme.legend.unableColor;
else return chart.theme.legend.unableColor;
}
public static LegendItem AddLegendItem(Legend legend, int i, string legendName, Transform parent,
@@ -279,9 +280,9 @@ namespace XCharts
return show;
}
public static bool IsSerieLegend(Series series, string legendName, SerieType type)
public static bool IsSerieLegend(BaseChart chart, string legendName, SerieType type)
{
foreach (var serie in series.list)
foreach (var serie in chart.series.list)
{
if (serie.type == type)
{
@@ -295,6 +296,19 @@ namespace XCharts
if (legendName.Equals(serieData.name)) return true;
}
break;
case SerieType.Custom:
if (chart.GetCustomSerieDataNameForColor())
{
foreach (var serieData in serie.data)
{
if (legendName.Equals(serieData.name)) return true;
}
}
else
{
if (legendName.Equals(serie.name)) return true;
}
break;
default:
if (legendName.Equals(serie.name)) return true;
break;

View File

@@ -540,5 +540,41 @@ namespace XCharts
serie.m_FilterData = emptyFilter;
}
}
public static void UpdateSerieRuntimeFilterData(Serie serie, bool filterInvisible = true)
{
serie.runtimeFilterData.Clear();
foreach (var serieData in serie.data)
{
if (!filterInvisible || (filterInvisible && serieData.show))
serie.runtimeFilterData.Add(serieData);
}
switch (serie.dataSortType)
{
case SerieDataSortType.Ascending:
serie.runtimeFilterData.Sort(delegate (SerieData data1, SerieData data2)
{
var value1 = data1.GetData(1);
var value2 = data2.GetData(1);
if (value1 == value2) return 0;
else if (value1 > value2) return 1;
else return -1;
});
break;
case SerieDataSortType.Descending:
serie.runtimeFilterData.Sort(delegate (SerieData data1, SerieData data2)
{
var value1 = data1.GetData(1);
var value2 = data2.GetData(1);
if (value1 == value2) return 0;
else if (value1 > value2) return -1;
else return 1;
});
break;
case SerieDataSortType.None:
break;
}
}
}
}

View File

@@ -89,45 +89,46 @@ namespace XCharts
/// 获得所有系列名,不包含空名字。
/// </summary>
/// <returns></returns>
public static void UpdateSerieNameList(Series series, ref List<string> serieNameList)
public static void UpdateSerieNameList(BaseChart chart, ref List<string> serieNameList)
{
serieNameList.Clear();
for (int n = 0; n < series.list.Count; n++)
for (int n = 0; n < chart.series.list.Count; n++)
{
var serie = series.GetSerie(n);
switch (serie.type)
var serie = chart.series.GetSerie(n);
if (serie.type == SerieType.Pie
|| serie.type == SerieType.Radar
|| serie.type == SerieType.Ring
|| (serie.type == SerieType.Custom && chart.GetCustomSerieDataNameForColor()))
{
case SerieType.Pie:
case SerieType.Radar:
case SerieType.Ring:
for (int i = 0; i < serie.data.Count; i++)
{
if (serie.type == SerieType.Pie && serie.IsIgnoreValue(serie.data[i])) continue;
if (string.IsNullOrEmpty(serie.data[i].name))
serieNameList.Add(ChartCached.IntToStr(i));
else if (!serieNameList.Contains(serie.data[i].name))
serieNameList.Add(serie.data[i].name);
}
break;
default:
if (string.IsNullOrEmpty(serie.name))
serieNameList.Add(ChartCached.IntToStr(n));
else if (!serieNameList.Contains(serie.name))
serieNameList.Add(serie.name);
break;
for (int i = 0; i < serie.data.Count; i++)
{
if (serie.type == SerieType.Pie && serie.IsIgnoreValue(serie.data[i])) continue;
if (string.IsNullOrEmpty(serie.data[i].name))
serieNameList.Add(ChartCached.IntToStr(i));
else if (!serieNameList.Contains(serie.data[i].name))
serieNameList.Add(serie.data[i].name);
}
}
else
{
if (string.IsNullOrEmpty(serie.name))
serieNameList.Add(ChartCached.IntToStr(n));
else if (!serieNameList.Contains(serie.name))
serieNameList.Add(serie.name);
}
}
}
public static Color GetNameColor(Series series, int index, string name, ChartTheme theme)
public static Color GetNameColor(BaseChart chart, int index, string name)
{
Serie destSerie = null;
SerieData destSerieData = null;
var series = chart.series;
for (int n = 0; n < series.list.Count; n++)
{
var serie = series.GetSerie(n);
if (serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring)
if (serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring
|| (serie.type == SerieType.Custom && chart.GetCustomSerieDataNameForColor()))
{
bool found = false;
for (int i = 0; i < serie.data.Count; i++)
@@ -152,7 +153,7 @@ namespace XCharts
}
}
}
return SerieHelper.GetItemColor(destSerie, destSerieData, theme, index, false);
return SerieHelper.GetItemColor(destSerie, destSerieData, chart.theme, index, false);
}
/// <summary>

View File

@@ -485,7 +485,7 @@ namespace XCharts
}
}
private static bool IsNeedTooltipSerie(Serie serie, Tooltip tooltip)
public static bool IsNeedTooltipSerie(Serie serie, Tooltip tooltip)
{
//if (serie.type == SerieType.Pie || serie.type == SerieType.Radar || serie.type == SerieType.Ring)
if (serie.type == SerieType.Pie || serie.type == SerieType.Ring)
@@ -505,7 +505,7 @@ namespace XCharts
}
}
private static bool IsSelectedSerie(Tooltip tooltip, int serieIndex)
public static bool IsSelectedSerie(Tooltip tooltip, int serieIndex)
{
if (tooltip.runtimeSerieIndex.ContainsKey(serieIndex))
{
@@ -514,14 +514,14 @@ namespace XCharts
return false;
}
private static string GetItemFormatter(Tooltip tooltip, Serie serie, SerieData serieData)
public static string GetItemFormatter(Tooltip tooltip, Serie serie, SerieData serieData)
{
var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
if (!string.IsNullOrEmpty(itemStyle.tooltipFormatter)) return itemStyle.tooltipFormatter;
else return tooltip.itemFormatter;
}
private static string GetItemNumericFormatter(Tooltip tooltip, Serie serie, SerieData serieData)
public static string GetItemNumericFormatter(Tooltip tooltip, Serie serie, SerieData serieData)
{
var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
if (!string.IsNullOrEmpty(itemStyle.numericFormatter)) return itemStyle.numericFormatter;