2

我有一个直接的柱形图,上面有 4 个系列,Y 轴上的百分比和 X 轴上的 DateTime。除了 X 轴标记和间隔标记不正确(好吧,误导)之外,一切都工作正常。第一个列集群是一月份的数据,但是图表将集群直接定位在二月标签的顶部。间隔线(这是正确的名称吗?)也没有帮助,因为它贯穿一月份的数据集群,使得它看起来像 col 1 和 2 在 1 月和 col 3 和 4 在 2 月。正在使用的数据来自一月到七月,四月不见了(故意的),但是图表使它看起来像是从二月到八月,五月不见了。

狡猾的图表

数据 正确的数据

所以我的问题是:如何将列簇集中在它们自己的间隔部分中,并在其正下方的 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>
4

2 回答 2

3

该图表将集群直接定位在二月标签的顶部。

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

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

于 2012-08-20T08:27:41.210 回答
0

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

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

来源/更多细节

于 2013-05-03T22:36:17.303 回答