コード例 #1
0
        internal Point GetAxisLabelPosition(Size desiredSize, Point originalPosition, Size textSize)
        {
            Point     point = originalPosition;
            ChartAxis axis  = (XAxis.Orientation == Orientation.Vertical) ? XAxis : YAxis;
            ChartAxis axis1 = (XAxis.Orientation != Orientation.Vertical) ? XAxis : YAxis;

            point.Y -= textSize.Height / 2;
            double left      = 0;
            var    chartAxes = Chart.Axes.Where(axes => (axes.Orientation == axis.Orientation)).Where(position => (!position.OpposedPosition));

            point.X -= axis1.ActualPlotOffset;
            if (axis.OpposedPosition)
            {
                if (chartAxes.Count() > 0)
                {
                    left = chartAxes.ElementAt(0).RenderedRect.Right;
                }
                point.X += (axis.RenderedRect.Left - left);
            }
            else
            {
                if (chartAxes.Count() > 0)
                {
                    left = chartAxes.ElementAt(0).RenderedRect.Left;
                }
                point.X -= (textSize.Width + (left - axis.RenderedRect.Left));
            }

            return(point);
        }
コード例 #2
0
        /// <summary>
        /// Updates the gridlines.
        /// </summary>
        /// <param name="axis">The Relevant Axis</param>
        /// <param name="linesRecycler">The Line Recycler</param>
        /// <param name="requiredLinescount">The Required Lines Count</param>
        /// <param name="isMajor">Check For Marjor Axis</param>
        /// <param name="checkOrginFlag">Check For Origin Flag</param>
        private static void UpdateGridlines(ChartAxis axis, UIElementsRecycler <Line> linesRecycler, int requiredLinescount, bool isMajor, bool checkOrginFlag)
        {
            if (linesRecycler == null || axis == null)
            {
                return;
            }

            foreach (var line in linesRecycler)
            {
                line.ClearValue(FrameworkElement.StyleProperty);
            }

            int totalLinesCount = requiredLinescount;

            if (axis.ShowOrigin && checkOrginFlag)
            {
                totalLinesCount += 1;
            }

            if (!linesRecycler.BindingProvider.Keys.Contains(FrameworkElement.StyleProperty))
            {
                linesRecycler.BindingProvider.Add(FrameworkElement.StyleProperty, GetGridLineBinding(axis, isMajor));
            }

            if (linesRecycler.Count > 0)
            {
                foreach (var line in linesRecycler)
                {
                    line.SetBinding(FrameworkElement.StyleProperty, GetGridLineBinding(axis, isMajor));
                }
            }

            linesRecycler.GenerateElements(totalLinesCount);
            var rangeStyles = axis.RangeStyles;

            if (rangeStyles != null && rangeStyles.Count > 0)
            {
                var values = !isMajor ? axis.SmallTickPoints :
                             (from label in axis.VisibleLabels select label.Position).ToList();

                for (int i = 0; i < values.Count; i++)
                {
                    foreach (var chartAxisRangeStyle in rangeStyles)
                    {
                        var range = chartAxisRangeStyle.Range;
                        var style = isMajor ? chartAxisRangeStyle.MajorGridLineStyle : chartAxisRangeStyle.MinorGridLineStyle;
                        if (range.Start <= values[i] && range.End >= values[i] && style != null)
                        {
                            linesRecycler[i].SetBinding(FrameworkElement.StyleProperty, GetGridLineBinding(chartAxisRangeStyle, isMajor));
                            break;
                        }
                    }
                }
            }

            //StrokeDashArray applied only for the first line element when it is applied through style.
            //It is bug in the framework.
            //And hence manually setting stroke dash array for each and every grid line.
            ChartExtensionUtils.SetStrokeDashArray(linesRecycler);
        }
コード例 #3
0
        /// <summary>
        /// Adds the Gridlines for the axis.
        /// </summary>
        /// <param name="axis">The Axis</param>
        public void UpdateGridLines(ChartAxis axis)
        {
            if (axis == null)
            {
                return;
            }
            if (axis.GridLinesRecycler == null)
            {
                axis.CreateLineRecycler();
            }
            int axesCount = 1;

            if (axis.RegisteredSeries.Count > 0)
            {
                axesCount = axis.Orientation == Orientation.Horizontal
                    ? Area.RowDefinitions.Count > 1 ? axis.AssociatedAxes.Count : (axis.AssociatedAxes.DistinctBy(Area.GetActualRow)).Count()
                    : Area.ColumnDefinitions.Count > 1 ? axis.AssociatedAxes.Count : (axis.AssociatedAxes.DistinctBy(Area.GetActualColumn)).Count();
            }

            int tickCount = axis.SmallTickPoints.Count * axesCount;

            var categoryAxis = axis as CategoryAxis;

            if (!(categoryAxis != null && categoryAxis.LabelPlacement == LabelPlacement.BetweenTicks))
            {
                tickCount = axis.VisibleLabels.Count * axesCount;
            }

            if (axis.smallTicksRequired)
            {
                ChartCartesianGridLinesPanel.UpdateGridlines(axis, axis.MinorGridLinesRecycler, axis.SmallTickPoints.Count * axesCount, false, false);
            }

            ChartCartesianGridLinesPanel.UpdateGridlines(axis, axis.GridLinesRecycler, tickCount, true, true);
        }
