Hi,
Is there any way to set start position for bar series with stack style set as self-stacked?
For instance, for the stacked bar series in attached snap, can we have starting position as 4.5 so that bar will start from this point?
We are using tee chart for .net (Version 4.1.2013.7302).
Thanks in advance,
Chandran
Start position for bar series
Start position for bar series
- Attachments
-
- Sample bar series
- BarSeries.png (81.07 KiB) Viewed 15020 times
-
- Guru
- Posts: 1603
- Joined: Fri Nov 15, 2002 12:00 am
Re: Start position for bar series
Hello Chandran,
another technique would be to use custom labels, e.g.
yet another technique would be to use the GetAxisLabel event, e.g.
One technique would be to use series labels, e.g.Chandran wrote: For instance, for the stacked bar series in attached snap, can we have starting position as 4.5 so that bar will start from this point?
Code: Select all
Bar series1, series2;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
series1 = new Bar(tChart1.Chart);
series1.Add(1, "10");
series1.Add(2, "20");
series1.MultiBar = MultiBars.SelfStack;
series2 = new Bar(tChart1.Chart);
series2.Add(3, "");
series2.Add(4, "");
series2.MultiBar = MultiBars.SelfStack;
}
Code: Select all
Bar series1, series2;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
series1 = new Bar(tChart1.Chart);
series1.Add(1, 1);
series1.Add(2, 2);
series1.MultiBar = MultiBars.SelfStack;
series2 = new Bar(tChart1.Chart);
series2.Add(3, 3);
series2.Add(4, 4);
series2.MultiBar = MultiBars.SelfStack;
tChart1.Axes.Bottom.Labels.Items.Add(-1, "-10");
tChart1.Axes.Bottom.Labels.Items.Add(0, "0");
tChart1.Axes.Bottom.Labels.Items.Add(1, "10");
tChart1.Axes.Bottom.Labels.Items.Add(2, "200");
}
Code: Select all
Bar series1, series2;
private void InitializeChart()
{
tChart1.GetAxisLabel += tChart1_GetAxisLabel;
tChart1.Aspect.View3D = false;
series1 = new Bar(tChart1.Chart);
series1.Add(1, 1);
series1.Add(2, 2);
series1.MultiBar = MultiBars.SelfStack;
series2 = new Bar(tChart1.Chart);
series2.Add(3, 3);
series2.Add(4, 4);
series2.MultiBar = MultiBars.SelfStack;
}
void tChart1_GetAxisLabel(object sender, GetAxisLabelEventArgs e)
{
if (sender.Equals(tChart1.Axes.Bottom))
{
double label = Convert.ToDouble(e.LabelText);
label += 4;
e.LabelText = label.ToString();
if (e.LabelText == "4")
{
e.LabelText = "50";
}
}
}
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 |
Re: Start position for bar series
Hi Christopher,
Thanks for your response.
I’ve tried the solution provided. But it is not as per our requirement.
I’ve attached an image which depicts what is expected to be rendered against the default rendering.
To elaborate more on this scenario, as shown in the “Default Rendering” image the Y-Axis starts from ‘0’.
But in our case, it should start at ‘3.8’ as shown in the “Expected Rendering” image.
Could you please suggest any solution?
Thanks,
Chandran
Thanks for your response.
I’ve tried the solution provided. But it is not as per our requirement.
I’ve attached an image which depicts what is expected to be rendered against the default rendering.
To elaborate more on this scenario, as shown in the “Default Rendering” image the Y-Axis starts from ‘0’.
But in our case, it should start at ‘3.8’ as shown in the “Expected Rendering” image.
Could you please suggest any solution?
Thanks,
Chandran
- Attachments
-
- Sample image is attached
- StackedBarIssue.png (124.36 KiB) Viewed 14942 times
-
- Guru
- Posts: 1603
- Joined: Fri Nov 15, 2002 12:00 am
Re: Start position for bar series
I'm afraid I'm going to need to ask you for a small code-snippet with which I can reproduce your problem, along with a little more detail of precisely what you'd like to see.Chandran wrote:Could you please suggest any solution?
Many thanks in advance for your kind collaboration.
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 |
Re: Start position for bar series
Hi Christopher,
Here is sample forms application illustrating what we want.
It has one bar series with 10 points. Multibars property for bar series is set to self-stacked.
As can be seen after running it, bar series is drawn from (0,0) irrespective of specified x value in series data.
Here are the issues revisited:
Issue 1: Can we draw it from any given left axis value? For instance, if we want to draw it from y=5 onwards, is it possible?
Issue 2: Since all data points in this series are having x as 4, why this bar is drawn on x=0 and why not on x = 4?
To summarize, can we have customized starting position for bar drawing, say in this case, can we make the bar drawing start from (4,20) instead (0,0)?
Please let us know in case of any more inputs/clarification.
Thanks,
Chandran
Here is sample forms application illustrating what we want.
It has one bar series with 10 points. Multibars property for bar series is set to self-stacked.
As can be seen after running it, bar series is drawn from (0,0) irrespective of specified x value in series data.
Here are the issues revisited:
Issue 1: Can we draw it from any given left axis value? For instance, if we want to draw it from y=5 onwards, is it possible?
Issue 2: Since all data points in this series are having x as 4, why this bar is drawn on x=0 and why not on x = 4?
To summarize, can we have customized starting position for bar drawing, say in this case, can we make the bar drawing start from (4,20) instead (0,0)?
Please let us know in case of any more inputs/clarification.
Thanks,
Chandran
- Attachments
-
- WindowsFormsApplication2.zip
- bar series sample
- (16.43 KiB) Downloaded 651 times
-
- Site Admin
- Posts: 14730
- Joined: Mon Jun 09, 2003 4:00 am
- Location: Banyoles, Catalonia
- Contact:
Re: Start position for bar series
Hi Chandran,
This is because of MultiBars.SelfStack, which stacks all bars to 0.Issue 2: Since all data points in this series are having x as 4, why this bar is drawn on x=0 and why not on x = 4?
Yes, a solution that solves both issues would be applying some sort of offset to the axis labels using the GetAxisLabel event, for example:To summarize, can we have customized starting position for bar drawing, say in this case, can we make the bar drawing start from (4,20) instead (0,0)?
Code: Select all
using System;
using System.Drawing;
using System.Windows.Forms;
using Steema.TeeChart;
using Steema.TeeChart.Styles;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
TChart tChart1;
public Form1()
{
InitializeComponent();
CreateChart();
InitializeChart();
}
Bar series1;
Steema.TeeChart.Drawing.PointDouble drawAt;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
series1 = new Bar(tChart1.Chart);
series1.BarWidthPercent = 15;
series1.Marks.Visible = false;
series1.Add(4, 10, ColorConst.First);
series1.Add(4, 5, ColorConst.Second);
series1.Add(4, 20, ColorConst.Third);
series1.Add(4, 30, ColorConst.Forth);
series1.Add(4, 5, ColorConst.Fifth);
series1.Add(4, 40, ColorConst.Sixth);
series1.Add(4, 25, ColorConst.Seventh);
series1.Add(4, 10, ColorConst.Eight);
series1.Add(4, 23, ColorConst.Nineth);
series1.Add(4, 27, ColorConst.Tenth);
drawAt = new Steema.TeeChart.Drawing.PointDouble(series1.XValues.Maximum, 20);
series1.MultiBar = MultiBars.SelfStack;
tChart1.Axes.Left.Automatic = false;
tChart1.Axes.Left.AutomaticMaximum = false;
tChart1.Axes.Left.AutomaticMinimum = false;
tChart1.Axes.Left.Maximum = 200;
tChart1.Axes.Left.Minimum = -30;
tChart1.Axes.Bottom.Automatic = false;
tChart1.Axes.Bottom.AutomaticMaximum = false;
tChart1.Axes.Bottom.AutomaticMinimum = false;
tChart1.Axes.Bottom.Maximum = 10;
tChart1.Axes.Bottom.Minimum = 0;
tChart1.GetAxisLabel += tChart1_GetAxisLabel;
}
void tChart1_GetAxisLabel(object sender, GetAxisLabelEventArgs e)
{
double temp = Convert.ToDouble(e.LabelText);
if (sender.Equals(tChart1.Axes.Left))
{
temp += drawAt.Y;
}
else if (sender.Equals(tChart1.Axes.Bottom))
{
temp += drawAt.X;
}
e.LabelText = temp.ToString();
}
private void CreateChart()
{
tChart1 = new TChart();
tChart1.Dock = DockStyle.Fill;
tblPanel.Controls.Add(tChart1, 0, 1);
tblPanel.Dock = DockStyle.Fill;
}
private void btnModify_Click_1(object sender, EventArgs e)
{
tChart1.ShowEditor();
}
}
public class ColorConst
{
public static readonly Color First = Color.FromArgb(219, 219, 219);
public static readonly Color Second = Color.FromArgb(222, 216, 218);
public static readonly Color Third = Color.FromArgb(184, 186, 216);
public static readonly Color Forth = Color.FromArgb(209, 185, 189);
public static readonly Color Fifth = Color.FromArgb(142, 149, 189);
public static readonly Color Sixth = Color.FromArgb(201, 147, 151);
public static readonly Color Seventh = Color.FromArgb(90, 102, 166);
public static readonly Color Eight = Color.FromArgb(174, 82, 98);
public static readonly Color Nineth = Color.FromArgb(22, 45, 160);
public static readonly Color Tenth = Color.FromArgb(155, 0, 69);
}
}
Best Regards,
Narcís Calvet / 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 |
Re: Start position for bar series
Thanks Narcis for the workaround. It works well provided that there is only one stacked bar series.
If chart has another series, it would also be affected with this change.
In our scenario, we do have another series and we want to apply this change to bar only.
To illustrate this, have a look at attached snaps: one is before changing axis labels, another snap shows chart after changing labels which is fine for bar but not intended for error series.
Can we just shift bar starting position to desired location and keep other series unaffected? We tried it using custom right axis for bar but haven’t succeeded in it?
Please suggest.
Thanks,
Chandran
If chart has another series, it would also be affected with this change.
In our scenario, we do have another series and we want to apply this change to bar only.
To illustrate this, have a look at attached snaps: one is before changing axis labels, another snap shows chart after changing labels which is fine for bar but not intended for error series.
Can we just shift bar starting position to desired location and keep other series unaffected? We tried it using custom right axis for bar but haven’t succeeded in it?
Please suggest.
Thanks,
Chandran
- Attachments
-
- After updating axis labels
- AfterHandlingEvent.png (26.74 KiB) Viewed 14829 times
-
- Before updating axis labels
- BeforeHandlingEvent.png (26.75 KiB) Viewed 14825 times
-
- Guru
- Posts: 1603
- Joined: Fri Nov 15, 2002 12:00 am
Re: Start position for bar series
Chandran,
This gives me the attached image (the points series here just a placeholder for a second series):
I don't think the self-stacked bar style is going to do this for you, as the XValue is always set to the index of the series in the tChart1.Series collection, that is, zero in this case. An alternative would be to use several different bar series with a stacked style, e.g.chandran wrote:Can we just shift bar starting position to desired location and keep other series unaffected? We tried it using custom right axis for bar but haven’t succeeded in it?
Please suggest.
Code: Select all
using System;
using System.Drawing;
using System.Windows.Forms;
using Steema.TeeChart;
using Steema.TeeChart.Styles;
using System.Collections.Generic;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
TChart tChart1;
public Form1()
{
InitializeComponent();
CreateChart();
InitializeChart();
}
Bar series1;
Points series2;
Steema.TeeChart.Drawing.PointDouble drawAt;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
series2 = new Points(tChart1.Chart);
series2.Add(10, 10);
Random rnd = new Random();
for (int i = 0; i < ColorConst.List.Count - 1; i++)
{
Bar series = new Bar(tChart1.Chart);
series.BarWidthPercent = 15;
series.Marks.Visible = false;
series.Add(4, rnd.Next(5, 40), ColorConst.List[i]);
series.MultiBar = MultiBars.Stacked;
}
//series1.Add(4, 10, ColorConst.First);
//series1.Add(4, 5, ColorConst.Second);
//series1.Add(4, 20, ColorConst.Third);
//series1.Add(4, 30, ColorConst.Forth);
//series1.Add(4, 5, ColorConst.Fifth);
//series1.Add(4, 40, ColorConst.Sixth);
//series1.Add(4, 25, ColorConst.Seventh);
//series1.Add(4, 10, ColorConst.Eight);
//series1.Add(4, 23, ColorConst.Nineth);
//series1.Add(4, 27, ColorConst.Tenth);
//series1.MultiBar = MultiBars.SelfStack;
//drawAt = new Steema.TeeChart.Drawing.PointDouble(series1.XValues.Maximum, 20);
tChart1.Axes.Left.Automatic = false;
tChart1.Axes.Left.AutomaticMaximum = false;
tChart1.Axes.Left.AutomaticMinimum = false;
tChart1.Axes.Left.Maximum = 200;
tChart1.Axes.Left.Minimum = -30;
tChart1.Axes.Bottom.Automatic = false;
tChart1.Axes.Bottom.AutomaticMaximum = false;
tChart1.Axes.Bottom.AutomaticMinimum = false;
tChart1.Axes.Bottom.Maximum = 10;
tChart1.Axes.Bottom.Minimum = 0;
//tChart1.GetAxisLabel += tChart1_GetAxisLabel;
}
void tChart1_GetAxisLabel(object sender, GetAxisLabelEventArgs e)
{
double temp = Convert.ToDouble(e.LabelText);
if (sender.Equals(tChart1.Axes.Left))
{
temp += drawAt.Y;
}
else if (sender.Equals(tChart1.Axes.Bottom))
{
temp += drawAt.X;
}
e.LabelText = temp.ToString();
}
private void CreateChart()
{
tChart1 = new TChart();
tChart1.Dock = DockStyle.Fill;
tblPanel.Controls.Add(tChart1, 0, 1);
tblPanel.Dock = DockStyle.Fill;
}
private void btnModify_Click_1(object sender, EventArgs e)
{
tChart1.ShowEditor();
}
}
public class ColorConst
{
public static readonly Color First = Color.FromArgb(219, 219, 219);
public static readonly Color Second = Color.FromArgb(222, 216, 218);
public static readonly Color Third = Color.FromArgb(184, 186, 216);
public static readonly Color Forth = Color.FromArgb(209, 185, 189);
public static readonly Color Fifth = Color.FromArgb(142, 149, 189);
public static readonly Color Sixth = Color.FromArgb(201, 147, 151);
public static readonly Color Seventh = Color.FromArgb(90, 102, 166);
public static readonly Color Eight = Color.FromArgb(174, 82, 98);
public static readonly Color Nineth = Color.FromArgb(22, 45, 160);
public static readonly Color Tenth = Color.FromArgb(155, 0, 69);
public static readonly List<Color> List = new List<Color>() { First, Second, Third, Forth, Fifth, Sixth, Seventh, Eight, Nineth, Tenth };
}
}
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 |