Stacked Bar for Horizontal

TeeChart for Microsoft Visual Studio .NET, Xamarin Studio (Android, iOS & Forms) & Monodevelop.
Post Reply
bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Stacked Bar for Horizontal

Post by bpamit » Sun Apr 08, 2018 3:44 am

would like to know to can I set horizontal stacked bar chart as attached image.
i cant seems to get the stacked to work correctly.
Attachments
TeeChart-BarStacked.PNG
TeeChart-BarStacked.PNG (15.99 KiB) Viewed 20519 times

Christopher
Guru
Posts: 1603
Joined: Fri Nov 15, 2002 12:00 am

Re: Stacked Bar for Horizontal

Post by Christopher » Mon Apr 09, 2018 7:52 am

bpamit wrote:would like to know to can I set horizontal stacked bar chart as attached image.
i cant seems to get the stacked to work correctly.
Well, some code to help you get started would be something like this:

Code: Select all

		private void InitializeChart()
		{
			Random rnd = new Random();

			tChart1.Header.Text = "My Chart";

			for (int i = 0; i < 3; i++)
			{
				HorizBar series = new HorizBar(tChart1.Chart);
				series.Title = "My Horizontal " + (i + 1).ToString();

				for (int t = 0; t < 3; t++)
				{
					series.Add(rnd.Next(200), (t + 1).ToString() + "Y");
				}

				series.Marks.Style = MarksStyles.Value;
				series.MultiBar = MultiBars.Stacked;
				series.MarksOnBar = true;
			}

			tChart1.Axes.Left.Labels.Style = AxisLabelStyle.Text;
			tChart1.Axes.Left.Grid.Visible = false;
			tChart1.Axes.Bottom.Grid.Visible = true;
		}
which gives me:
2018-04-09_09-49-53.png
2018-04-09_09-49-53.png (12.14 KiB) Viewed 20505 times
Best Regards,
Christopher Ireland / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Instructions - How to post in this forum

bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Re: Stacked Bar for Horizontal

Post by bpamit » Tue Apr 10, 2018 7:08 am

Hi Christopher, thanks for the prompt reply. I managed to get the chart working.
But I having issue to set the chart to start at a specific value instead of 0.

Please refer to the attachment. Thanks.
Attachments
TeeChart-StackedBar2.png
TeeChart-StackedBar2.png (24.63 KiB) Viewed 20486 times

Christopher
Guru
Posts: 1603
Joined: Fri Nov 15, 2002 12:00 am

Re: Stacked Bar for Horizontal

Post by Christopher » Mon Apr 23, 2018 11:03 am

Many apologies for the delay in response to this question - do you still need help in this area?
Best Regards,
Christopher Ireland / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Instructions - How to post in this forum

bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Re: Stacked Bar for Horizontal

Post by bpamit » Sun May 13, 2018 12:32 pm

Hi Christopher, Yes I still cannot figure it out. Thanks.

Christopher
Guru
Posts: 1603
Joined: Fri Nov 15, 2002 12:00 am

Re: Stacked Bar for Horizontal

Post by Christopher » Mon May 14, 2018 9:24 am

Hello!

Okay, well, taking your data set I've been able to come up with the following code:

Code: Select all

		private void InitializeChart()
		{
			double[] YearOne = new double[] { 2.145, 4.132, 4.409, 15.614 };
			double[] YearThree = new double[] { 3.632, 4.509, 4.8008, 7.162 };
			double[] YearFive = new double[] { 3.806, 4.478, 4.743, 5.941 };
			double[] YearSeven = new double[] { 4.105, 4.439, 4.729, 5.912 };
			double[] YearTen = new double[] { 4.124, 4.492, 4.773, 5.599 };
			string[] labels = new string[] { "1Y", "3Y", "5Y", "7Y", "10Y" };

			List<double[]> years = new List<double[]>() { YearOne, YearThree, YearFive, YearSeven, YearTen };

			void AddBar(int index)
			{
				HorizBar bar = new HorizBar(tChart1.Chart);
				bar.Title = "My Horizontal " + (index + 1).ToString();

				for (int i = 0; i < years.Count; i++)
				{
					bar.Add(years[i][index], labels[i]);
				}

				bar.MultiBar = MultiBars.Stacked;
				bar.Marks.Style = MarksStyles.Value;
				bar.MarksOnBar = true;
			}


			for (int i = 0; i < 4; i++)
			{
				AddBar(i);
			}

			tChart1.Axes.Left.Labels.Style = AxisLabelStyle.Text;
			tChart1.Axes.Left.Grid.Visible = false;
			tChart1.Axes.Bottom.Grid.Visible = true;
		}