コード例 #4
0
        /// <summary>
        /// Gets the multiple area rectangle of the provided mouse point.
        /// Also returns a <see cref="bool"/> value indicating whether the point is inside rect.
        /// This bool is used since the <see cref="Rect"/> is value type and the null conditions for the outcoming rect cannot be checked.
        /// </summary>
        /// <param name="mousePoint">The mouse point.</param>
        /// <param name="axis">The axis to be checked.</param>
        /// <param name="isPointInsideRect">The property indicates whether the point is inside the axis area rectangle.</param>
        /// <returns>Returns the point captured <see cref="Rect"/>.</returns>
        internal static Rect GetAxisArrangeRect(Point mousePoint, ChartAxis axis, out bool isPointInsideRect)
        {
            Rect   clipRect = new Rect();
            double left     = axis.ArrangeRect.Left;
            double top      = axis.ArrangeRect.Top;

            foreach (var supportAxis in axis.AssociatedAxes)
            {
                if (axis.Orientation == Orientation.Horizontal)
                {
                    top      = supportAxis.ArrangeRect.Top;
                    clipRect = new Rect(left, top, axis.ArrangeRect.Width, supportAxis.ArrangeRect.Height);
                }
                else
                {
                    left     = supportAxis.ArrangeRect.Left;
                    clipRect = new Rect(left, top, supportAxis.ArrangeRect.Width, axis.ArrangeRect.Height);
                }

                if (clipRect.Contains(mousePoint))
                {
                    isPointInsideRect = true;
                    return(clipRect);
                }
            }

            isPointInsideRect = false;
            return(clipRect);
        }
コード例 #5
0
ファイル: FrmChart.cs プロジェクト: Huitingorg/Huiting
        private ChartData getDefaultData(string hTitle, List <DataTable> lstDataTable)
        {
            ChartData chartdata = new ChartData();

            chartdata.IsBkColor_jb = true;
            chartdata.sc_bkColor   = Color.Red;
            ChartTitle title = new Title();

            title.title          = "";
            title.titleFont.size = 12;
            title.titleFont.clr  = Color.Red;
            title.pos            = new ChartPoint(40, 96);
            chartdata.title      = title;

            ChartAxis hA = GetHorizChartAxis(hTitle);

            chartdata.axislst.Add(hA);

            ChartAxis vA = GetVerticalChartAxis(GetTitle1());

            chartdata.axislst.Add(vA);

            for (int i = 0; i < lstDataTable.Count; i++)
            {
                Color       clrSeries = i == 0 ? Color.Red : Color.Green;
                DataTable   dt        = lstDataTable[i];
                ChartSeries sr        = GetChartSeries(dt, hA, vA, clrSeries);
                chartdata.serieslst.Add(sr);
            }

            return(chartdata);
        }
コード例 #6
0
ファイル: TradingPairControl.cs プロジェクト: radtek/CoinsPro
        /// <summary>
        /// Sets up the chart axes.
        /// </summary>
        /// <param name="chartXy"></param>
        private void SetupChartAxes(ChartXy chartXy)
        {
            // X Axis

            ChartAxis axis = chartXy.AxisX;

            axis.MinorTickmarks.TickmarkCount = 0;
            axis.AxisMargins = 0;
            axis.GridSpacing = 60;

            axis.MajorGridLines.GridLinesVisualStyle.LineColor = Color.Gainsboro;
            axis.MinorGridLines.GridLinesVisualStyle.LineColor = Color.WhiteSmoke;

            // Y Axis

            axis = chartXy.AxisY;

            axis.AxisAlignment = AxisAlignment.Far;
            //axis.MinorTickmarks.TickmarkCount = 0;
            //axis.GridSpacing = 50;

            axis.MajorGridLines.GridLinesVisualStyle.LineColor = Color.Gainsboro;
            axis.MinorGridLines.GridLinesVisualStyle.LineColor = Color.WhiteSmoke;

            // Display the alternate background.

            axis.ChartAxisVisualStyle.AlternateBackground = new Background(Color.FromArgb(250, 250, 250));

            axis.UseAlternateBackground = true;
        }
