Page 1 of 1

Problem with Axis Title Position

Posted: Mon Mar 16, 2009 8:30 am
by 13052797
Hi,

There seems to be a problem with the positioning of the Title of the Axis if we use event handler Chart.GetAxisLabel.

We have a really long axes labels, so what we do is we have an event handler for GetAxisLabel and in that if the label is longer than a certain value, we clip it to a fixed lenght.

Even after clipping what we noticed is that the Axis titles is positioned based on the actual length of the data but not based on the new values.

Please let me know how to get the axis titles positioned properly at the right place.

The following code can be used to reproduce the problem:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public DataTable GetDataTable()
{
DataTable dt = new DataTable("SampleData");

dt.Columns.Add("LABEL", typeof(string));
dt.Columns.Add("COUNT", typeof(int));
dt.Columns.Add("RADIUS", typeof(int));

dt.Rows.Add("Pears", 2, 10);
dt.Rows.Add("Apples", 25, 11);
dt.Rows.Add("Oranges", 3, 0);
dt.Rows.Add("Test", 8, 1);
dt.Rows.Add("Really Long text used as an axis label which would be clipped", 13, 1);
dt.AcceptChanges();
return dt;
}

private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = GetDataTable();
foreach (DataRow r in dt.Rows)
{
bar1.Add((int)r["COUNT"], r["LABEL"].ToString());
}
tChart1.GetAxisLabel += new Steema.TeeChart.GetAxisLabelEventHandler(tChart1_GetAxisLabel);
tChart1.Axes.Bottom.Title.Text = "Some title";
}

void tChart1_GetAxisLabel(object sender, Steema.TeeChart.GetAxisLabelEventArgs e)
{
string LsLabelText = e.LabelText;

string LsExtnString = "...";
int LiLabelLength = 30;

// If the label length is greater than the configured value
if (LsLabelText.Length > LiLabelLength)
{
LsLabelText = LsLabelText.Substring(0, LiLabelLength - LsExtnString.Length);
LsLabelText += LsExtnString;
e.LabelText = LsLabelText;
}
}

}

Posted: Mon Mar 16, 2009 12:05 pm
by yeray
Hi Mahadevan,

Could you tell us what TeeChart build are you using? Here, with actual sources it seems to work fine.

Maybe there are some special characteristics that you skipped to explain (form fill, chart fill,...) and maybe that's why we can't reproduce it here. So it would be better if you could send us a simple example project we can run "as-is" to reproduce the problem here?
You can either post your files at news://www.steema.net/steema.public.attachments newsgroup or at our upload page.

Posted: Tue Mar 17, 2009 10:43 am
by 13052797
I have uploaded the file to http://www.steema.net/upload/Default.aspx, name of the file is TeeChartAxes.zip I am using version 3.5.3330.21114 of the TeeChart.

Let me know if you need some more information.

Posted: Tue Mar 17, 2009 12:08 pm
by yeray
Hi Mahadevan,

Yes, the problem appears because you are trying to draw your bottom axis labels rotated. And then, when the axis label is updated, the chart margin isn't recalculated but it should. That's a known bug already in the wish list (TF02013509). It's discussed here.

Posted: Tue Mar 17, 2009 12:14 pm
by 13052797
Can you suggest a work around for this, so that the axes titles appear correctly?

Posted: Tue Mar 17, 2009 12:48 pm
by yeray
Hi Mahadevan,

Maybe you could add the filter after adding your points instead of on GetAxisLabel event:

Code: Select all

string LsLabelText;
string LsExtnString = "...";
int LiLabelLength = 30;

for (int i = 0; i < bar1.Labels.Count; i++)
{
    LsLabelText = bar1.Labels[i];

    if (bar1.Labels[i].Length > LiLabelLength)
    {
        LsLabelText = LsLabelText.Substring(0, LiLabelLength - LsExtnString.Length);
        LsLabelText += LsExtnString;
        bar1.Labels[i] = LsLabelText;
    }    
}

Posted: Mon May 18, 2009 7:50 am
by 13052797
Can you please let me know when a fix for this would be available?

Posted: Mon May 18, 2009 9:30 am
by narcis
Hi Mahadevan,

This has already been fixed for next v3 maintenance release due to be published very soon.

Posted: Wed May 20, 2009 12:05 pm
by 13052797
Hi,

Seems like the problem is not fixed in the release 3.5.3425.20245.
(Issue is not mentioned in the release notes and also when tried with the above mentioned release, problem persists)
Can you let me know the time line by the fix would be available?

Thanks And Regards,
Mahadevan

Posted: Wed May 20, 2009 2:05 pm
by narcis
Hi Mahadevan,

Code below works fine for me here using build 3.5.3425.20245. Can you please check if the TeeChart.dll reference in your project was updated correctly and if code below works fine?

Code: Select all

		public Form1()
		{
			InitializeComponent();
			InitializeChart();
		}

		private void InitializeChart()
		{
			tChart1.Legend.Visible = false;

			Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);

			string label = "this is a very long label for testing";

			line1.Add(3, label);
			line1.Add(5, label);
			line1.Add(7, label);
			line1.Add(2, label);

			tChart1.GetAxisLabel +=new Steema.TeeChart.GetAxisLabelEventHandler(tChart1_GetAxisLabel);
			tChart1.Axes.Bottom.Labels.Angle = 90;
		}

		void tChart1_GetAxisLabel(object sender, Steema.TeeChart.GetAxisLabelEventArgs e)
		{
			if (sender.Equals(tChart1.Axes.Bottom))
			{
				if (e.LabelText.Length > 15)
				{
					e.LabelText = string.Format("{0}{1}", e.LabelText.Substring(0, 15), "...");
				}
			}
		}
Thanks in advance.

Posted: Fri May 22, 2009 1:04 pm
by 13052797
Hi,
Looks like the problem is not solved completely.
If the default chart size is used then only it seems to be working.

If the chart size is set using the properties of Chart, then the labels are missing again.

Ex:
WebChart3.Width = 800;
WebChart3.Height = 600;

To reproduce the problem, use the file TeeChartAxes.zip uploaded to location http://www.steema.net/upload/Default.aspx

Thanks And Regards,
Mahadevan

Posted: Fri May 22, 2009 4:04 pm
by yeray
Hi Mahadevan,

I've tested your project with the latest TeeChart NET v3 sources (that still have no changes since the last release was published) and the result seems to be satisfactory:

Image

Is that the same result you are getting? And, isn't it the desired result?

Re: Problem with Axis Title Position

Posted: Thu Jul 23, 2009 9:05 pm
by 13052797
Hello Yeray,
That is not the expected behaviour.

As you can see from the graph, Axis Titles are rotated to 90 degrees so that the length of the label
doesnt affect the adjacent label.

Even though there is enough space available for all the labels, only alternate labels are visible,
I would expect all the labels to be visible in this case.

Thanks And regards,
Mahadevan

Re: Problem with Axis Title Position

Posted: Fri Jul 24, 2009 3:11 pm
by narcis
Hi Mahadevan,

Yes, this is a known issue (TF02013544). In that case you should use custom labels as shown here:

Code: Select all

    protected void Page_Load(object sender, EventArgs e)
    {
		
			// Third Chart
			WebChart3.GetAxisLabel += new Steema.TeeChart.GetAxisLabelEventHandler(tChart1_GetAxisLabel);
			
			DataTable dt = GetSignOffData();
			WebChart3.Chart.Axes.Bottom.Labels.Angle = 90;
			WebChart3.Chart.Legend.Visible = false;
			Bar signoffSeries = new Bar();
			signoffSeries.Title = "Completed";
			signoffSeries.Marks.Visible = false;
			WebChart3.Chart.Series.Clear();
			WebChart3.Chart.Series.Add(signoffSeries);
			signoffSeries.ColorEach = true;
			signoffSeries.BarStyle = BarStyles.RectGradient;
			foreach (DataRow row in dt.Rows)
			{
				string label = (string)row["Name"];
				signoffSeries.Add((int)row["Completed"], label);
			}

			// Comment this and the Axis Labels are fine
			WebChart3.Width = 800;
			WebChart3.Height = 600;

			WebChart3.Chart.Axes.Bottom.Labels.Items.Clear();

			for (int i = 0; i < signoffSeries.Count; i++)
			{
				WebChart3.Chart.Axes.Bottom.Labels.Items.Add(signoffSeries.XValues[i], ProcessLabel(signoffSeries.Labels[i]));
			}
		
    }


	private DataTable GetSignOffData()
	{
		DataTable dt = new DataTable("SignoffData");

		dt.Columns.Add("Name", typeof(string));
		dt.Columns.Add("Completed", typeof(int));
		dt.Columns.Add("NotCompleted", typeof(int));
		dt.Columns.Add("Total", typeof(int));

		dt.Rows.Add("Disciplinary actions send a message that violations of expected behavior will not be tolerated", 1, 0, 1);
		dt.Rows.Add("An ongoing education process enables people to deal effectively with the evolving business environments.*", 1, 0, 1);
		dt.Rows.Add("The company establishes and enforces standards for hiring the most qualified individuals, with emphasis on educational background, prior work experience, past accomplishments and evidence of integrity and ethical behavior.", 0, 4, 4);
		dt.Rows.Add("Recruiting practices which include formal, in-depth employment interviews and informative insightful presentations on an entity's history, culture and operating style demonstrate the entity's commitment to its employees and its attitude toward a sound control environment.", 1, 0, 1);
		dt.Rows.Add("Training policies communicate prospective roles and responsibilities and illustrate expected levels of performance and behavior.", 0, 3, 3);
		dt.Rows.Add("Rotation of personnel and promotions driven by periodic performance appraisals demonstrate the entity's commitment to the advancement of qualified personnel to higher levels of responsibility.", 0, 4, 4);
		dt.AcceptChanges();
		return dt;
	}	

	void tChart1_GetAxisLabel(object sender, Steema.TeeChart.GetAxisLabelEventArgs e)
	{
		//ProcessLabel(e.LabelText);
	}

	private static string ProcessLabel(string label)
	{
		string LsLabelText = label;

		string LsExtnString = "...";
		int LiLabelLength = 30;

		// If the label length is greater than the configured value
		if (LsLabelText.Length > LiLabelLength)
		{
			LsLabelText = LsLabelText.Substring(0, LiLabelLength - LsExtnString.Length);
			LsLabelText += LsExtnString;
		}

		return LsLabelText;
	}