Ответ 1
Да, я согласен с Майклом. Я могу только добавить объяснение в этот момент.
Установив свой интервал:
myStripLine1.IntervalOffset = 4
Вы гарантируете, что ваши значения по оси X будут отображаться только на частоте 4 "общих значений оси x":
Установка этого значения в шкалу до 1 даст значение для каждого значения оси x, которое увеличивается в виде целого числа (в этом случае дней)
chart.ChartAreas(0).AxisX.Interval = 1
И чтобы объявить значения оси x:
DateTimeIntervalType.Days
'Declaration
Public Sub Add( _
labelsStep As Double, _
intervalType As DateTimeIntervalType, _
format As String _
)
End Sub
chart.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days
'which as shown in Michael answer is parsed to string.
Dim format as String = "MM.dd.yyyy"
Dim actualDate as Date = Date.ParseExact(yourDate, format)
Как упоминал Майкл в своем комментарии. Установив
mySeries.XValueIndexed = True
Каждое индексированное значение оси X будет нанесено на график.
Как поясняется в следующей цитате, с предоставленной ссылкой.
Каждая точка данных в серии имеет значения X и Y, которые определяют ее положение в области построения графика. В некоторых диаграммах значение X точек не имеет значения и не обязательно должно предоставляться. В этом случае точечные позиции в области графика определяются только их точечным индексом (т.е. Их расположением в коллекции точек) и их значениями Y.
Когда значения X "индексируются", для определения положения точек вдоль категориальной (X) оси используется индекс точки данных, а не значение точки X. Например, на рисунке 1 ниже показаны две диаграммы, отображающие одни и те же данные. Однако на первом графике используются неиндексированные значения X, поэтому значения X этих точек определяют их местоположение вдоль оси x. Второй график индексируется, поэтому его точечные индексы используются для определения их положения вдоль оси х. В этом случае значения X используются только для меток оси, и не более того.
http://support2.dundas.com/onlinedocumentation/winchart2005/Data_IndexedXValues.html
Я получил исходную информацию относительно интервалов и интервальных смещений на следующем сайте:
http://support2.dundas.com/Default.aspx?article=705
Здесь он обсуждает тип данных и решает проблему выделенных значений.
В каждую дату новая точка вводится для всех серий, но выделяются только те точки, где они имеют важные значения.
Например, предположим, что вы хотите создать повторно возникающую StripLine для выделения выходных дней. Вы устанавливаете интервал 7 и его тип в "Дни". Поскольку первым пунктом является воскресенье, вы устанавливаете значение IntervalOffset равным 6 (означает 6-й день недели) и его тип в Days. В результате диаграмма не отображает первую StripLine.
Это объяснение для установки интервала.
Хорошее эмпирическое правило, которое следует придерживаться при использовании свойств Interval и IntervalOffset на Диаграмме, заключается в том, что IntervalOffset должен быть более низкой величиной интервала, чем интервал (т.е. интервальные дни/интервалOffset Hour, интервал Years/IntervalOffset Months и т.д.).
Я добавил эти источники:
- Для справки
- Чтобы показать, что я также провел свое исследование после выяснения проблемы, как указано в моих комментариях выше.
Флориан, можете ли вы показать код для меток, свойств и т.д. оси x? - yvytty вчера
Вы когда-нибудь рассматривали компоненты компоновки сторонних разработчиков, такие как ZedGraph? Скорее всего, такие небольшие оговорки уже покрыты там. Дать ему шанс! - вчера неолиск
В ответ на ZedGraph я посоветовал:
И: После просмотра кода
Привет, я могу уточнить, ХОТИТЕ, чтобы ежедневно составлять значения? Я думаю, что у меня есть ваше решение, просто нужно уточнить, у вас есть все инструменты в vb.net
@yvytty, нет, даты не обязательно должны быть ежедневно, также не может быть никакой ценности в течение длительного времени, и я не хочу большого диапазона в моей диаграмме, где нет данных. Фактически, я мог бы также написать некоторый образец текста по значениям оси X, даты только путают. Основная проблема заключается в том, что диаграмма VB каким-то образом вычисляет очень большой запас по этим описаниям на оси X
Он не показывает, что вы отформатировали строку даты и даты. Также необходимо учитывать, что вы не используете формат даты в США (я в Австралии, поэтому мы имеем тот же формат, что и вы). Тип даты по умолчанию - en-US.
Обратитесь к DateTime.ParseExact
Method
http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx
Я взял фрагменты из MSDN.
Dim dateString, format As String
Dim result As Date
Dim provider As CultureInfo = CultureInfo.InvariantCulture
Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
format = "ddd dd MMM yyyy h:mm tt zzz"
result = Date.ParseExact(dateString, format, provider)
См. ссылку: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
Метод DateTime.ToString(IFormatProvider) возвращает строковое представление значения даты и времени, используя краткую дату и длительность шаблона определенной культуры. В следующем примере используется метод DateTime.ToString(IFormatProvider) для отображения даты и времени с использованием шаблона короткой даты и времени для культуры fr-FR.
Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 01/03/2008 07:00:00
Пожалуйста, просмотрите эту ссылку: http://msdn.microsoft.com/en-us/library/system.datetime.aspx
Так должно получиться что-то вроде этого:
'note
Imports System.Globalization
Dim format as String = "dd.MM.yyyy"
Dim actualDate as Date = Date.ParseExact(yourDate, format, provider)
chart.ChartAreas(0).AxisX.LabelStyle.Format ="dd.MM.yyyy"
cht_main.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days
cht_main.ChartAreas(0).AxisX.Interval = 1
и
Double.Parse(grade("GRADE")
'grade is not of type double