2

私は現在、今年のチャートに 2011 年と 2012 年のデータの統合バージョンを表示する必要があるプロジェクトに取り組んでいます。今年のチャートは月別表示です。

これは私のデータです。手順からこのようになっているので、心配する必要はありません。

Date        Value   Coefficient
01/01/2011  15,6    0,1586
01/01/2012  17,88   0,1468
01/01/2013  11,92   0,1872
01/02/2013  1703,85 0,17
01/03/2013  1693,49 0,16
01/04/2013  1716,1  0,17
01/05/2013  1732,31 0,17
01/06/2013  1692,79 0,17
01/07/2013  1691,38 0,17

最初の 2 行が 1 年全体の集計であり、残りが月ごとに集計されていることを確認してください。[値] 列には、プライマリ Y 軸に関連付けられた列シリーズが入力されます。係数は、2 番目の Y 軸に接続された線です。

私はこのコードを持っています。これは現在、毎月の間隔ですべてが台無しになっていることを示しています:

    <asp:Chart ID="Chart4" runat="server" CssClass="Chart" BorderlineDashStyle="DashDotDot"
        Palette="Pastel" DataSourceID="ObjectDataSource2" ImageStorageMode="UseImageLocation"
        Height="650px">
        <Series>
            <asp:Series Name="value" XValueMember="date" Legend="Legend1"
                YValueMembers="value" YValueType="Double" ChartArea="ChartArea1" Color="CornflowerBlue"
                IsValueShownAsLabel="True" LabelFormat="{0:0.##}">
            </asp:Series>
            <asp:Series Name="coef" XValueMember="date" Legend="Legend1" YValueMembers="coefCost"
                YValuesPerPoint="4" XValueType="Date" Color="YellowGreen" ChartType="Line" IsValueShownAsLabel="True"
                MarkerColor="Green" MarkerStyle="Diamond" YAxisType="Secondary" YValueType="Double"
                LabelFormat="{0:0.##\%}" BorderWidth="4" ChartArea="ChartArea1">
            </asp:Series>
        </Series>
        <ChartAreas>
            <asp:ChartArea Name="ChartArea1" BackColor="Transparent" ShadowOffset="5">
                <AxisY Title="US$ / 1000">
                    <MajorGrid Enabled="False" />
                    <LabelStyle Format="{0:#,##0}" />
                </AxisY>
                <AxisX Interval="1" IntervalOffsetType="Months" IntervalType="Months">
                    <MajorGrid Enabled="False" IntervalOffsetType="Auto" IntervalType="Auto" />
                    <LabelStyle Interval="Auto" Format="{MMM/yy}" />
                    <ScaleBreakStyle Spacing="1" />
                    <ScaleView SizeType="Months" />
                </AxisX>
                <AxisX2>
                    <MinorGrid Enabled="True" />
                    <MajorTickMark Enabled="False" />
                </AxisX2>
                <AxisY2 Title="(%) Coef">
                    <MajorGrid Enabled="False" />
                </AxisY2>
            </asp:ChartArea>
        </ChartAreas>
        <Legends>
            <asp:Legend Name="Legend1" Alignment="Center" Docking="Bottom">
            </asp:Legend>
        </Legends>
        <Titles>
            <asp:Title Font="Arial Narrow, 14pt" Name="Title1">
            </asp:Title>
        </Titles>
    </asp:Chart>

ご覧のとおり、ObjectDataSource2 を設定して系列を作成し、したがってチャートを作成しています。私はすでに間隔のことなどすべてを台無しにしようとしましたが、私が望むものを達成できませんでした.

これは私がこれまでに得たものの写真です:

http://i.imgur.com/frJ22ns.png

要約すると、このグラフには、手順から戻ってきたものだけを表示する必要があります。問題が軸の間隔プロパティ (間隔は毎月、間隔 = 1 など) にあることはわかっていますが、回避策を見つけることができないようです。

誰かが似たようなことを経験していて、いくつかの指針があれば、それは素晴らしいことです!

前もって感謝します!!!

[編集]

達成する必要があるものに少し近づきました。

この写真をチェックしてください:

http://i.imgur.com/EFrjcQF.png

これを X 軸に追加しました (プロパティへの他の変更の中で、これがトリックを行ったものです)。

    <AxisX IntervalAutoMode="VariableCount" Interval="0">

...そして、それ自体で数か月を「スキップ」しています。どこに行けばいいのかわかりませんが、MSDN からダウンロードした WebSamples アプリケーションを検索しています (リンクが見つからなかったので申し訳ありません)。

4

1 に答える 1

1

さて、ここに行きます。

