Page 1 of 3

Dates Range on the bottom axis - properties

Posted: Mon Feb 15, 2010 7:22 am
by 9092401
Hello,

I have a chart that the bottom axis is dates range .I set the "Increment" property to show days, but sometimes when the range is too big and it may include 2-3 months. In this case the chart don't show some of the days since we don't have enough space. How can we make the chart to show always the first and the last day in the given range?

Can you please tell me what property to change in order to show always the first and the last date of the range in the bottom axis.

Thanks
Kety

Re: Dates Range on the bottom axis - properties

Posted: Mon Feb 15, 2010 9:50 am
by 10050769
Hello gcrnd,

I made a simple example of dateTime that you can use in your application, please check next code works as you want.

Code: Select all

 public Form1()
        {
            InitializeComponent();
            InitializeChart();
        }
        private Steema.TeeChart.Styles.Bar bar1;
        private void InitializeChart()
        {
            bar1 = new Steema.TeeChart.Styles.Bar(tChart1.Chart);
            Random rnd = new Random(); 
            DateTime today = DateTime.Today; 
            TimeSpan oneDay = TimeSpan.FromDays(15); 
            bar1.XValues.DateTime = true;
            for (int i = 1; i <= 25; ++i)
            {
                bar1.Add(today, rnd.Next(100), Color.Red);
                today += oneDay;
            }
            tChart1.Axes.Bottom.Labels.Angle = 90;
            Steema.TeeChart.Axis bottomAxis = tChart1.Axes.Bottom; 
            bottomAxis.Increment = Steema.TeeChart.Utils.GetDateTimeStep(Steema.TeeChart.DateTimeSteps.TwoDays);
 
        }
I hope will helps.

Thanks.

Re: Dates Range on the bottom axis - properties

Posted: Thu Feb 18, 2010 4:04 pm
by 9092401
Hi Sandra,

My code is similar to your bu in the increment property I set it to one day.
If the range of the data is a few days - it works ok , since it show me all the days.

The problems is when the range have data from dates of a few month.
Then I see only part of the dates since we don't have enough space.
I want set the chart properties to display always the first and the last day in the range

Thanks
Kety

Re: Dates Range on the bottom axis - properties

Posted: Fri Feb 19, 2010 9:34 am
by 10050769
Hello Kety,

I think that you should customize that using the GetNextAxisLabel event as shown in the examples on those threads:

http://www.teechart.net/support/viewtopic.php?t=8392
http://www.teechart.net/support/viewtopic.php?t=4552

Hope this helps.

Thanks,

Re: Dates Range on the bottom axis - properties

Posted: Mon Feb 22, 2010 2:52 pm
by 9092401
Hi,

They have a different problem then mine, in the other case they have always the problem.
In mine case it appears only when the range is large ( not related to offset) and there is no place to draw all the legends.
You can see in attachments 1.bmp (the first day do not appears in the bottom axis) and in 2.bmp (it is OK)
My code is per day, since I want to see the date format in days:
m_thresholdValuesChart.Axes.Bottom.Increment = Steema.TeeChart.Utils.GetDateTimeStep(Steema.TeeChart.DateTimeSteps.OneDay);
m_thresholdValuesChart.Axes.Left.Increment = 1;
m_thresholdValuesChart.Axes.Left.Labels.ValueFormat = "0";

Re: Dates Range on the bottom axis - properties

Posted: Mon Feb 22, 2010 2:53 pm
by 9092401
1.JPG
1.JPG (22.37 KiB) Viewed 21412 times
2.JPG
2.JPG (17.18 KiB) Viewed 21408 times

Re: Dates Range on the bottom axis - properties

Posted: Tue Feb 23, 2010 9:39 am
by 10050769
Hello gcrnd,
In mine case it appears only when the range is large ( not related to offset) and there is no place to draw all the legends.
You can see in attachments 1.bmp (the first day do not appears in the bottom axis) and in 2.bmp (it is OK)
In that case, and as mentioned on the threads I pointed, we recommend using custom axis labels. You may also be interested on reading the thread below which covers most possibilities about label customization. Please notice it's a multiple page thread and what you are looking for may not appear in first pages http://www.teechart.net/support/viewtop ... f=4&t=2989


Thanks,

Re: Dates Range on the bottom axis - properties

Posted: Tue Feb 23, 2010 2:52 pm
by 9092401
Hi ,

I tied to use custom axis labels,this mean that we need to add manually the labels.
I have a new problem , I want to add the label only if I have enough space in the bottom axis.
How can I recognize this case.I want to add a new label, only if it is not interfere on the previous label.
(see the attachment in this case the new label is paint on top of the previous label).
(my code is :
m_thresholdValuesChart.Axes.Bottom.Labels.Items.Clear();

for (int i = 0; i < m_grid.DataSet.Count; i++)
{
IThresholdValue thresholdValue = (IThresholdValue)m_grid.DataSet;
m_thresholdValuesChart.Axes.Bottom.Labels.Items.Add(m_warningSeries.XValues,
thresholdValue.Date.ToShortDateString());
}
)
3.JPG
3.JPG (28.93 KiB) Viewed 21398 times
Thanks

Re: Dates Range on the bottom axis - properties

Posted: Tue Feb 23, 2010 3:41 pm
by yeray
Hi qcrnd,

In the first page in the thread that Sandra pointed to you in the last post there is an example from Narcís where tries to avoid overlapping. Here is what was suggested on that post:

24 Oct 2005 15:08
Narcís wrote:Hello everyone,

You could implement something like the code below in the OnAfterDraw event and do what you want when labels overlap.

Code: Select all

		private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
		{ 			
			tChart1.Header.Text="";

			Steema.TeeChart.AxisLabelItem CurrentLabel, PreviousLabel;	
			for (int i=1; i<tChart1.Axes.Left.Labels.Items.Count; ++i)
			{ 
				CurrentLabel = tChart1.Axes.Left.Labels.Items[i];
				PreviousLabel = tChart1.Axes.Left.Labels.Items[i-1];

				tChart1.Header.Text=tChart1.Header.Text+" "+CurrentLabel.Top.ToString();

				if (CurrentLabel.Top+CurrentLabel.Height == PreviousLabel.Top)
				{
					CurrentLabel.Visible=false;
				}
			}
		}

Re: Dates Range on the bottom axis - properties

Posted: Wed Feb 24, 2010 7:27 am
by 9092401
Hi ,

I try to use the example that you send me and to change it for the bottom axis?(in the example we have the left axis) , but it seems that I am not taking the location of the labels correctly.
My code is the following :
private void OnChartAfterDraw(object sender, Graphics3D g)
{
Steema.TeeChart.AxisLabelItem CurrentLabel, PreviousLabel;
PreviousLabel = m_thresholdValuesChart.Axes.Bottom.Labels.Items[0];
for (int i = 1; i < m_thresholdValuesChart.Axes.Bottom.Labels.Items.Count; ++i)
{
CurrentLabel = m_thresholdValuesChart.Axes.Bottom.Labels.Items;
if (CurrentLabel.Left< PreviousLabel.Left + PreviousLabel.Height)
{
CurrentLabel.Visible = false;
}
else
{
CurrentLabel.Visible = false;
PreviousLabel = CurrentLabel;
}
}
}
I get negative values for "CurrentLabel.Left" and "PreviousLabel.Left".

Thanks

Re: Dates Range on the bottom axis - properties

Posted: Wed Feb 24, 2010 10:39 am
by 10050769
Hello gcrnd,

Please, you could modify your code as next example and check if it works as you want. If you don’t like solution or doesn’t work correctly, please send us a simple project, because we can reproduce exactly issue here and help to solve it.

Code: Select all

           private Steema.TeeChart.Styles.Bar bar1;
        private void InitializeChart()
        {
            tChart1.Aspect.View3D = false;
            tChart1.Dock = DockStyle.Fill;
            bar1 = new Steema.TeeChart.Styles.Bar(tChart1.Chart);
            bar1.Marks.Visible = false;
            Random rnd = new Random();
            DateTime today = DateTime.Today;
            TimeSpan oneDay = TimeSpan.FromDays(1);
            bar1.XValues.DateTime = true;
            for (int i = 1; i <= 55; ++i)
            {
                bar1.Add(today, rnd.Next(100), Color.Red);
                today += oneDay;
            }
            tChart1.Axes.Bottom.Labels.Items.Clear();
            for (int i = 0; i <bar1.Count ; i++)
            {
                tChart1.Axes.Bottom.Labels.Items.Add(bar1.XValues[i], DateTime.FromOADate(bar1.XValues[i]).ToShortDateString());                
            }

            tChart1.Axes.Bottom.Labels.Angle = 90;
            tChart1.Axes.Bottom.Increment = Steema.TeeChart.Utils.GetDateTimeStep(Steema.TeeChart.DateTimeSteps.OneDay);
            tChart1.AfterDraw +=new Steema.TeeChart.PaintChartEventHandler(tChart1_AfterDraw);
            tChart1.Draw();

        }
        private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
        {
            tChart1.Header.Text = "";
            Steema.TeeChart.AxisLabelItem CurrentLabel, PreviousLabel;
            for (int i = 1; i < tChart1.Axes.Bottom.Labels.Items.Count; ++i)
            {               
                CurrentLabel = tChart1.Axes.Bottom.Labels.Items[i];
                PreviousLabel = tChart1.Axes.Bottom.Labels.Items[i - 1];
                if (CurrentLabel.Left+CurrentLabel.Height == PreviousLabel.Left)
                {
                    CurrentLabel.Visible = false;
                }
            }
        }
I hope will helps.

Thanks,

Re: Dates Range on the bottom axis - properties

Posted: Thu Feb 25, 2010 3:28 pm
by 9092401
Hi

See the attache project example in order to reproduce the problem.
When we enlarge the dialog the dates are ok , when we change the dialog to small size the dates are not clear.

Thanks

Re: Dates Range on the bottom axis - properties

Posted: Fri Feb 26, 2010 10:08 am
by 10050769
Hello gcrnd,

Please, see this thread where there are explained everything must be done to solve the problem of overlapping axis labels. I recommend to go concretely at third, fourth and fifth pages.

Those examples look if overlapping labels and paint as much as possible without being over-write. If you want to paint all labels you must do the range of the chart axes smaller or larger chart as being done in thread examples.



Thanks,

Re: Dates Range on the bottom axis - properties

Posted: Sun Feb 28, 2010 8:56 am
by 9092401
Hi

Maybe I misunderstand the solution, but how the "gauge" property is related the my problem?
As you see in the example that I send you , I want to know on "OnChartAfterDraw" method ,which label to set to visible and which to set to be invisible.
On resizing it will be change -because it depends if I have enough space to draw all the label.The only problem is that I don't know to check if the new label will be paint on top of the previous or a new location on the screen.

Re: Dates Range on the bottom axis - properties

Posted: Mon Mar 01, 2010 9:15 am
by 10050769
Hello gcrnd,

Sorry!
I apologize for my confusion; I have suggested an incorrect thread.Please see this thread now if that is correct.

Thanks,