cant see last label on bottom axis

TeeChart for Microsoft Visual Studio .NET, Xamarin Studio (Android, iOS & Forms) & Monodevelop.
Post Reply
rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

cant see last label on bottom axis

Post by rino » Mon Mar 14, 2011 3:35 pm

In this small demo I try to create a chart with three labels
the last one is not visible .
I only see 2 labels on the x axis label1 and label 2.

this.tChart1.Aspect.View3D = false;
this.tChart1.Axes.Bottom.MinorTicks.Visible = false;
tChart1.Legend.Alignment = LegendAlignments.Bottom;
Series s1 = new Line();
tChart1.Series.Add(s1);
s1.Title = "Series1";
Line s2= new Line();
s2.Title = "Series 2";
tChart1.Series.Add(s2);
for (int i = 0; i < 3;i++ )
{
s2.Add(i * 10, "label" + i.ToString());
s1.Add(i * 20, "label" + i.ToString());
}

any idea why
Thanks.

Also , I noticed that in 3D if the last label name is long then it is cut on the right side.
Actually our problem in our application is that we do have 2D chart with 2 labels , one at x = 0 and one at the end of the x axis , we do see both of them but the second one is cut .
I tried to reproduce this in a standalone application (see above ) but for some reason in 2D I dont even get the last label.

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Tue Mar 15, 2011 12:11 pm

Hello rino,

I couldn't reproduce your problem using last maintenance release and your example code, and all labels appears in my chart as you can see in next image:
Chart1.jpg
Chart1.jpg (43.37 KiB) Viewed 11449 times
Could you tell us which version of TeeChart are you using?
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Tue Mar 15, 2011 1:40 pm

Hi Sandra
Im using version 4.0.2011.2082
But actually , the defect I have in our real application is that the last label is visible but cut at the right side.
in your demo , if you try and make the last label , something longer , for example " very long label 2" , you will see that it will be cut.
This is the defect I am trying to fix.

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Tue Mar 15, 2011 1:54 pm

Hi Sandra
I just did a test and noticed that the last label can disappear and appear and it depending on the size of the chart.
I docked the chart in a window and I played with the size of the window.
Sometimes the last label disappears and then it reappears. so its just a matter of what size the chart actually is .
In anycase , when it does appear the last label is cut to the right if its not short ("long label 3") for example.

SO there are two seperate issues.
1. The last label doesnt always show (depends on the exact size , its nothing to do with a minimum size , I can make a window smaller and it can disapppear and suddenly appear a gain during the shrinking)
2. The last label is cut if its long.

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Wed Mar 16, 2011 12:45 pm

Hello rino,
1. The last label doesnt always show (depends on the exact size , its nothing to do with a minimum size , I can make a window smaller and it can disapppear and suddenly appear a gain during the shrinking)
I have modified your code:

Code: Select all

     Steema.TeeChart.Styles.Line series1,series2;
        private void InitializeChart()
        {
            //Chart
            tChart1.Dock = DockStyle.Fill;
            this.tChart1.Aspect.View3D = false;
            this.tChart1.Axes.Bottom.MinorTicks.Visible = false;
            tChart1.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom;
            //Series
            series1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            series2 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            tChart1.Panel.MarginRight = 10;
            series1.Title = "Series1";
            series2.Title = "Series2";
            for (int i = 0; i < 3; i++)
            {
                series1.Add(i * 10, "long label 3" + i.ToString());
                series2.Add(i * 20, "long label 3" + i.ToString());
            }
        }
and I have gotten next image:
Chart1Label.jpg
Chart1Label.jpg (18.18 KiB) Viewed 11333 times
Could you tell us if your problem appears in previous image? If your problem is it I suggest you change the label angle as do in below lines:

Code: Select all

tChart1.Axes.Bottom.Labels.Angle = 90;
2. The last label is cut if its long.
You can try to increase Margin Right of Chart as do in next line of code:

Code: Select all

 tChart1.Panel.MarginRight = 10;
I hope will helps.

Thanks,
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Thu Mar 17, 2011 12:14 pm

Hi Sandra
I cannot make the angle 90 , becuase we want the graph to remain the same hieght
regarding the margin , the problem is I dont know in advance what the label name will be so I need to resize the margin dynamically , which I am not sure how to do so I can I know how much margin to give.
Dont you consider this a bug ? because I would expect the label to shift to the left if it doesnt fit in .
Thanks

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Thu Mar 17, 2011 3:23 pm

Hello rino,
I have added your request in wish-list with number[TF02015450] to be considered inclusion it in next maintenance releases of TeeChart.Net.On the other hand, I have made a simple code that you can use as workaround:

Code: Select all

 Steema.TeeChart.Styles.Line series1, series2;
        private void InitializeChart()
        {
            //Chart
            tChart1.Dock = DockStyle.Fill;
            this.tChart1.Aspect.View3D = false;
            this.tChart1.Axes.Bottom.MinorTicks.Visible = false;
            tChart1.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom;
            //Series
            series1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            series2 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            //tChart1.Panel.MarginRight = 10;
            series1.Title = "Series1";
            series2.Title = "Series2";
            for (int i = 0; i < 3; i++)
            {
                series1.Add(i * 10, "long label 3" + i.ToString());
                series2.Add(i * 20, "long label 3" + i.ToString());
            }
            tChart1.AfterDraw += new Steema.TeeChart.PaintChartEventHandler(tChart1_AfterDraw);
            tChart1.Draw();
        }

        void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
        {
                if (series1.Labels[tChart1.Series.Count-1].Length/2 >=tChart1.Panel.MarginRight|| series2.Labels[tChart1.Series.Count-1].Length/2>=tChart1.Panel.MarginRight)
                {
                    tChart1.Panel.MarginRight = series1.Labels[tChart1.Series.Count-1].Length / 2 + tChart1.Panel.MarginRight;
                }      
        }
Could you tell us, if previous code works as you expected?

I hope will helps.

Thanks,
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Sun Mar 20, 2011 7:13 am

Hi Sandra
thanks for the reply
No , this doesnt work , and I assume that its simply because I dont think there is any connection between Label length and the Margin units
whats the point of measuring the length of the label string , its not the same units as the margin is it. ?
label length represents of characters in the label string , while Margin units i assume is something else

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Mon Mar 21, 2011 10:13 am

Hello rino,

You are right. Numbers of characters are not the same units as MarginUnits. I have made, other code that uses width of bottom labels and PanelMarginsUnits as pixels, and this works fine for me.

Code: Select all

        Steema.TeeChart.Styles.Line series1, series2;
        private void InitializeChart()
        {
            //Chart
            tChart1.Dock = DockStyle.Fill;
            this.tChart1.Aspect.View3D = false;
            this.tChart1.Axes.Bottom.MinorTicks.Visible = false;
            tChart1.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom;
            //Series
            series1 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            series2 = new Steema.TeeChart.Styles.Line(tChart1.Chart);
            //tChart1.Panel.MarginRight = 10;
            series1.Title = "Series1";
            series2.Title = "Series2";
            for (int i = 0; i < 3; i++)
            {
                series1.Add(i * 10, "long label 323253" + i.ToString());
                series2.Add(i * 20, "long label 323253" + i.ToString());
            }
            tChart1.Panel.MarginUnits = Steema.TeeChart.PanelMarginUnits.Pixels;
            tChart1.AfterDraw += new Steema.TeeChart.PaintChartEventHandler(tChart1_AfterDraw);
            tChart1.Draw();
        }

        void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
        {
            if (tChart1.Axes.Bottom.Labels.Width / 2 >= tChart1.Panel.MarginRight)
            {  
                tChart1.Panel.MarginRight = (tChart1.Axes.Bottom.Labels.Width/2)+tChart1.Panel.MarginRight;
                tChart1.Panel.MarginLeft = (tChart1.Axes.Bottom.Labels.Width / 2) + tChart1.Panel.MarginLeft;       
            }
        }
Could you tell us if previous code works as you want?

I hope will helps.
Thanks,
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Tue Mar 22, 2011 4:11 pm

Hi Sandra
your last code seems to do the correct calculation however it doesnt have effect the first time.
it only works after a second draw of the chart is done, the changes in afterDraw , do not cause the chart to repaint itself , so only when the chart is drawn again will the changes in the margin have effect.
This should be calculated sometime before the draw is performed,

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Wed Mar 23, 2011 11:29 am

Hello rino,

In this case, use tChart1.Draw() is necessary, because you must repaint chart if you want sizes have a correct value and you can use it correctly.

Thanks,
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

rino
Newbie
Newbie
Posts: 26
Joined: Wed May 23, 2007 12:00 am

Re: cant see last label on bottom axis

Post by rino » Wed Mar 23, 2011 3:36 pm

You mean to call Draw from within the AfterDraw event . isnt this a little awkward ?

Also , what is the difference between Draw and Refresh ? which is better.

Sandra
Site Admin
Site Admin
Posts: 3132
Joined: Fri Nov 07, 2008 12:00 am

Re: cant see last label on bottom axis

Post by Sandra » Wed Mar 23, 2011 4:02 pm

Hello rino,
You mean to call Draw from within the AfterDraw event . isnt this a little awkward ?
Sorry, I think that I don't explain good. In my code there is a tChart.Draw() in the InititializeChart(), because could repaint chart to achieve the correct values of width of labels shape.
Draw Method:
Paints the Chart internally to calculate Chart values that would otherwise be calculated only when the Chart is actually Painted to the screen.
Refresh Method:
Forces the control to invalidate its client area and immediately redraw itself and any child controls.

In your case its better Draw Method so you need the Chart values.

Thanks,
Best Regards,
Sandra Pazos / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply