private void InitLegend(Legend legend)
 {
     legend.painter          = null; // legend component does not need to paint
     legend.refreshComponent = delegate()
     {
         legend.OnChanged();
         var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, transform, m_ChartMinAnchor,
                                                  m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
         legend.gameObject      = legendObject;
         legendObject.hideFlags = chartHideFlags;
         SeriesHelper.UpdateSerieNameList(m_Series, ref m_LegendRealShowName);
         List <string> datas;
         if (legend.show && legend.data.Count > 0)
         {
             datas = new List <string>();
             for (int i = 0; i < m_LegendRealShowName.Count; i++)
             {
                 if (legend.data.Contains(m_LegendRealShowName[i]))
                 {
                     datas.Add(m_LegendRealShowName[i]);
                 }
             }
         }
         else
         {
             datas = m_LegendRealShowName;
         }
         int totalLegend = 0;
         for (int i = 0; i < datas.Count; i++)
         {
             if (!SeriesHelper.IsLegalLegendName(datas[i]))
             {
                 continue;
             }
             totalLegend++;
         }
         legend.RemoveButton();
         ChartHelper.HideAllObject(legendObject);
         if (!legend.show)
         {
             return;
         }
         for (int i = 0; i < datas.Count; i++)
         {
             if (!SeriesHelper.IsLegalLegendName(datas[i]))
             {
                 continue;
             }
             string legendName = legend.GetFormatterContent(datas[i]);
             var    readIndex  = m_LegendRealShowName.IndexOf(datas[i]);
             var    active     = IsActiveByLegend(datas[i]);
             var    bgColor    = LegendHelper.GetIconColor(legend, readIndex, theme, m_Series, datas[i], active);
             var    item       = LegendHelper.AddLegendItem(legend, i, datas[i], legendObject.transform, m_Theme,
                                                            legendName, bgColor, active);
             legend.SetButton(legendName, item, totalLegend);
             ChartHelper.ClearEventListener(item.button.gameObject);
             ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerDown, (data) =>
             {
                 if (data.selectedObject == null || legend.selectedMode == Legend.SelectedMode.None)
                 {
                     return;
                 }
                 var temp            = data.selectedObject.name.Split('_');
                 string selectedName = temp[1];
                 int clickedIndex    = int.Parse(temp[0]);
                 if (legend.selectedMode == Legend.SelectedMode.Multiple)
                 {
                     OnLegendButtonClick(clickedIndex, selectedName, !IsActiveByLegend(selectedName));
                 }
                 else
                 {
                     var btnList = legend.buttonList.Values.ToArray();
                     if (btnList.Length == 1)
                     {
                         OnLegendButtonClick(0, selectedName, !IsActiveByLegend(selectedName));
                     }
                     else
                     {
                         for (int n = 0; n < btnList.Length; n++)
                         {
                             temp         = btnList[n].name.Split('_');
                             selectedName = btnList[n].legendName;
                             var index    = btnList[n].index;
                             OnLegendButtonClick(n, selectedName, index == clickedIndex ? true : false);
                         }
                     }
                 }
             });
             ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerEnter, (data) =>
             {
                 if (item.button == null)
                 {
                     return;
                 }
                 var temp            = item.button.name.Split('_');
                 string selectedName = temp[1];
                 int index           = int.Parse(temp[0]);
                 OnLegendButtonEnter(index, selectedName);
             });
             ChartHelper.AddEventListener(item.button.gameObject, EventTriggerType.PointerExit, (data) =>
             {
                 if (item.button == null)
                 {
                     return;
                 }
                 var temp            = item.button.name.Split('_');
                 string selectedName = temp[1];
                 int index           = int.Parse(temp[0]);
                 OnLegendButtonExit(index, selectedName);
             });
         }
         if (legend.selectedMode == Legend.SelectedMode.Single)
         {
             for (int n = 0; n < m_LegendRealShowName.Count; n++)
             {
                 OnLegendButtonClick(n, m_LegendRealShowName[n], n == 0 ? true : false);
             }
         }
         LegendHelper.ResetItemPosition(legend, m_ChartPosition, m_ChartWidth, m_ChartHeight);
     };
     legend.refreshComponent();
 }