public void SetData(List <GraphData> graphDatas)
    {
        _data = graphDatas;

        float scrollPosition;

        // if some value been cached before
        if (!_scrollLastPositions.TryGetValue(_trackerType, out scrollPosition))
        {
            scrollPosition = 1;
        }

        // tell the scroller to reload now that we have the data
        scroller.ReloadData(scrollPosition);

        // we need to snap immediately but scroller asset got some limitation here, that's why need to use this workaround
        EnhancedScroller.TweenType tween = scroller.snapTweenType;
        scroller.snapTweenType = EnhancedScroller.TweenType.immediate;
        scroller.Snap();
        scroller.snapTweenType = tween;

        // simulate scrolling callback after forced position setup to set correct focus and update ui. ScrollPosition parameter can be any value, it doesn't used anyway
        ScrollerScrolled(scroller, new Vector2(scrollPosition, 0), 1);
    }