Пример #1
0
        /// <summary>
        /// バーチャートに要素を追加します
        /// </summary>
        /// <param name="frame">Frame.</param>
        /// <param name="barData">Bar data.</param>
        public void AddBarElement(Vector2 xRangeRate, float yValueRate, LabelData.Label label)
        {
            var barElement = new GameObject("bar");

            barElement.transform.parent = frame;
            var image = barElement.AddComponent <Image>();

            image.color = label.GetColor();
            //RectTransform初期化
            image.rectTransform.anchorMax     = new Vector2(1f, 1f);
            image.rectTransform.anchorMin     = new Vector2(0, 0);
            image.rectTransform.offsetMin     = new Vector2(0, 0);
            image.rectTransform.offsetMax     = new Vector2(0, 0);
            image.rectTransform.localScale    = Vector3.one;
            image.rectTransform.localPosition = Vector3.zero;
            //指定の位置・大きさに設定
            //RectTransformのアンカーがストレッチで設定しているため、位置・大きさの指定を以下のようにする
            float left   = xRangeRate.x * frame.rect.width;             //親となるフレームの左端からどれだけ離れた位置か
            float right  = (1f - xRangeRate.y) * frame.rect.width;      //・・・右端から
            float top    = (1f - yValueRate) * frame.rect.height;       //・・・上から
            float bottom = 0;                                           //・・・下から

            image.rectTransform.offsetMin = new Vector2(left, bottom);
            image.rectTransform.offsetMax = new Vector2(-1f * right, -1f * top);        //-1をかけるのは仕様なので仕方ない
            if (label.IsUseTexture)
            {
                image.sprite = label.Texture;
                image.type   = Image.Type.Tiled;
            }
            barElementList.Add(image);
        }
Пример #2
0
        //取得した、いびきの大きさのデータをグラフに表示しやすいようにラベルデータへ変換する
        List <LabelData> TransSensingDataToLabelData(List <IbikiGraph.Data> dataList)
        {
            List <LabelData> labelDataList = new List <LabelData>();

            foreach (IbikiGraph.Data data in dataList)
            {
                LabelData.Label label = TransIbikiLoudnessToLabel(data.SnoreVolume2);   //ラベルの名前と色を設定する
                labelDataList.Add(new LabelData(data.SnoreVolume2, label));
            }
            return(labelDataList);
        }
Пример #3
0
        /// <summary>
        /// グラフにデータを設定します。
        /// 全てのデータを設定してください。
        /// </summary>
        /// <param name="wholeValue">Whole value.</param>
        /// <param name="contents">Contents.</param>
        public void SetPercentageData(float wholeValue, List <LabelData> contents)
        {
            ClearBarElements();
            float currentSum = 0;

            for (int i = 0; i < contents.Count; i++)
            {
                Vector2 xRangeRate = new Vector2(currentSum, currentSum + contents [i].GetValue()) / wholeValue; //始点~終点
                currentSum += contents [i].GetValue();
                float           yValueRate = 1f;                                                                 //固定で1
                LabelData.Label label      = contents [i].GetLabel();
                AddBarElement(xRangeRate, yValueRate, label);
            }
        }