コード例 #7
0
        /// <summary>
        /// Called when [minimum maximum changed].
        /// </summary>
        /// <param name="axis">The axis.</param>
        /// <param name="maximum">The maximum.</param>
        /// <param name="minimum">The minimum.</param>
        internal static void OnMinMaxChanged(ChartAxis axis, object maximum, object minimum)
        {
            try
            {
                if (minimum != null || maximum != null)
                {
#if NETFX_CORE
                    double minimumValue = minimum == null ? double.NegativeInfinity : Convert.ToDouble(minimum);
                    double maximumValue = maximum == null ? double.PositiveInfinity : Convert.ToDouble(maximum);
                    axis.ActualRange = new DoubleRange(minimumValue, maximumValue);
#else
                    double minimumValue = minimum == null ? double.NegativeInfinity : ((double?)minimum).Value;
                    double maximumValue = maximum == null ? double.PositiveInfinity : ((double?)maximum).Value;
                    axis.ActualRange = new DoubleRange(minimumValue, maximumValue);
#endif
                }
                else
                {
                    axis.ActualRange = DoubleRange.Empty;
                }

                if (axis.Area != null)
                {
                    axis.Area.ScheduleUpdate();
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
コード例 #8
0
ファイル: FrmChart.cs プロジェクト: Huitingorg/Huiting
        private ChartSeries GetChartSeries(DataTable dtTable, ChartAxis hA, ChartAxis vA, Color clrSeries)
        {
            ChartSeries sr = new Series();

            sr.VLineColor = Color.Black;
            sr.HLineColor = Color.Black;
            sr.horAxis    = hA;
            sr.verAxis    = vA;
            sr.Movable_SP = true;
            sr.isShowNet  = true;
            sr.VKDSpac    = 1;
            sr.seriesType = SeriesType.ST_LINE;
            sr.pointStyle = PointStyle.PS_STAR;
            sr.isMarkOn   = false;
            sr.lineWidth  = 1;
            sr.pointSize  = 3;
            sr.clr        = clrSeries;
            vA.serieslst.Add(sr);
            hA.serieslst.Add(sr);

            sr.pointlst = GetLstSeriesPoint(dtTable);
            sr.cx_spec  = 2;

            return(sr);
        }
コード例 #9
0
        public static string xkcd()
        {
            float[] data = new float[] { 35, 30, 26, 22, 17, 5, 96, 5, 4, 3, 2, 2, 1, 1 };

            string[] axisLabels = new string[] { ".00", ".02", ".04", ".06", ".08", ".10",
                                                 ".12", ".14", ".16", ".18", ".20", ".22",
                                                 ".24", ".26" };

            ChartAxis bottomAxis = new ChartAxis(ChartAxisType.Bottom);

            bottomAxis.SetRange(0, 30);

            for (int i = 0; i < axisLabels.Length; i++)
            {
                bottomAxis.AddLabel(new ChartAxisLabel(axisLabels[i], i * 2));
            }

            ChartAxis bottomAxis2 = new ChartAxis(ChartAxisType.Bottom);

            bottomAxis2.AddLabel(new ChartAxisLabel("Blood Alcohol Concentration (%)", 50));

            LineChart lineChart = new LineChart(400, 200);

            lineChart.SetTitle("Programming Skill", "000000", 14);
            lineChart.SetData(data);
            lineChart.AddAxis(bottomAxis);
            lineChart.AddAxis(bottomAxis2);
            return(lineChart.GetUrl());
        }
コード例 #10
0
        internal Point GetAxisLabelPosition(Size desiredSize, Point originalPosition, Size textSize)
        {
            Point     point = originalPosition;
            ChartAxis axis  = (XAxis.Orientation == Orientation.Horizontal) ? XAxis : YAxis;
            ChartAxis axis1 = (XAxis.Orientation != Orientation.Horizontal) ? XAxis : YAxis;

            point.X += (desiredSize.Width / 2);
            point.X -= (textSize.Width / 2);
            point.Y  = axis.OpposedPosition ? point.Y : 0;
            var chartAxes = Chart.Axes.Where(axes => (axes.Orientation == axis.Orientation))
                            .Where(position => (position.OpposedPosition));
            double bottom = (chartAxes.Count() > 0) ? chartAxes.ElementAt(0).RenderedRect.Bottom : 0;

            if (axis.OpposedPosition)
            {
                point.Y -= (textSize.Height);
                if (Chart.Axes.IndexOf(axis) != 0)
                {
                    point.Y -= (bottom - axis.RenderedRect.Bottom);
                }
                point.Y -= axis1.ActualPlotOffset;
            }
            else
            {
                point.Y += (axis.RenderedRect.Top - bottom);
            }
            return(point);
        }
コード例 #11
0
        public void ChartAxisDisplayUnit()
        {
            //ExStart
            //ExFor:AxisBuiltInUnit
            //ExFor:ChartAxis.DisplayUnit
            //ExFor:ChartAxis.MajorUnitIsAuto
            //ExFor:ChartAxis.MajorUnitScale
            //ExFor:ChartAxis.MinorUnitIsAuto
            //ExFor:ChartAxis.MinorUnitScale
            //ExFor:ChartAxis.TickLabelSpacing
            //ExFor:ChartAxis.TickLabelAlignment
            //ExFor:AxisDisplayUnit
            //ExFor:AxisDisplayUnit.CustomUnit
            //ExFor:AxisDisplayUnit.Unit
            //ExSummary:Shows how to manipulate the tick marks and displayed values of a chart axis.
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Insert a scatter chart, which is populated by default values
            Shape shape = builder.InsertChart(ChartType.Scatter, 450, 250);
            Chart chart = shape.Chart;

            // Set they Y axis to show major ticks every at every 10 units and minor ticks at every 1 units
            ChartAxis axis = chart.AxisY;

            axis.MajorTickMark = AxisTickMark.Outside;
            axis.MinorTickMark = AxisTickMark.Outside;

            axis.MajorUnit = 10.0;
            axis.MinorUnit = 1.0;

            // Stretch out the bounds of the axis out to show 3 major ticks and 27 minor ticks
            axis.Scaling.Minimum = new AxisBound(-10);
            axis.Scaling.Maximum = new AxisBound(20);

            // Do the same for the X-axis
            axis = chart.AxisX;
            axis.MajorTickMark   = AxisTickMark.Inside;
            axis.MinorTickMark   = AxisTickMark.Inside;
            axis.MajorUnit       = 10.0;
            axis.Scaling.Minimum = new AxisBound(-10);
            axis.Scaling.Maximum = new AxisBound(30);

            // We can also use this attribute to set minor tick spacing
            axis.TickLabelSpacing = 2;
            // We can define text alignment when axis tick labels are multi-line
            // MS Word aligns them to the center by default
            axis.TickLabelAlignment = ParagraphAlignment.Right;

            // Get the axis to display values, but in millions
            axis.DisplayUnit.Unit = AxisBuiltInUnit.Millions;

            // Besides the built-in axis units we can choose from,
            // we can also set the axis to display values in some custom denomination, using the following attribute
            // The statement below is equivalent to the one above
            axis.DisplayUnit.CustomUnit = 1000000.0;

            doc.Save(ArtifactsDir + "Charts.ChartAxisDisplayUnit.docx");
            //ExEnd
        }
コード例 #12
0
        public void DateTimeValuesToAxis()
        {
            //ExStart:SetDateTimeValuesToAxis
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            Shape shape = builder.InsertChart(ChartType.Column, 432, 252);
            Chart chart = shape.Chart;

            chart.Series.Clear();

            chart.Series.Add("Aspose Series 1",
                             new[]
            {
                new DateTime(2017, 11, 06), new DateTime(2017, 11, 09), new DateTime(2017, 11, 15),
                new DateTime(2017, 11, 21), new DateTime(2017, 11, 25), new DateTime(2017, 11, 29)
            },
                             new double[] { 1.2, 0.3, 2.1, 2.9, 4.2, 5.3 });

            ChartAxis xAxis = chart.AxisX;

            xAxis.Scaling.Minimum = new AxisBound(new DateTime(2017, 11, 05).ToOADate());
            xAxis.Scaling.Maximum = new AxisBound(new DateTime(2017, 12, 03).ToOADate());

            // Set major units to a week and minor units to a day.
            xAxis.MajorUnit     = 7;
            xAxis.MinorUnit     = 1;
            xAxis.MajorTickMark = AxisTickMark.Cross;
            xAxis.MinorTickMark = AxisTickMark.Outside;

            doc.Save(ArtifactsDir + "WorkingWithCharts.DateTimeValuesToAxis.docx");
            //ExEnd:SetDateTimeValuesToAxis
        }
コード例 #13
0
        public static string axesLabelsTest()
        {
            int[] line1 = new int[] { 5, 10, 50, 34, 10, 25 };
            int[] line2 = new int[] { 15, 20, 60, 44, 20, 35 };

            List <int[]> dataset = new List <int[]>();

            dataset.Add(line1);
            dataset.Add(line2);

            LineChart lineChart = new LineChart(250, 150);

            lineChart.SetTitle("Axis Labels Test", "0000FF", 14);
            lineChart.SetData(dataset);
            lineChart.AddAxis(new ChartAxis(ChartAxisType.Bottom, new string[] { "b", "o", "t", "t", "o", "m" }));
            lineChart.AddAxis(new ChartAxis(ChartAxisType.Left, new string[] { "l", "e", "f", "t" }));

            ChartAxis rightAxis = new ChartAxis(ChartAxisType.Right);

            rightAxis.AddLabel(new ChartAxisLabel("r"));
            rightAxis.AddLabel(new ChartAxisLabel("i"));
            rightAxis.AddLabel(new ChartAxisLabel("g"));
            rightAxis.AddLabel(new ChartAxisLabel("h"));
            rightAxis.AddLabel(new ChartAxisLabel("t"));
            lineChart.AddAxis(rightAxis);

            ChartAxis topAxis = new ChartAxis(ChartAxisType.Top);

            topAxis.AddLabel(new ChartAxisLabel("t"));
            topAxis.AddLabel(new ChartAxisLabel("o"));
            topAxis.AddLabel(new ChartAxisLabel("p"));
            lineChart.AddAxis(topAxis);

            return(lineChart.GetUrl());
        }
コード例 #14
0
        public void AxisCross()
        {
            //ExStart
            //ExFor:Charts.ChartAxis.AxisBetweenCategories
            //ExFor:Charts.ChartAxis.CrossesAt
            //ExSummary:Shows how to get a graph axis to cross at a custom location.
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Insert a column chart, which is populated by default values
            Shape shape = builder.InsertChart(ChartType.Column, 450, 250);
            Chart chart = shape.Chart;

            // Get the Y-axis to cross at a value of 3.0, making 3.0 the new Y-zero of our column chart
            // This effectively means that all the columns with Y-values about 3.0 will be above the Y-centre and point up,
            // while ones below 3.0 will point down
            ChartAxis axis = chart.AxisX;

            axis.AxisBetweenCategories = true;
            axis.Crosses   = AxisCrosses.Custom;
            axis.CrossesAt = 3.0;

            doc.Save(ArtifactsDir + "Charts.AxisCross.docx");
            //ExEnd
        }
コード例 #15
0
        /// <summary>
        /// To calculate the cartesian arrange rect based on StartAngle property
        /// </summary>
        /// <param name="center">The Center Point</param>
        /// <param name="axis">The Axis</param>
        private void CalculateCartesianArrangeRect(Point center, ChartAxis axis)
        {
            double left;
            double top;

            switch (CartesianAxis.PolarAngle)
            {
            case ChartPolarAngle.Rotate270:
            {
                left = axis.OpposedPosition ? center.X :
                       center.X - this.CartesianAxis.ComputedDesiredSize.Width;

                CartesianAxis.ArrangeRect = new Rect(left,
                                                     center.Y - radius,
                                                     this.CartesianAxis.ComputedDesiredSize.Width, radius);
            }

            break;

            case ChartPolarAngle.Rotate0:
            {
                top = axis.OpposedPosition ?
                      center.Y - this.CartesianAxis.ComputedDesiredSize.Height : center.Y;

                CartesianAxis.ArrangeRect = new Rect(center.X, top, radius,
                                                     this.CartesianAxis.ComputedDesiredSize.Height);
            }

            break;

            case ChartPolarAngle.Rotate90:
            {
                left = axis.OpposedPosition ? center.X :
                       center.X - this.CartesianAxis.ComputedDesiredSize.Width;

                CartesianAxis.ArrangeRect = new Rect(
                    left,
                    center.Y,
                    this.CartesianAxis.DesiredSize.Width, radius);
            }

            break;

            case ChartPolarAngle.Rotate180:
            {
                top = axis.OpposedPosition ?
                      center.Y - this.CartesianAxis.ComputedDesiredSize.Height : center.Y;

                CartesianAxis.ArrangeRect = new Rect(center.X - radius,
                                                     top, radius,
                                                     this.CartesianAxis.ComputedDesiredSize.Height);
            }

            break;

            default:
                break;
            }
        }
コード例 #16
0
        internal static object GetLabelContent(ChartAxis axis, int pos, ChartSeriesBase actualSeries)
        {
            var isIndexed = (actualSeries is WaterfallSeries || actualSeries is HistogramSeries ||
                             actualSeries is ErrorBarSeries || actualSeries is PolarRadarSeriesBase) ?
                            true : (axis as CategoryAxis).IsIndexed;

            if (actualSeries != null)
            {
                IEnumerable    pointValues;
                ChartValueType valueType;


                pointValues = actualSeries.ActualXValues;
                valueType   = actualSeries.XAxisValueType;


                var values = pointValues as List <double>;
                if (values != null && pos < values.Count && pos >= 0)
                {
                    switch (valueType)
                    {
                    case ChartValueType.DateTime:
                    {
                        DateTime xDateTime = values[pos].FromOADate();
                        return(xDateTime.ToString(axis.LabelFormat, CultureInfo.CurrentCulture));
                    }

                    case ChartValueType.TimeSpan:
                    {
                        TimeSpan xTimeSpanValue = TimeSpan.FromMilliseconds(values[pos]);
                        return(xTimeSpanValue.ToString(axis.LabelFormat, CultureInfo.CurrentCulture));
                    }

                    case ChartValueType.Double:
                    case ChartValueType.Logarithmic:
                    {
                        return(values[pos].ToString(axis.LabelFormat, CultureInfo.CurrentCulture));
                    }
                    }
                }
                else
                {
                    List <string> StrValues = new List <string>();
                    StrValues = !isIndexed
                        ? actualSeries.GroupedXValues
                        : pointValues as List <string>;
                    if (StrValues != null && pos < StrValues.Count && pos >= 0)
                    {
                        if (!String.IsNullOrEmpty(axis.LabelFormat))
                        {
                            return(String.Format(axis.LabelFormat, StrValues[pos]));
                        }
                        return(StrValues[pos]);
                    }
                }
            }

            return(pos);
        }
コード例 #17
0
        /// <summary>
        /// Adds the elements inside the panel.
        /// </summary>
        public void UpdateElements()
        {
            List <UIElement> removedElements = new List <UIElement>();

            if (Children == null)
            {
                return;
            }
            foreach (UIElement element in Children)
            {
                ChartAxis chartAxis = element as ChartAxis;

                if (chartAxis != null &&
                    !Area.Axes.Contains(chartAxis))
                {
                    if (chartAxis.GridLinesRecycler != null)
                    {
                        chartAxis.GridLinesRecycler.Clear();
                    }
                    if (chartAxis.MinorGridLinesRecycler != null)
                    {
                        chartAxis.MinorGridLinesRecycler.Clear();
                    }
                    removedElements.Add(chartAxis);
                }
            }

            foreach (UIElement removedElement in removedElements)
            {
                panel.Children.Remove(removedElement);
            }

            removedElements.Clear();

            var children = Children;

            foreach (ChartAxis content in this.Area.Axes)
            {
                content.AxisLayoutPanel = null;
                if (!children.Contains(content))
                {
                    panel.Children.Add(content);
                }

                //To make the initialized depth axis as manhattan depth axis.
                var chartAxisBase3D = content as ChartAxisBase3D;
                if (chartAxisBase3D != null)
                {
                    if (ChartCartesianAxisLayoutPanel.IsDeclaredSeriesManhattan(content.Area.VisibleSeries, chartAxisBase3D))
                    {
                        chartAxisBase3D.IsManhattanAxis = true;
                    }
                    else
                    {
                        chartAxisBase3D.IsManhattanAxis = false;
                    }
                }
            }
        }
コード例 #18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChartPolarTransformer"/> class.
 /// </summary>
 /// <param name="viewport">The viewport.</param>
 /// <param name="xAxis">The x axis.</param>
 /// <param name="yAxis">The y axis.</param>
 public ChartPolarTransformer(Rect viewport, ChartAxis xAxis, ChartAxis yAxis)
 {
     m_viewport = viewport;
     m_xAxis    = xAxis;
     m_yAxis    = yAxis;
     m_center   = ChartLayoutUtils.GetCenter(m_viewport);
     m_radius   = 0.5 * Math.Min(m_viewport.Width, m_viewport.Height);
 }
コード例 #19
0
        public void InsertChartWithDateTimeValues()
        {
            //ExStart
            //ExFor:AxisBound
            //ExFor:AxisBound.#ctor(Double)
            //ExFor:AxisBound.#ctor(DateTime)
            //ExFor:AxisScaling.Minimum
            //ExFor:AxisScaling.Maximum
            //ExFor:ChartAxis.Scaling
            //ExFor:Charts.AxisTickMark
            //ExFor:Charts.AxisTickLabelPosition
            //ExFor:Charts.AxisTimeUnit
            //ExFor:Charts.ChartAxis.BaseTimeUnit
            //ExSummary:Shows how to insert chart with date/time values
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Insert chart.
            Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
            Chart chart = shape.Chart;

            // Clear demo data.
            chart.Series.Clear();

            // Fill data.
            chart.Series.Add("Aspose Test Series",
                             new[]
            {
                new DateTime(2017, 11, 06), new DateTime(2017, 11, 09), new DateTime(2017, 11, 15),
                new DateTime(2017, 11, 21), new DateTime(2017, 11, 25), new DateTime(2017, 11, 29)
            },
                             new[] { 1.2, 0.3, 2.1, 2.9, 4.2, 5.3 });

            ChartAxis xAxis = chart.AxisX;
            ChartAxis yAxis = chart.AxisY;

            // Set X axis bounds.
            xAxis.Scaling.Minimum = new AxisBound(new DateTime(2017, 11, 05).ToOADate());
            xAxis.Scaling.Maximum = new AxisBound(new DateTime(2017, 12, 03));

            // Set major units to a week and minor units to a day.
            xAxis.BaseTimeUnit  = AxisTimeUnit.Days;
            xAxis.MajorUnit     = 7;
            xAxis.MinorUnit     = 1;
            xAxis.MajorTickMark = AxisTickMark.Cross;
            xAxis.MinorTickMark = AxisTickMark.Outside;

            // Define Y axis properties.
            yAxis.TickLabelPosition = AxisTickLabelPosition.High;
            yAxis.MajorUnit         = 100;
            yAxis.MinorUnit         = 50;
            yAxis.DisplayUnit.Unit  = AxisBuiltInUnit.Hundreds;
            yAxis.Scaling.Minimum   = new AxisBound(100);
            yAxis.Scaling.Maximum   = new AxisBound(700);

            doc.Save(ArtifactsDir + "Charts.ChartAxisProperties.docx");
            //ExEnd
        }
コード例 #20
0
        private static void OnSmallTicksPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ChartAxis axis = d as ChartAxis;

            if (axis != null && axis.Area != null)
            {
                axis.Area.ScheduleUpdate();
            }
        }
コード例 #21
0
        internal static void GenerateVisibleLabels(ChartAxis axis, LabelPlacement labelPlacement)
        {
            {
                var actualSeries =
                    axis.Area.VisibleSeries
                    .Where(series => series.ActualXAxis == axis)
                    .Max(filteredSeries => filteredSeries.DataCount);

                actualSeries = actualSeries != null ? actualSeries : axis.Area is SfChart ? (axis.Area as SfChart).TechnicalIndicators.Where(series => series.ActualXAxis == axis)
                               .Max(filteredSeries => filteredSeries.DataCount) : null;

                if (actualSeries == null)
                {
                    return;
                }
                var    visibleRange       = axis.VisibleRange;
                double actualInterval     = axis.ActualInterval;
                double interval           = axis.VisibleInterval;
                double position           = visibleRange.Start - (visibleRange.Start % actualInterval);
                int    count              = 0;
                var    isPolarRadarSeries = actualSeries is PolarRadarSeriesBase;
                var    isIndexed          = (actualSeries is WaterfallSeries || actualSeries is HistogramSeries ||
                                             actualSeries is ErrorBarSeries || isPolarRadarSeries) ?
                                            true : (axis as CategoryAxis).IsIndexed;
                count = isIndexed ? actualSeries.DataCount : actualSeries.DistinctValuesIndexes.Count;
                for (; position <= visibleRange.End; position += interval)
                {
                    int pos = ((int)Math.Round(position));
                    if (visibleRange.Inside(pos) && pos < count && pos > -1)
                    {
                        object obj = null;
                        obj = GetLabelContent(axis, pos, actualSeries);
                        axis.VisibleLabels.Add(new ChartAxisLabel(pos, obj, pos));
                    }
                }

                position = visibleRange.Start - (visibleRange.Start % actualInterval);
                if (isPolarRadarSeries)
                {
                    return;
                }
                for (; position <= visibleRange.End; position += 1)
                {
                    if (labelPlacement != LabelPlacement.BetweenTicks)
                    {
                        continue;
                    }
                    if (position == 0 && (axis.VisibleRange.Inside(-0.5)))
                    {
                        axis.m_smalltickPoints.Add(-0.5);
                    }

                    AddBetweenTicks(axis, position, 1d);
                }
            }
        }
コード例 #22
0
        /// <summary>
        /// Method declaration for UpdateElements
        /// </summary>
        public void UpdateElements()
        {
            if (this.Area != null && this.Area.InternalPrimaryAxis != null)
            {
                List <UIElement> removedElements = new List <UIElement>();
                if (Children == null)
                {
                    return;
                }
                PolarAxis = this.Area.InternalPrimaryAxis as ChartAxisBase2D;
                PolarAxis.AxisLayoutPanel = this;
                var angle = (this.Area.InternalSecondaryAxis as ChartAxisBase2D).PolarAngle;
                if ((angle == ChartPolarAngle.Rotate0) || (angle == ChartPolarAngle.Rotate180)) // Based on StartAngle the oriention
                {                                                                               //of secondary axis has changed
                    this.Area.InternalSecondaryAxis.Orientation = Orientation.Horizontal;
                    var numericalAxis = this.Area.InternalSecondaryAxis as NumericalAxis;
                    if (numericalAxis != null)
                    {
                        numericalAxis.RangePadding = NumericalPadding.Round;
                    }
                }
                else
                {
                    this.Area.InternalSecondaryAxis.Orientation = Orientation.Vertical;
                }
                if (Children.Count > 0 && (angle == ChartPolarAngle.Rotate90 || angle == ChartPolarAngle.Rotate180))
                {
                    this.Area.InternalSecondaryAxis.IsInversed = !this.Area.InternalSecondaryAxis.IsInversed;
                }
                CartesianAxis = this.Area.InternalSecondaryAxis as ChartAxisBase2D;
                foreach (UIElement element in Children)
                {
                    ChartAxis chartAxis = element as ChartAxis;
                    if (chartAxis != null && !Area.Axes.Contains(chartAxis))
                    {
                        removedElements.Add(chartAxis);
                    }
                }

                foreach (UIElement removedElement in removedElements)
                {
                    panel.Children.Remove(removedElement);
                }

                removedElements.Clear();
                removedElements = null;
                var children = Children;
                foreach (ChartAxis content in this.Area.Axes)
                {
                    if (!children.Contains(content))
                    {
                        panel.Children.Add(content);
                    }
                }
            }
        }
コード例 #23
0
ファイル: Converters.cs プロジェクト: silexcorp/wpf-demos
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            area = parameter as ChartArea;
            double zoomingFactor   = (double)values[0];
            double zoomingPosition = (double)values[1];

            this.axis = (ChartAxis)values[2];

            return(axis.VisibleRange.End);
        }
コード例 #24
0
        internal void DrawScaleBreakLines(ChartAxis axis)
        {
            if (Area == null || Area.AreaType != ChartAreaType.CartesianAxes)
            {
                ClearBreakElements();
                return;
            }

            ChartAxisScaleBreak.DrawPath(this);
        }
コード例 #25
0
        public ActionResult SearchChart(SearchRequest sr)
        {
            ChartAxis ca = new ChartAxis();

            ca.flow  = BusinessLogics.SearchFlow(sr.From, sr.To);
            ca.press = BusinessLogics.SearchPressure(sr.From, sr.To);
            ca.time  = BusinessLogics.SearchTime(sr.From, sr.To);
            ca.temp  = BusinessLogics.SearchTemp(sr.From, sr.To);
            return(Json(ca, JsonRequestBehavior.AllowGet));
        }
コード例 #26
0
        public static string simpleAxis()
        {
            ChartAxis bottomAxis = new ChartAxis(ChartAxisType.Bottom);

            int[]     line1     = new int[] { 5, 10, 50, 34, 10, 25 };
            LineChart lineChart = new LineChart(150, 150);

            lineChart.AddAxis(bottomAxis);
            lineChart.SetData(line1);
            return(lineChart.GetUrl());
        }
コード例 #27
0
        /// <summary>
        /// Sets up the chart axes.
        /// </summary>
        /// <param name="chartXy"></param>
        private void SetupChartAxes(ChartXy chartXy)
        {
            // X Axis

            ChartAxis axis = chartXy.AxisX;

            // axis.AxisMargins = 75;

            axis.MajorTickmarks.StaggerLabels = false;
            axis.MinorTickmarks.TickmarkCount = 1;

            axis.MinorGridLines.Visible = false;

            axis.MajorGridLines.GridLinesVisualStyle.LineColor = Color.PowderBlue;

            // Let's add a title associated with the axis.

            axis.Title.Text = "Process ID";

            ChartTitleVisualStyle tstyle = axis.Title.ChartTitleVisualStyle;

            tstyle.Font      = new Font("Georgia", 11);
            tstyle.TextColor = Color.Navy;
            tstyle.Padding   = new DevComponents.DotNetBar.Charts.Style.Padding(0, 6, 0, 0);
            tstyle.Alignment = Alignment.MiddleCenter;

            axis.MajorTickmarks.LabelVisualStyle.TextFormat = "ID##;\"\";";

            // Y Axis

            axis = chartXy.AxisY;

            axis.AxisAlignment = AxisAlignment.Far;

            axis.GridSpacing = 1;
            //axis.AxisMargins = 100;

            axis.MinorTickmarks.TickmarkCount = 1;
            axis.MinorGridLines.Visible       = false;

            axis.MajorGridLines.GridLinesVisualStyle.LineColor = Color.PowderBlue;

            // Let's add a title associated with the axis.

            axis.Title.Text = "Memory Usage (KB)";

            tstyle = axis.Title.ChartTitleVisualStyle;

            tstyle.Font = new Font("Georgia", 11);
            axis.MajorTickmarks.LabelVisualStyle.TextFormat = "##;\"\";";
            tstyle.TextColor = Color.Navy;
            tstyle.Padding   = new DevComponents.DotNetBar.Charts.Style.Padding(8, 0, 8, 0);
            tstyle.Alignment = Alignment.MiddleCenter;
        }
コード例 #28
0
        internal static ClientChartAxis CreateChartAxis(this ChartAxis a)
        {
            var ca = new ClientChartAxis();

            ca.Format = a.Format;
            if (ca.Format == ChartAxisFormat.Continuous)
            {
                ca.Min = a.Min;
                ca.Max = a.Max;
            }
            return(ca);
        }
コード例 #29
0
ファイル: ErrorBarSeries.cs プロジェクト: Mohsens22/OpenPasat
 protected override void OnXAxisChanged(ChartAxis oldAxis, ChartAxis newAxis)
 {
     base.OnXAxisChanged(oldAxis, newAxis);
     if (newAxis is DateTimeAxis)
     {
         newAxis.ActualRangeChanged += ErrorBarSeries_ActualRangeChanged;
     }
     if (oldAxis is DateTimeAxis)
     {
         oldAxis.ActualRangeChanged -= ErrorBarSeries_ActualRangeChanged;
     }
 }
コード例 #30
0
        /// <summary>
        /// Calculates actual interval
        /// </summary>
        /// <param name="axis"></param>
        /// <param name="range"></param>
        /// <param name="availableSize"></param>
        /// <param name="interval"></param>
        /// <returns></returns>
        internal static double CalculateActualInterval(ChartAxis axis, DoubleRange range, Size availableSize, object interval)
        {
            if (interval == null)
            {
                return(Math.Max(1d, Math.Floor(range.Delta / axis.GetActualDesiredIntervalsCount(availableSize))));
            }
#if NETFX_CORE
            return(Convert.ToDouble(interval));
#else
            return(((double?)interval).Value);
#endif
        }
コード例 #31
0
        public ActionResult Index(string team)
        {
            var burndownColor = Color.SteelBlue;
            var velocityColor = Color.YellowGreen;
            var scopeColor = Color.Orange;

            var configuration = GetConfiguration(team);
            var burndown = GetBurndownData(configuration.Project, configuration.Label, configuration.HistoricalDataPath);

            var encoding = new GoogleExtendedEncoding();
            var burnChart = new BurndownChart(burndown, encoding) {
                StartDate = burndown.Min(item => item.Date),
                EndDate = configuration.EndDate ?? burndown.Max(item => item.Date),
                VelocityMax = 25
            };

            var yAxis = new ChartAxis(Axis.Y, new Tuple<int, int>(0, burnChart.ChartMax), new string[0], new int[0]);
            var xAxis = new ChartAxis(Axis.X, new Tuple<int, int>(0, 1), new[]{ burnChart.StartDate.ToShortDateString(), burnChart.EndDate.ToShortDateString() }, new[]{0, 1});
            var velocityAxis = new ChartAxis(Axis.Right, new Tuple<int, int>(0, burnChart.VelocityMax), new []{ "0", "5", "10", "15", "20", "Velocity" }, new []{ 0, 5, 10, 15, 20, 25 });

            var burnLine = burnChart.CreateBurnLine(Color.FromArgb(128, Color.Firebrick));
            var velocity = burnChart.CreateVelocitySeries(velocityColor);
            var velocityMean = burnChart.CreateVelocityMeanSeries(Color.FromArgb(128, velocityColor));
            var scope = burnChart.CreateScopeSeries(scopeColor);
            var pointsRemaining = burnChart.CreatePointsRemainingSeries(burndownColor);

            var chart = new Chart(
                string.Format("{0}: {1} points remaining. Velocity {2}. {3}",
                    configuration.Title,
                    burndown.PointsRemaining,
                    burnChart.MeanVelocity,
                    EstimateRemainingDisplay(burndown, burnChart.MeanVelocity)), 800, 300,
                new []{ xAxis, yAxis, velocityAxis },
                new [] {
                    pointsRemaining,
                    velocity,
                    scope,
                    burnLine,
                    velocityMean
                }.SelectMany(x => new [] { x.X, x.Y }),
                new []{
                    ChartMarker.NewCircle(burndownColor, 0, MarkerPoints.All, 8),
                    ChartMarker.NewCircle(Color.White, 0, MarkerPoints.All, 4)
                },
                ChartMode.XYLine, encoding, new[]{ pointsRemaining.Style, velocity.Style, scope.Style, burnLine.Style, velocityMean.Style});
            return View(new ChartView { Name = configuration.Title, DisplayMarkup = "<img src='" + chart.ToString() + "'/>" });
        }
コード例 #32
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            LicenseManager.Key = License.Key;

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // get chart from view
            chart = FindViewById<FlexChart>(Resource.Id.flexchart);
            
            // set title/footer
            chart.Header = "FlexChart Sales";
            chart.Footer = "GrapeCity Xuni";
            chart.Legend.BorderWidth = 1;
            chart.Legend.BorderColor = System.Drawing.Color.Gray.ToArgb();

            // set palette
            chart.SetPalette(Palettes.Modern);
            
            // bind X axis to display category names
            chart.BindingX = "Date";

            // create series with binding
            ChartSeries sales = new ChartSeries(chart, "Sales", "Sales"); // new Series(chart, legend name, binding property)
            ChartSeries expenses = new ChartSeries(chart, "Expenses", "Expenses");
            ChartSeries downloads = new ChartSeries(chart, "Downloads", "Downloads");

            downloads.ChartType = ChartType.Line;
            chart.Series.Add(sales);
            chart.Series.Add(expenses);
            chart.Series.Add(downloads);

            // set data source
            chart.ItemsSource = SalesData.GetSalesDataList();

            // configure default axes
            chart.AxisX.LabelAngle = 45;
            chart.AxisX.Format = "d";
            chart.AxisY.Format = "c0";
            chart.AxisY.Title = "Dollars";

            // add second Y axis
            ChartAxis y2 = new ChartAxis(chart, ChartPositionType.Right);
            y2.Name = "y2";
            y2.Format = "n0";
            y2.MajorGridVisible = false;
            y2.MinorGridVisible = false;
            y2.LabelsVisible = true;
            y2.Title = "Downloads";
            chart.Axes.Add(y2);

            downloads.AxisY = "y2";

            // customize tooltip
            chart.Tooltip.Content = new MyTooltip(chart, chart.Context);

            // customize plot element
            chart.PlotElementLoading += chart_PlotElementLoading;

            // configure animation
            chart.LoadAnimation.AnimationMode = AnimationMode.Point;

        }