ASP.Net Chart X Axis显示误导性日期标签

时间:2012-08-17 17:05:42

标签: c# asp.net charts asp.net-charts

我有一个直线柱形图,上面有4个系列,Y轴上的%和X轴上的日期时间。一切正常,但X轴标记和间隔标记不正确(好,误导)。第一列列是Januarys数据,但图表将集群直接放在Feb标签的顶部。间隔线(正确的名称?)没有帮助,因为它贯穿Januarys数据集群,使其看起来像col 1& 2月份是1月份,3月份是3号和4号。使用的数据从1月到7月,Aprils缺失(故意),但是图表看起来好像是在2月到8月之间运行而5月份缺失。

Dodgy Chart

数据 Correct Data

所以我的问题是:如何将列的簇集中在它们自己的间隔部分中,并在其正下方的X轴上使用正确的月份标签?只要正确的月份显示在正确的数据下方,我甚至可以没有间隔线。

我用Splines,Lines尝试了这个图表,没有任何格式,他们都有同样的问题。救命。现在是星期五,我想把它修好,这样我就可以去酒吧了。

更新:根据要求 - 代码背后:

        // 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>

2 个答案:

答案 0 :(得分:3)

  

图表将群集直接置于Feb标签的顶部。

不完全!查看数据,然后仔细查看图表。第一行的日期为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";

不会将基础数据从“完整”日期更改,只会更改轴的输出格式。

答案 1 :(得分:0)

将LabelStyle标签中的Interval属性设置为1,将解决您跳过标签的问题;它只会放置你指定的标签。

Chart1-&GT; ChartAreas-&GT; ChartArea1-&GT; AxisX-&GT; LabelStyle-&GT;间隔

Source/More details