2012-05-29 2 views
2

Я использую Nevron Charting Control ver.11.1.17.12 в приложении. Я столкнулся с проблемой правильного построения диаграммы с помощью DateTimeScaleConfigurator. Вот следующая проблема:Nevron BarChart с DateTimeScaleConfigurator проложил серию заговора?

  1. Ряд Бар перекрывает друг друга, если количество серий увеличивается.
  2. Серия выходит из линий оси.
  3. X Axis Scale автоматически добавляет предыдущий год December и в следующем году Jan в шкале, которая заставляет диаграмму иметь пустую область в случае диаграммы поверхности.

// фрагмент кода рисовать Bar Chart Series

NBarSeries bar = new NBarSeries(); 
bar.UniqueId = new Guid(outputVariable.UniqueId); 
bar.Name = outputVariable.LegendText; 
chart.Series.Add(bar); 
bar.HasBottomEdge = false; 
bar.MultiBarMode = chart.Series.Count == 1 ? MultiBarMode.Series : MultiBarMode.Clustered;     
// bar.InflateMargins = true; 
bar.UseZValues = false; 

indexOfSeries = chart.Series.IndexOf(bar); 
ConfigureChartSeries(bar, indexOfSeries, outputVariable); 
SetSeriesAxisInformation(bar, outputVariable.Unit); 
bar.UseXValues = true; 
foreach (DataRow row in seriesDataTable.Rows) 
{ 
    bar.XValues.Add(Convert.ToDateTime(row["TimeStamp"]).ToOADate()); 
} 

фрагмент кода для добавления Series поверхностной диаграммы

chart.Enable3D = true; 
chart.BoundsMode = BoundsMode.Stretch; 
(chart as NCartesianChart).Fit3DAxisContent = true;    
chart.Projection.SetPredefinedProjection(PredefinedProjection.OrthogonalTop); 
chart.LightModel.EnableLighting = false;     
chart.Wall(ChartWallType.Back).Visible = false; 
chart.Wall(ChartWallType.Left).Visible = false; 
chart.Wall(ChartWallType.Floor).Visible = false; 
// setup Y axis 
chart.Axis(StandardAxis.PrimaryY).Visible = false;     
// setup Z axis 
NAxis axisZ = chart.Axis(StandardAxis.Depth); 
axisZ.Anchor = new NDockAxisAnchor(AxisDockZone.TopLeft); 
NLinearScaleConfigurator scaleZ = new NLinearScaleConfigurator(); 
scaleZ.InnerMajorTickStyle.Visible = false; 
scaleZ.MajorGridStyle.ShowAtWalls = new ChartWallType[0]; 
scaleZ.RoundToTickMin = false; 
scaleZ.RoundToTickMax = false; 
axisZ.ScaleConfigurator = scaleZ; 
axisZ.Visible = true; 

// add a surface series 
NGridSurfaceSeries surface = new NGridSurfaceSeries(); 
surface.UniqueId = new Guid(outputVariable.UniqueId); 
surface.Name = outputVariable.LegendText; 
chart.Series.Add(surface); 
surface.Legend.Mode = SeriesLegendMode.SeriesLogic; 
surface.ValueFormatter = new NNumericValueFormatter("0.0"); 
surface.FillMode = SurfaceFillMode.Zone; 
surface.FrameMode = SurfaceFrameMode.Contour; 
surface.ShadingMode = ShadingMode.Flat; 
surface.DrawFlat = true; 
// Already set this property to false and working in other chart. 
surface.InflateMargins = false;      
surface.FrameColorMode = SurfaceFrameColorMode.Zone; 
surface.SmoothPalette = true; 
surface.Legend.Format = "<zone_value>"; 
surface.FillMode = SurfaceFillMode.Zone; 
surface.FrameMode = SurfaceFrameMode.Contour; 
CreateSurfaceSeries(outputVariable, surface); 
chartControl.Refresh(); 

и конфигурация ScaleConfigurator

chartPrimaryXAxis = chart.Axis(StandardAxis.PrimaryX); 
// X Axis Configuration 
dateTimeScale = new NDateTimeScaleConfigurator(); 
dateTimeScale.Title.Text = string.Empty; 
dateTimeScale.LabelStyle.Angle = new NScaleLabelAngle(ScaleLabelAngleMode.Scale, 90); 
dateTimeScale.LabelStyle.ContentAlignment = ContentAlignment.MiddleLeft; 
dateTimeScale.LabelStyle.TextStyle.FontStyle = new NFontStyle("Times New Roman", 6); 
dateTimeScale.LabelFitModes = new LabelFitMode[] { LabelFitMode.AutoScale }; 
chartPrimaryXAxis.ScaleConfigurator = dateTimeScale; 
chartPrimaryXAxis.ScrollBar.ResetButton.Visible = true; 
chartPrimaryXAxis.ScrollBar.ShowSliders = true; 
dateTimeScale.EnableUnitSensitiveFormatting = true; 

Вот генерируемый вывод: Bar Chart Out of Axis Labels

prevent to show previous and next year in scale

Любая идея относительно этой проблемы будет глубоко признателен.

Заранее спасибо.

ответ

1

Серия Бар перекрывает друг друга, если количество серий увеличивается.
&

Серия бар выходит из линий осей.

Ответ: При использовании категориальных данных, то использовать NOrdinalScaleConfigurator вместо NDateTimeScaleConfigurator. Это не решит проблему и поместит серию в центр шкалы и автоматически изменит ее размер в соответствии с размером диаграммы.

Ось X Scale автоматически добавить предыдущий год декабря и в следующем году янв в масштабах, которые вызывают график, чтобы иметь пустое место в случае Chart Surface.

Ответ: Установите следующие свойства DateTimeScaleConfigurator к ложным, чтобы избежать такого поведения.

dateTimeScale.RoundToTickMax = false; 
dateTimeScale.RoundToTickMin = false; 
Смежные вопросы