Problem with HorizontalStackBar chart

4 posts, 0 answers
  1. luke
    luke avatar
    25 posts
    Member since:
    Apr 2010

    Posted 31 May 2011 Link to this post

    Hi,

    Im trying creating achive result with chart like on supply screen. ItemsSource is dynamic list, so im creating it imperative way in code

    private void BuildChart()
            {
      
                RadChart1.SeriesMappings.Clear();
                SeriesMapping map = new SeriesMapping();
                var groupSett = new GroupingSettings() { StackGroupFieldName = "TimeType" };
                groupSett.GroupDescriptors.Add(new ChartGroupDescriptor() { Member = "TimeType" });
                map.GroupingSettings = groupSett;
                map.SeriesDefinition = new HorizontalStackedBarSeriesDefinition() ;
                ItemMapping imap = new ItemMapping();
                imap.DataPointMember = DataPointMember.XCategory;
                imap.FieldName = "UserName";
                map.ItemMappings.Add(imap);
      
                imap = new ItemMapping();
                imap.DataPointMember = DataPointMember.YValue;
                imap.FieldName = "Time";//RealTime
      
                map.ItemMappings.Add(imap);
                    RadChart1.SeriesMappings.Add(map);
    }
      
    public List<UserRecords> GetData()
    {
    foreach(var item in e.Result)
    {
                        UserRecord rec = new UserRecord();
                        rec.StandardTime = item.RealTime.Ticks ;
                        rec.TimeType= "RealTime";
                        rec.UserName= item.UserName;
                        userrecs.Add(rec);
      
                        UserRecord rec2 = new UserRecord();
                        rec2.StandardTime = item.StandardTime.Ticks ;
                        rec2.TimeType= "StdTime";
                        rec2.UserName= item.UserName;
      
      
                        userrecs.Add(rec2);
    }
    return userrecs;
    }
      
    class UserRecords
    {                public string TimeType{ get; set; }
                public string UserName{ get; set; }
                public double Time { get; set; }
                public int TaskNumber{ get; set; }
    }
      
    //initializing chart
    RadChart1.ItemsSource = GetData();

    At screen which i applied each color is one task. It's grouped for each user. Real times of task, and planned times.
    How can i achive result like on screen?

    thanks in advance for help.

    ps. I have problem with uploading screen files to this thread, so im attached in on outer server
    http://imageshack.us/f/232/telerikchart.jpg/
  2. Nikolay
    Admin
    Nikolay avatar
    397 posts

    Posted 02 Jun 2011 Link to this post

    Hello luke,

    Could you, please, provide a bit more details on your scenario. Is the problem you're facing that you are unable to create the dual layer X-Axis label, like in the image you've linked, or something with the HorizontalStackedBarSeries itself? If it is the former, unfortunately the current version of RadChart does not support having two layers of X-axis labels.

    In case the problem you've encountered is different, then could you, please, open a support ticket and send us a sample runnable application, which demonstrates the issue, so that we could provide further support.

    Kind regards,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. luke
    luke avatar
    25 posts
    Member since:
    Apr 2010

    Posted 02 Jun 2011 Link to this post

    Hi,
    thanks for respond.

    No, i dont meant to make dual layer. Maybe this screen explain more clearly what effect i would like to have.

    There is some users which working on some tasks.(lets yellow color in down part of my screen mean this task). The task has planned time to work on it- Bottom of each "group". Worker worked on  tasks(on screen 3 task). On top of this i would like to see "bar series"/"bar with real time of doing task. In my user grouping their bars work ok. But i can't  "divide" bars to represent task separetly, instead i have solid color block containing all tasks.
    For my case important is also that  tasks have same color block( i can easly compare planned time and real time-on screen blue blocks is same task,oragne and yellow as well)





    Ps. Is it possible to reserve some color ("red") to represent not planned task in my bar? I think my contract would look like this:

    little explaination:
    TimeType-im using to group to right bar-real time or planned time(bottom or top bar of each user ),"RealTime","StdTime"
    Time - real/planned time. TimeType field "branch" it to right bar

    class UserRecords
    {                public string TimeType{ get; set; }//real std(planned)
                public string UserName{ get; set; }
                public double Time { get; set; }//time spent
                public int TaskNumber{ get; set; }//task number
                    public bool IsPlanned{get; set;}/? red color if not...
    }


    im building chart way i posted in first post.

    Screen:
    http://imageshack.us/f/825/desirechart.png/
  4. Nikolay
    Admin
    Nikolay avatar
    397 posts

    Posted 07 Jun 2011 Link to this post

    Hello luke,

    In order to stack the series above each other, you would need to create 2 stacks, with 3 bars in each stack, similarly to our StackedBar demo example. The bars can have the same color by setting PaletteBrushes in the following manner :
    <telerik:RadChart x:Name="RadChart1" PaletteBrushesRepeat="True">
        <telerik:RadChart.PaletteBrushes>
            <SolidColorBrush Color="Yellow" />
            <SolidColorBrush Color="Orange" />
            <SolidColorBrush Color="Blue" />
        </telerik:RadChart.PaletteBrushes>
    </telerik:RadChart>

    As for the not planned tasks, you may add another bar in each stack and add another color ( red ) in the brushes collection.

    Generally it is not possible to bind DateTime values to the numeric axis ( axis X in HorizontalStackedBar scenario ) out of the box, however, you may add custom strings, representing the time periods. Here is a snippet demonstrating how you can achieve this :
    private void RadChart_DataBound(object sender, ChartDataBoundEventArgs e)
            {
                RadChart chart = sender as RadChart;
      
                foreach (TickPoint tick in chart.DefaultView.ChartArea.AxisX.TickPoints)
                {
                    tick.Label = [custom_strings_collection_here];
                }
            }

    Hope this helps.

    Regards,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top