ObjectDataSource を使用せずにすべてを書き直すことにしました。Chart4 オブジェクトからすべてのプロパティ (すべての間隔、月ごとなど) を取り除き、コード ビハインドにすべてを書きました。それに応じて X 軸もフォーマットする必要がありました。

PS: 私はこれをよく考えていなかったので、ちょっとばかげていると感じています。見栄えもよくありませんが、3 日間連続で苦労しているので、やらなければならないでしょう。時間ができたら、リファクタリングして、よりエレガントで効率的なものにします。また、これはVB.NETで申し訳ありません。言語の選択については何も言いませんでした笑。

見てみな:

    <asp:Chart ID="Chart4" runat="server" CssClass="Chart" BorderlineDashStyle="DashDotDot" Palette="Pastel" 
                ImageStorageMode="UseImageLocation" Height="650px">
        <Legends>
            <asp:Legend Name="Legend1" Alignment="Center" Docking="Bottom">
            </asp:Legend>
        </Legends>
        <Titles>
            <asp:Title Font="Arial Narrow, 14pt" Name="Title1">
            </asp:Title>
        </Titles>
    </asp:Chart>

バックエンドでは、これが私がしたことです:

    Dim date As String
    Dim value As Double
    Dim coef As Double

    Dim chartArea As New ChartArea("chartEficOp")
    chartArea.BackColor = Drawing.Color.Transparent
    chartArea.ShadowOffset = 5

    Dim valueSeries As New Series("valueY")
    valueSeries.ChartArea = "chartEficOp"
    valueSeries.Color = System.Drawing.ColorTranslator.FromHtml("#4f81bd")
    valueSeries.YAxisType = AxisType.Primary
    valueSeries.IsValueShownAsLabel = True
    valueSeries.ChartType = SeriesChartType.Column
    valueSeries.Legend = "Legend1"
    valueSeries.YValueType = ChartValueType.Double

    Dim serieEfic As New Series("valueY2")
    coefSeries.ChartArea = "chartEficOp"
    coefSeries.Color = System.Drawing.ColorTranslator.FromHtml("#9bbb59")
    coefSeries.YAxisType = AxisType.Secondary
    coefSeries.IsValueShownAsLabel = True
    coefSeries.ChartType = SeriesChartType.Line
    coefSeries.Legend = "Legend1"
    coefSeries.YValueType = ChartValueType.Double
    coefSeries.BorderWidth = 4
    coefSeries.LabelFormat = "{0:0.##\%}"

    Dim targetSerie As New Series("0,15%")
    targetSerie.ChartArea = "chartEficOp"
    targetSerie.Color = System.Drawing.Color.Red
    targetSerie.YAxisType = AxisType.Secondary
    targetSerie.IsValueShownAsLabel = False
    targetSerie.ChartType = SeriesChartType.Line
    targetSerie.Legend = "Legend1"
    targetSerie.YValueType = ChartValueType.Double
    targetSerie.BorderWidth = 2
    targetSerie.BorderDashStyle = ChartDashStyle.Dash

    Dim dt as DataTable = <called  the stored proc here>

    For Each item As DataRow In dt.Rows

        date = String.Format("{0:MMM/yy}", item("DATA"))

        Select Case <date here, to sort the x-label out>

            Case "01/01/2013"

                If date = "jan/11" Then
                    date = "2011"
                ElseIf date = "jan/12" Then
                    date = "2012"
                End If

            Case "01/01/2012"
                If date = "jan/11" Then
                    date = "2011"
                End If

        End Select

        value = item("VALUE")
        coef = item("COEF")

        valueSeries.Points.AddXY(date, value)
        coefSeries.Points.AddXY(date, coef)
        targetSerie.Points.AddXY(date, 0.15)

    Next

    Chart4.ChartAreas.Add(chartArea)

    Chart4.Series.Add(valueSeries)
    Chart4.Series.Add(coefSeries)
    Chart4.Series.Add(targetSerie)

    Chart4.ChartAreas(0).AxisX.MajorGrid.Enabled = False
    Chart4.ChartAreas(0).AxisX.Interval = 1

    Chart4.ChartAreas(0).AxisY.MajorGrid.Enabled = False
    Chart4.ChartAreas(0).AxisY.Title = "US$ / 1000"

    Chart4.ChartAreas(0).AxisY2.MajorGrid.Enabled = False
    Chart4.ChartAreas(0).AxisY2.Title = "% Cost"
    Chart4.ChartAreas(0).AxisY2.Interval = 0.04

...そして結果は次のとおりです。

http://i.imgur.com/fVpXSmG.png

うまくいけば、これは将来誰かを助けるでしょう。

于 2013-09-16T21:35:52.767 に答える