Пример #4
0
        //呼吸のデータを集計用グラフに出力
        void SetBreathDataToPercentageBarChart(List <Data> breathDataList)
        {
            //頭の向きで最も要素数が大きいものを探す(異常データは含まない)
            int maxHeadDirCount = 0;

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                int count = 0;

                // 0~10秒
                count += breathDataList
                         .Where(data => data.HeadDir1 == headDir)
                         .Where(data => data.GetBreathState1() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();

                // 11~20秒
                count += breathDataList
                         .Where(data => data.HeadDir2 == headDir)
                         .Where(data => data.GetBreathState2() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();

                // 21~13秒
                count += breathDataList
                         .Where(data => data.HeadDir3 == headDir)
                         .Where(data => data.GetBreathState3() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();
                maxHeadDirCount = count > maxHeadDirCount ? count : maxHeadDirCount;
            }

            //呼吸状態をグラフに表示する順番に並べ替え
            SleepData.BreathState[] sortedBreathState =
            {
                SleepData.BreathState.Normal,
                SleepData.BreathState.Snore,
                SleepData.BreathState.Apnea
            };
            int addCount = 0;   //グラフの右端に余裕を持たせるために追加する値

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                //体の向きそれぞれに対して処理を行う
                List <LabelData> labelDataList = new List <LabelData>();

                foreach (SleepData.BreathState breathState in sortedBreathState)
                {
                    //呼吸状態それぞれに対して処理を行う
                    //体の向きが合致して、なおかつ呼吸状態も合致するデータの個数を求める
                    int value = 0;
                    // 0~10秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir1.Equals(headDir) &&
                        data.GetBreathState1().Equals(breathState)
                        ).Count();

                    // 11~20秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir2.Equals(headDir) &&
                        data.GetBreathState2().Equals(breathState)
                        ).Count();

                    // 21~30秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir3.Equals(headDir) &&
                        data.GetBreathState3().Equals(breathState)
                        ).Count();

                    if (value == 0)
                    {
                        continue;
                    }
                    LabelData.Label label = this.breathLabelList
                                            .Where(
                        l => l.GetBreathState().Equals(breathState))
                                            .First().GetLabel();
                    labelDataList.Add(new LabelData(value, label));
                }
                PercetageBarChart output = null;
                //呼吸データを体の向きごとに集計したものをグラフに出力する
                switch (headDir)
                {
                case SleepData.HeadDir.Left:
                    output = Output_Percentage_Left;
                    break;

                case SleepData.HeadDir.Up:
                    output = Output_Percentage_Up;
                    break;

                case SleepData.HeadDir.Right:
                    output = Output_Percentage_Right;
                    break;

                case SleepData.HeadDir.Down:
                    output = Output_Percentage_Down;
                    break;
                }
                addCount = maxHeadDirCount / 9;         //1割空白を作成するように
                output.SetPercentageData(maxHeadDirCount + addCount, labelDataList);
            }

            //データ個数からラベルとして表示するための時間を算出します
            // 呼吸状態のデータ数が3倍になったため、3で割って正しい時間に直している
            int hour = ((maxHeadDirCount + addCount) / 2) / 3 / 60;
            int min  = ((maxHeadDirCount + addCount) / 2) / 3 % 60;
            int sec  = ((maxHeadDirCount + addCount) % 2) / 3 * 30;

            Output_AggrigateTimeLabel.SetAxis(hour, min, sec);
        }
Пример #5
0
        //いびきのデータを集計用グラフに出力
        void SetBreathDataToPercentageBarChart(List <Data> ibikiDataList)
        {
            //頭の向きで最も要素数が大きいものを探す
            int maxHeadDirCount = 0;

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                int count = 0;
                count += ibikiDataList.Where(data => data.HeadDir1 == headDir).Count();

                count += ibikiDataList.Where(data => data.HeadDir2 == headDir).Count();

                count += ibikiDataList.Where(data => data.HeadDir3 == headDir).Count();

                maxHeadDirCount = count > maxHeadDirCount ? count : maxHeadDirCount;
            }

            int addCount = 0;   //グラフの右端に余裕を持たせるために追加する値

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                //体の向きそれぞれに対して処理を行う
                List <LabelData> labelDataList = new List <LabelData>();
                foreach (IbikiLebel ibikiLebel in ibikiLebelList)
                {
                    //いびきのレベルそれぞれに対して処理を行う
                    //体の向きが合致して、なおかついびきレベルも合致するデータの個数を求める
                    int value = 0;
                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir1.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume1).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir2.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume2).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir3.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume3).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    if (value == 0)
                    {
                        continue;
                    }
                    LabelData.Label label = ibikiLebel.GetLabel();
                    labelDataList.Add(new LabelData(value, label));
                }

                PercetageBarChart output = null;
                //呼吸データを体の向きごとに集計したものをグラフに出力する
                switch (headDir)
                {
                case SleepData.HeadDir.Left:
                    output = Output_Percentage_Left;
                    break;

                case SleepData.HeadDir.Up:
                    output = Output_Percentage_Up;
                    break;

                case SleepData.HeadDir.Right:
                    output = Output_Percentage_Right;
                    break;

                case SleepData.HeadDir.Down:
                    output = Output_Percentage_Down;
                    break;
                }
                addCount = maxHeadDirCount / 9;         //1割空白を作成するように
                output.SetPercentageData(maxHeadDirCount + addCount, labelDataList);
            }

            //データ個数からラベルとして表示するための時間を算出します
            // 体の向きのデータ個数が3倍になったため、3で割っている
            int hour = ((maxHeadDirCount + addCount) / 2) / 3 / 60;
            int min  = ((maxHeadDirCount + addCount) / 2) / 3 % 60;
            int sec  = ((maxHeadDirCount + addCount) % 2) / 3 * 30;
            //Output_AggrigateTimeLabel.SetAxis(hour, min, sec);
        }