mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-22 17:00:08 +00:00
增加漏斗图基础代码支持
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user