2013-09-16 2 views
2

현재이 차트에 2011 년 및 2012 년 데이터의 통합 버전을 표시해야하는 프로젝트를 진행 중입니다. 올해의 차트는 월별로 표시됩니다..NET 차트 클래스 - 같은 차트에 다른 종류의 간격을 표시하는 방법

이것은 내 데이터입니다. 이 과정에서 다음과 같이오고, 그래서이 걱정 :

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 

은 처음 두 행이 전체 년의 통합, 그리고 월별 나머지 달 것을 참조하지 않습니다. 값 열은 기본 Y 축에 연결된 열 계열을 채 웁니다. 계수는 보조 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 응용 프로그램 (링크를 찾을 수 없으므로 죄송합니다)을 통해 검색하고 있습니다. 아마도 거기에 뭔가가있을 수 있습니다.

+0

거의 모든 업무 일에이 작업을 마친 후 드디어 해결 방법을 찾았습니다. 내일 마지막 결과를 게시 할 것입니다. – cr0ss

답변

1

음, 여기 있습니다.

ObjectDataSource를 사용하지 않고 모든 것을 다시 작성하기로 결정했습니다. Chart4 객체 (모든 간격, 매월 물건 및 이것 저것)에서 모든 속성을 가져 와서 코드의 모든 것을 작성했습니다. 나는 또한 X 축을 적절하게 포맷해야했다.

추신 : 내가 생각하기에는 멍청한 생각인데, 생각하지 못했고,보기 흉하게 들렸지 만, 3 일 동안 똑바로 고생하고 있었기 때문에,해야 할 일이 있습니다. 일단 시간이 있으면, 나는 다시 요소를주고 우아하고 효율적으로 만들 것입니다. 또한, 나는 이것이 VB 인 것을 유감스럽게 생각합니다.NET, 나는 언어의 선택에 대한 말을하지 않았다.

하면 체크 아웃 :

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 

을 ... 그 결과가 있었다 :

백 엔드에
<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> 

이 내가 무슨 짓을

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

희망 사항은 향후 누군가를 도울 것입니다.

관련 문제