Ось X диаграммы ASP.Net, показывающая вводящие в заблуждение метки даты

У меня есть прямая столбчатая диаграмма с 4 рядами на ней,% по оси Y и DateTime по оси X. Все работает нормально, за исключением того, что маркировка оси X и отметки интервалов неверны (ну, вводят в заблуждение). Первый кластер столбцов - это данные за январь, однако диаграмма помещает кластер непосредственно поверх метки февраля. Линия интервала (это правильное имя?) Тоже не помогает, так как она проходит через кластер данных января, из-за чего создается впечатление, что столбцы 1 и 2 находятся в январе, а столбцы 3 и 4 - в феврале. Используемые данные запускаются с С января по июль, апрель пропущен (намеренно), однако график показывает, что он длится с февраля по август без мая.

Изворотливая диаграмма

Данные Правильные данные

Итак, мои вопросы: как я могу центрировать кластеры столбцов в их собственном интервальном разделе с правильной меткой месяца на оси X непосредственно под ним? Я могу даже жить без линии интервала, пока правильный месяц отображается под правильными данными.

Я пробовал эту диаграмму со сплайнами, линиями и без какого-либо форматирования, и все они имеют одну и ту же проблему. Помощь. Сегодня пятница, и я хочу это исправить, чтобы пойти в паб.

Обновление: по запросу - код:

        // set Y axix range
        Chart1.ChartAreas["ChartArea1"].AxisY.Minimum = 0;
        Chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 100;

        // show y line every x%
        Chart1.ChartAreas[0].AxisY.Interval = 10;

        // Set axis title
        Chart1.ChartAreas["ChartArea1"].AxisX.Title = "Period";
        Chart1.ChartAreas["ChartArea1"].AxisY.Title = "Percentage (%)";

        // set the x axis date format to short month and year
        Chart1.ChartAreas[0].AxisX.IsLabelAutoFit = false;
        Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MMM \n yyyy";

        // The legend
        Chart1.Legends.Add("Default");
        Chart1.Legends["Default"].Docking = Docking.Bottom;
        Chart1.Legends["Default"].Alignment = StringAlignment.Center;

        // load the template for the basic styles
        Chart1.Serializer.IsResetWhenLoading = false;
        Chart1.LoadTemplate("SkyBlue.xml");

и отметьте:

<asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1"
        Width="600px">
        <Series>
            <asp:Series Name="thing1" XValueMember="Period"
                YValueMembers="thing1">
            </asp:Series>
            <asp:Series ChartArea="ChartArea1" Name="Team" XValueMember="Period"
                YValueMembers="thing2">
            </asp:Series>
            <asp:Series ChartArea="ChartArea1" Name="Systems" XValueMember="Period"
                YValueMembers="thing3">
            </asp:Series>
            <asp:Series ChartArea="ChartArea1" Name="Env" XValueMember="Period"
                YValueMembers="thing4">
            </asp:Series>
        </Series>
        <ChartAreas>
            <asp:ChartArea Name="ChartArea1">
            </asp:ChartArea>
        </ChartAreas>
    </asp:Chart>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:myConnString %>"
        SelectCommand="mySP"
        SelectCommandType="StoredProcedure">
        <SelectParameters>
            <asp:Parameter DefaultValue="1" Name="ID" Type="Int32" />
        </SelectParameters>
    </asp:SqlDataSource>

person JimGinhio    schedule 17.08.2012    source источник
comment
Можете ли вы показать код, например, как вы привязываете его к элементу управления диаграммой?   -  person shradha    schedule 18.08.2012
comment
Ага - только что добавил.   -  person JimGinhio    schedule 20.08.2012
comment
У вас есть как asp.net, так и winforms, ясно перечисленные, это asp.net. Я удалил тег WinForms.   -  person Joe Johnston    schedule 27.08.2012


Ответы (2)


диаграмма помещает кластер непосредственно поверх метки февраля.

Не совсем! Посмотрите на данные, а затем внимательно посмотрите на диаграмму. Первая строка датирована 31 Jan, и центр группы столбцов, правильно, находится чуть левее (т. Е. Непосредственно перед) Feb. Точно так же второй кластер - из данных, датированных 28 Feb, центрируется слева от отметки оси Mar.

Как я могу центрировать кластеры столбцов в их собственном интервальном разделе с правильной меткой месяца на оси X непосредственно под ним

Убедитесь, что данные, которые вы передаете на диаграмму, соответствуют данным, которые вы хотите нанести на график. Если вы хотите работать целыми месяцами, сделайте так, чтобы в ваших данных были только точные месяцы - если у вас были такие данные, как

Date        Thing1  Thing2
01-01-2012   100     200
01-02-2012   200     200
01-03-2012   300     300

ваша диаграмма будет именно такой, какой вы хотите.

Ключ в том, чтобы понять, что просто говоря

Chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MMM \n yyyy";

не изменяет базовые данные от «полной» даты, он просто изменяет выходной формат оси.

person AakashM    schedule 20.08.2012

Установите для свойства Interval в теге LabelStyle значение 1, и проблема с пропуском меток будет решена; он будет помещать только те ярлыки, которые вы укажете.

Chart1-> ChartAreas-> ChartArea1-> AxisX-> LabelStyle-> Interval

Источник / Подробнее

person TheCatWhisperer    schedule 03.05.2013