This gives me the following chart:
2018-05-14_11-17-31.png
2018-05-14_11-17-31.png (21.87 KiB) Viewed 20393 times
I would suggest this chart is correct - take the "1Y" row - this correctly reflects the sum of the 1Y data (26.3) and also reflects the first data point accurately on the bar (2.145). All the rows (1Y->10Y) are correct in this sense also. Would you agree that this chart is correct? If so, what chart would you like to see if it is not this one?
Best Regards,
Christopher Ireland / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Instructions - How to post in this forum

bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Re: Stacked Bar for Horizontal

Post by bpamit » Mon May 21, 2018 11:57 am

Hi Christopher, chart is incorrect. I would like to start the chart for 1Y at 2.145, 3Y at 3.3632 and 5Y at 3.806. please refer to the first image. Your sample is all starting from 0.

Christopher
Guru
Posts: 1603
Joined: Fri Nov 15, 2002 12:00 am

Re: Stacked Bar for Horizontal

Post by Christopher » Mon May 21, 2018 12:22 pm

bpamit wrote:Hi Christopher, chart is incorrect. I would like to start the chart for 1Y at 2.145, 3Y at 3.3632 and 5Y at 3.806. please refer to the first image. Your sample is all starting from 0.
Yes, and this is correct if each point is a *value*.

Code: Select all

double[] YearOne = new double[] { 2.145, 4.132, 4.409, 15.614 };
so taking the value 2.145, the bar should end at this value, that is, the bar should end at 2.145, which is where it ends. The bar begins at zero precisely because 2.145 is a value, and all values start at zero.

Another, quite different, type of chart is where the points form a *range*. In these charts there are two points, the start point of the range and the end point of the range. So, for example, in the YearOne array above we could say there are two ranges:

2.145 -> 4.132
4.409 -> 15.614

or we could say there are three ranges:

2.145 -> 4.132
4.132 -> 4.409
4.409 -> 15.614

so the question is - are the points in the YearOne, YearTwo etc. arrays of my example *values* or *ranges*? The chart that my example drew is correct if the points are *values*. If the points are *ranges*, however, a completely different series type has to be used.
Best Regards,
Christopher Ireland / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Instructions - How to post in this forum

bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Re: Stacked Bar for Horizontal

Post by bpamit » Tue May 22, 2018 2:30 am

Hi Christopher, my bad. Now I understand what you mean. I would like to know which chart type to use if I need to draw bar in range.

Christopher
Guru
Posts: 1603
Joined: Fri Nov 15, 2002 12:00 am

Re: Stacked Bar for Horizontal

Post by Christopher » Wed May 23, 2018 9:32 am

bpamit wrote:Hi Christopher, my bad. Now I understand what you mean. I would like to know which chart type to use if I need to draw bar in range.
No problem - one way of drawing a horizontal range chart is to use the Gantt series, e.g.

Code: Select all

		private void InitializeChart()
		{
			double[] YearOne = new double[] { 2.145, 4.132, 4.409, 15.614 };
			double[] YearThree = new double[] { 3.632, 4.509, 4.8008, 7.162 };
			double[] YearFive = new double[] { 3.806, 4.478, 4.743, 5.941 };
			double[] YearSeven = new double[] { 4.105, 4.439, 4.729, 5.912 };
			double[] YearTen = new double[] { 4.124, 4.492, 4.773, 5.599 };
			string[] labels = new string[] { "1Y", "3Y", "5Y", "7Y", "10Y" };
			Color[] colors = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue };

			List<double[]> years = new List<double[]>() { YearOne, YearThree, YearFive, YearSeven, YearTen };

			Gantt bar = new Gantt(tChart1.Chart);
			bar.XValues.DateTime = false;
			bar.Pointer.VertSize = 20;
			bar.Marks.Visible = true;
			bar.Marks.Style = MarksStyles.Value;
			tChart1.Legend.Visible = false;
			tChart1.Axes.Left.MinimumOffset = 25;
			tChart1.Axes.Left.MaximumOffset = 25;
			tChart1.Axes.Bottom.Labels.Separation = 0;
			tChart1.Axes.Bottom.Increment = 1;

			void AddBar(int index)
			{
				double[] values = years[index];

				for (int i = 0; i < values.Length - 1; i++)
				{
					bar.Add(values[i], values[i + 1], index, labels[index], colors[i]);
				}
			}

			for (int i = 0; i < 5; i++)
			{
				AddBar(i);
			}
		}
2018-05-23_11-30-32.png
2018-05-23_11-30-32.png (12.86 KiB) Viewed 20356 times
Best Regards,
Christopher Ireland / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Instructions - How to post in this forum

bpamit
Newbie
Newbie
Posts: 6
Joined: Tue Apr 18, 2017 12:00 am

Re: Stacked Bar for Horizontal

Post by bpamit » Mon May 28, 2018 3:24 am

Hi Christopher, thanks for the codes. It works.

Post Reply