user3501613
user3501613

Reputation: 610

How to Add Image/Shape with chart data label in ASPOSE Slide

Can we add any shape/image with chart data labels in ASPOSE .I need to show one arrow with different colors according to certain values with each data labels in the chart. i am using ASPOSE to generate my ppt. Or there is any way to find the data label positions in ASPOSE.enter image description here

Upvotes: 0

Views: 735

Answers (2)

Mudassir
Mudassir

Reputation: 433

I have further observed your requirements and have observed that you have also posted the similar requirements in Aspose.Slides official support forum as well. Please try using following sample code on your end to serve the purpose.

public static void TestLineChart()
{
var location = System.Reflection.Assembly.GetExecutingAssembly().Location;

//Open a presentation
Presentation pres = new Presentation();
IChart chart = pres.Slides[0].Shapes.AddChart(ChartType.StackedLineWithMarkers, 10, 10, 400, 400);
//populating cycle
var serie = chart.ChartData.Series[0];
var wbk = chart.ChartData.ChartDataWorkbook;
chart.ChartData.Series.RemoveAt(1);
chart.ChartData.Series.RemoveAt(1);

serie.Marker.Format.Fill.FillType = FillType.Picture;
serie.Marker.Size = 20;


serie.Marker.Symbol = MarkerStyleType.Diamond;
serie.Marker.Format.Fill.FillType = FillType.Solid;
serie.Marker.Format.Fill.SolidFillColor.Color=Color.Orange;
serie.Marker.Format.Line.FillFormat.FillType = FillType.Solid;
serie.Marker.Format.Line.FillFormat.SolidFillColor.Color=Color.Red;
serie.Marker.Format.Line.Width=1.0F;

serie.Format.Line.Width = 3.0f;
serie.Format.Line.FillFormat.FillType=FillType.Solid;
serie.Format.Line.FillFormat.SolidFillColor.Color = Color.FromArgb(209,225,91) ;

for(int i=0;i<serie.DataPoints.Count;i++)
{
serie.DataPoints[i].Label.DataLabelFormat.ShowValue = true;
    IDataLabel label=serie.Labels[i];
    chart.ValidateChartLayout();
    IAutoShape ashp=chart.UserShapes.Shapes.AddAutoShape(ShapeType.Triangle,chart.X + label.ActualX + 5, chart.Y + label.ActualY + 5, 20,20);
    ashp.FillFormat.FillType = FillType.Solid;

    ashp.LineFormat.FillFormat.FillType = FillType.NoFill;
    if (i % 2 == 0)//even data points
    {
        ashp.FillFormat.SolidFillColor.Color = Color.Green;
    }
    else
    {
        ashp.Rotation = 180;
        ashp.FillFormat.SolidFillColor.Color = Color.Red;
    }
}

pres.Save(Path.Combine(Path.GetDirectoryName(location), "Result2.pptx"), Aspose.Slides.Export.SaveFormat.Pptx);

}

I am working as Support developer/ Evangelist at Aspose.

Many Thanks,

Upvotes: 1

Mudassir
Mudassir

Reputation: 433

I have observed your requirements and like to share that MS PowerPoint supports LineWithMarker chart that can display different predefined or custom marker symbols(in the form of image) for different series data points. Please try using following sample code for possible options using Aspose.Slides and MSO charts.

public static void TestScatter()
{
    var location = System.Reflection.Assembly.GetExecutingAssembly().Location;

    //Open a presentation
    Presentation pres = new Presentation();
    IChart chart = pres.Slides[0].Shapes.AddChart(ChartType.StackedLineWithMarkers, 10, 10, 400, 400);
    //populating cycle
    var serie = chart.ChartData.Series[0];
    var wbk = chart.ChartData.ChartDataWorkbook;
    chart.ChartData.Series.RemoveAt(1);
    chart.ChartData.Series.RemoveAt(1);

    serie.Marker.Format.Fill.FillType = FillType.Picture;
    serie.Marker.Size = 20;

    // Set the picture
    System.Drawing.Image img = (System.Drawing.Image)new Bitmap(@"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg");
    IPPImage imgx = pres.Images.AddImage(img);
    serie.Marker.Format.Fill.PictureFillFormat.Picture.Image = imgx;

    //For individual data point
    serie.DataPoints[0].Marker.Format.Fill.FillType = FillType.Solid;
    serie.DataPoints[0].Marker.Format.Fill.SolidFillColor.Color = Color.Red;
    serie.DataPoints[0].Marker.Size = 20;
    serie.DataPoints[0].Marker.Symbol = MarkerStyleType.Triangle;

    serie.DataPoints[0].Label.DataLabelFormat.ShowValue = true;
    serie.DataPoints[1].Label.DataLabelFormat.ShowValue = true;
    serie.DataPoints[2].Label.DataLabelFormat.ShowValue = true;
    serie.DataPoints[3].Label.DataLabelFormat.ShowValue = true;

    pres.Save(Path.Combine(Path.GetDirectoryName(location), "Result2.pptx"), SaveFormat.Pptx);

}

I am working as Support developer/ Evangelist at Aspose.

Many Thanks,

Upvotes: 2

Related Questions