Unable to Achieve Horizontal Bars in C1Chart (WinForm) with Chart2DTypeEnum.Bar

Posted by: afaqdk on 25 February 2025, 6:36 am EST

    • Post Options:
    • Link

    Posted 25 February 2025, 6:36 am EST - Updated 25 February 2025, 8:48 am EST

    I’m trying to display a horizontal stacked bar chart in WinForms using C1Chart. Each bar should represent one gate on the Y‐axis, and its horizontal length should represent time on the X‐axis. I have successfully added custom labels (e.g., “Drop 1,” “Drop 2,” etc.) to the Y‐axis using ValueLabels, and those labels appear correctly. However, the bars themselves are still oriented vertically, as though time is running along the vertical axis.

    Here is a simplified outline of my setup:

    Dim cg As ChartGroup = frmMain_SVGC.GraphEventSummary.ChartGroups(0)
    cg.ChartData.SeriesList.Clear()
            For i As Integer = 0 To 6 
                cg.ChartData.SeriesList.AddNewSeries()
            Next
    
            ' Configure each series
            cg.ChartType = Chart2DTypeEnum.Bar
            cg.Stacked = True
          ExtractData()
    
            'add data - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            ReDim AllArrays(7)
            AllArrays(GF_SERIES_START) = dblEvent0
            AllArrays(GF_SERIES_A) = dblEventA
            AllArrays(GF_SERIES_B) = dblEventB
            AllArrays(GF_SERIES_C) = dblEventC
            AllArrays(GF_SERIES_D) = dblEventD
            AllArrays(GF_SERIES_E) = dblEventE
            AllArrays(GF_SERIES_F) = dblEventF
            AllArrays(GF_SERIES_ZONE_NAMES) = GraphZoneLabels
    
            'Assign data to chart series.
    
            Dim gateIndices(intNumberGatesRendered - 1) As Double
            For i As Integer = 0 To intNumberGatesRendered - 1
                gateIndices(i) = CDbl(i) ' e.g. 0, 1, 2, ...
            Next
            frmMain_SVGC.GraphEventSummary.ChartArea.AxisY.AnnoMethod = AnnotationMethodEnum.ValueLabels
            frmMain_SVGC.GraphEventSummary.ChartArea.AxisY.ValueLabels.Clear()
            For i As Integer = 0 To intNumberGatesRendered - 1
                Dim vl As New C1.Win.C1Chart.ValueLabel()
                vl.NumericValue = gateIndices(i)
                vl.Text = "Drop " & (i + 1).ToString()  ' or however you name them
                frmMain_SVGC.GraphEventSummary.ChartArea.AxisY.ValueLabels.Add(vl)
            Next
            For intSeries As Integer = 0 To (cg.ChartData.SeriesList.Count - 1)
                cg.ChartData.SeriesList(intSeries).Y.CopyDataIn(gateIndices)
            Next
    
            cg.ChartData.SeriesList(GF_SERIES_START).X.CopyDataIn(AllArrays(GF_SERIES_START))
    
            cg.ChartData.SeriesList(GF_SERIES_A).X.CopyDataIn(dblEventA)
            cg.ChartData.SeriesList(GF_SERIES_B).X.CopyDataIn(dblEventB)
    
            cg.ChartData.SeriesList(GF_SERIES_C).X.CopyDataIn(dblEventC)
            cg.ChartData.SeriesList(GF_SERIES_D).X.CopyDataIn(dblEventD)
            cg.ChartData.SeriesList(GF_SERIES_E).X.CopyDataIn(dblEventE)
            cg.ChartData.SeriesList(GF_SERIES_F).X.CopyDataIn(dblEventF)

    The result: I see my gate labels (“Drop 1,” “Drop 2,” etc.) correctly on the Y‐axis, but the bars themselves extend vertically (bottom‐to‐top) instead of horizontally (left‐to‐right). I do not see any property like CoordInverted or Inverted in my version of C1Chart that might flip the axes.

    Questions:

    Is there a built‐in way (e.g., a property or a method) to flip the orientation so Chart2DTypeEnum.Bar actually displays horizontally, with time on the X‐axis?

    If not, what is the recommended workaround to achieve a truly horizontal bar chart in WinForms C1Chart (for example, do I have to swap my data and rename the axes)?

    Could Stacked = True be enforcing a vertical stacking axis, and if so, how can I make it stack horizontally instead?

    I am attaching the chartfx graph so you know what I wanted to achieve.

    Any guidance would be greatly appreciated. Thank you!

  • Posted 27 February 2025, 9:17 am EST

    Hello,

    To plot horizontal bar charts, you can plot column charts and reverse the ChartArea by setting the ChartArea.Inverted property to True.

    Please refer to the attached sample for implementation. (see Chart_BarChart.zip)

    For more information, see https://developer.mescius.com/componentone/docs/win/online-chart2d/invertedbarcharts.html

    Regards,

    Uttkarsh.

Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels