• Status: Solved
• Priority: Medium
• Security: Public
• Views: 312

# VB chart with X axis in week numbers

Dear Experts,

Is it possible to set the x axis of a vb chart to week numbers.

At the moment i set the x maximum to the current week number (as an integer) and the x minimum to the current week number minus 5 with an increment of 1.

Problem is that now we have passed year end i get negative numbers.

Eg.   -3 -2 -1 0 1
Need 50 51 52 53 1

The base data (week numbers extracted from dates) i have stored in an SQL table.

All help most welcome
0
SweetingA
1 Solution

OwnerCommented:
if weeknumber < 0 weeknumber = weeknumber + 52
0

Author Commented:
I can't see how that will help when using vb charts, there are only a small number of things that i know can be set

X Axis minimum
X Axis maximum
X Axis interval

I am not sure if each interval can be set in a non sequential order

See my current code below

Dim sw as integer
Dim ew as integer
ew = DatePart(DateInterval.WeekOfYear, Date.Today, FirstDayOfWeek.Monday,
FirstWeekOfYear.FirstFourDays) + 1
sw = ew -6
ChartStopsByDate.ChartAreas(0).AxisX.Minimum = sw
ChartStopsByDate.ChartAreas(0).AxisX.Maximum = ew
ChartStopsByDate.ChartAreas(0).AxisX.Interval = 1
ChartStopsByDate.ChartAreas(0).AxisY.Minimum = 0
ChartStopsByDate.ChartAreas(0).AxisY.Maximum = 60
ChartStopsByDate.ChartAreas(0).AxisY.Interval = 10
0

Software EngineerCommented:
``````        Chart1.DataBind() ' needed here (if not called already) to be able to iterate over .Points collection
For p As Integer = 0 To Chart1.Series(0).Points.Count - 1
Dim pt As DataPoint = Chart1.Series(0).Points(p)
If pt.XValue >= sw And pt.XValue <= ew Then
' get year and week from the Thursday in each week - see http://en.wikipedia.org/wiki/ISO_week_date
pt.AxisLabel = String.Format("{0}W{1:00}", datThursday.Year, DatePart(DateInterval.WeekOfYear, datThursday, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays))
End If
Next
``````
It's basically what David suggested, just a bit extended so you shouldn't have to revise this every year regarding 52/53...

Obviously for your requirement you don't need the string.format(), only
``````pt.AxisLabel = DatePart(DateInterval.WeekOfYear, datThursday, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)
``````

PS: I may be off by a week because of the increment, you may want to use 7 * (pt.XValue - 1)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.