2

Y 軸に % 、X 軸に DateTime という 4 つのシリーズがある単純な縦棒グラフがあります。X 軸のラベル付けと間隔マークが正しくないことを除いて、すべて正常に機能しています (まあ、誤解を招きます)。列の最初のクラスターは 1 月のデータですが、グラフではクラスターが 2 月のラベルのすぐ上に配置されています。間隔線 (それは正しい名前ですか?) は、1 月のデータのクラスターを通過して、列 1 と 2 が 1 月に、列 3 と 4 が 2 月にあるように見えるため、役に立ちません。 1 月から 7 月までは 4 月が欠落していますが (意図的に)、5 月が欠落している 2 月から 8 月までのように表示されます。

ドッジーチャート

データ 正しいデータ

私の質問は次のとおりです。列のクラスターを独自の間隔セクションの中央に配置し、そのすぐ下の 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

グラフは、クラスターを2月のラベルの真上に配置します。

完全ではありません!データを見てから、チャートをよく見てください。最初の行は日付が付けられ31 Janており、バークラスターの中心は正しくは左側(つまり直前)にありFebます。同様に、日付が付けられたデータからの2番目のクラスターは、軸の目盛り28 Febのすぐ左の中央に配置されます。Mar

列のクラスターを独自の間隔セクションの中央に配置し、そのすぐ下のX軸に正しい月のラベルを付けるにはどうすればよいですか。

グラフに渡すデータが、プロットするデータであることを確認してください。丸1か月で作業したい場合は、データに正確な月のみを含めるようにします。

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 に答える