增加二维数据支持,XY轴都可以设置为数值轴

This commit is contained in:
monitor1394
2019-07-14 14:34:18 +08:00
parent e0ca33d7cb
commit 9ec5e80d22
15 changed files with 11930 additions and 13223 deletions

View File

@@ -1,43 +1,51 @@
using System.Collections.Generic;
using System.ComponentModel;
using UnityEngine;
using UnityEngine.Serialization;
namespace XCharts
{
public enum SerieType
{
Line,
Bar,
Pie,
Radar
}
[System.Serializable]
public class Serie : JsonDataSupport
{
public enum SerieType
{
Line,
Bar
}
[SerializeField][DefaultValue("true")] private bool m_Show;
[SerializeField] [DefaultValue("true")] private bool m_Show;
[SerializeField] private SerieType m_Type;
[SerializeField] private string m_Name;
[SerializeField] private string m_Stack;
[SerializeField] private int m_AxisIndex;
[SerializeField] private List<float> m_Data = new List<float>();
[SerializeField] private bool m_Flodout;
[SerializeField] private bool m_TwoDimensionData;
[FormerlySerializedAs("m_Data")]
[SerializeField] private List<float> m_YData = new List<float>();
[SerializeField] private List<float> m_XData = new List<float>();
public bool show { get { return m_Show; } set { m_Show = value; } }
public SerieType type { get { return m_Type; } set { m_Type = value; } }
public string name { get { return m_Name; } set { m_Name = value; } }
public string stack { get { return m_Stack; } set { m_Stack = value; } }
public int axisIndex { get { return m_AxisIndex; } set { m_AxisIndex = value; } }
public List<float> data { get { return m_Data; } set { m_Data = value; } }
public List<float> yData { get { return m_YData; } set { m_YData = value; } }
public List<float> xData { get { return m_XData; } set { m_XData = value; } }
public int filterStart { get; set; }
public int filterEnd { get; set; }
public List<float> filterData { get; set; }
public float Max
private List<float> yFilterData { get; set; }
private List<float> xFilterData { get; set; }
public float yMax
{
get
{
float max = int.MinValue;
foreach (var data in data)
foreach (var data in yData)
{
if (data > max)
{
@@ -48,12 +56,28 @@ namespace XCharts
}
}
public float Min
public float xMax
{
get
{
float max = int.MinValue;
foreach (var data in xData)
{
if (data > max)
{
max = data;
}
}
return max;
}
}
public float yMin
{
get
{
float min = int.MaxValue;
foreach (var data in data)
foreach (var data in yData)
{
if (data < min)
{
@@ -64,12 +88,41 @@ namespace XCharts
}
}
public float Total
public float xMin
{
get
{
float min = int.MaxValue;
foreach (var data in xData)
{
if (data < min)
{
min = data;
}
}
return min;
}
}
public float yTotal
{
get
{
float total = 0;
foreach (var data in data)
foreach (var data in yData)
{
total += data;
}
return total;
}
}
public float xTotal
{
get
{
float total = 0;
foreach (var data in xData)
{
total += data;
}
@@ -79,26 +132,30 @@ namespace XCharts
public void ClearData()
{
m_Data.Clear();
m_XData.Clear();
m_YData.Clear();
}
public void RemoveData(int index)
{
m_Data.RemoveAt(index);
m_XData.RemoveAt(index);
m_YData.RemoveAt(index);
}
public void AddData(float value, int maxDataNumber = 0)
public void AddYData(float value, int maxDataNumber = 0)
{
if (maxDataNumber > 0)
{
while (m_Data.Count > maxDataNumber) m_Data.RemoveAt(0);
while (m_XData.Count > maxDataNumber) m_XData.RemoveAt(0);
while (m_YData.Count > maxDataNumber) m_YData.RemoveAt(0);
}
m_Data.Add(value);
m_YData.Add(value);
m_XData.Add(m_XData.Count);
}
public float GetData(int index, DataZoom dataZoom = null)
public float GetYData(int index, DataZoom dataZoom = null)
{
var showData = GetData(dataZoom);
var showData = GetYData(dataZoom);
if (index >= 0 && index <= showData.Count - 1)
{
return showData[index];
@@ -106,22 +163,41 @@ namespace XCharts
return 0;
}
public List<float> GetData(DataZoom dataZoom)
public List<float> GetYData(DataZoom dataZoom)
{
if (dataZoom != null && dataZoom.show)
{
var startIndex = (int)((data.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((data.Count - 1) * dataZoom.end / 100);
var startIndex = (int)((yData.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((yData.Count - 1) * dataZoom.end / 100);
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1;
if (filterData == null || filterData.Count != count)
if (yFilterData == null || yFilterData.Count != count)
{
UpdateFilterData(dataZoom);
}
return filterData;
return yFilterData;
}
else
{
return m_Data;
return m_YData;
}
}
public List<float> GetXData(DataZoom dataZoom)
{
if (dataZoom != null && dataZoom.show)
{
var startIndex = (int)((xData.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((xData.Count - 1) * dataZoom.end / 100);
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1;
if (xFilterData == null || xFilterData.Count != count)
{
UpdateFilterData(dataZoom);
}
return xFilterData;
}
else
{
return m_XData;
}
}
@@ -129,41 +205,51 @@ namespace XCharts
{
if (dataZoom != null && dataZoom.show)
{
var startIndex = (int)((data.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((data.Count - 1) * dataZoom.end / 100);
var startIndex = (int)((yData.Count - 1) * dataZoom.start / 100);
var endIndex = (int)((yData.Count - 1) * dataZoom.end / 100);
if (startIndex != filterStart || endIndex != filterEnd)
{
filterStart = startIndex;
filterEnd = endIndex;
if (m_Data.Count > 0)
if (m_YData.Count > 0)
{
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1;
filterData = m_Data.GetRange(startIndex, count);
yFilterData = m_YData.GetRange(startIndex, count);
}
else
{
filterData = m_Data;
yFilterData = m_YData;
}
if (m_XData.Count > 0)
{
var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1;
xFilterData = m_XData.GetRange(startIndex, count);
}
else
{
xFilterData = m_XData;
}
}
else if (endIndex == 0)
{
filterData = new List<float>();
yFilterData = new List<float>();
xFilterData = new List<float>();
}
}
}
public void UpdateData(int index, float value)
public void UpdateYData(int index, float value)
{
if (index >= 0 && index <= m_Data.Count - 1)
if (index >= 0 && index <= m_YData.Count - 1)
{
m_Data[index] = value;
m_YData[index] = value;
}
}
public override void ParseJsonData(string jsonData)
{
if (string.IsNullOrEmpty(jsonData) || !m_DataFromJson) return;
m_Data = ChartHelper.ParseFloatFromString(jsonData);
m_YData = ChartHelper.ParseFloatFromString(jsonData);
}
}
}