ASE Home Page Products Download Purchase Support About ASE
ChartDirector Support
Forum HomeForum Home   SearchSearch

Message ListMessage List     Post MessagePost Message

  Just display axes with a background image
Posted by Anuta Christian on Aug-09-2019 22:04
Greetings,

I have the simplest piece of code to have one XYChart with a background image BUT I can't display the axes because I don't have any data added to the XYChart. Is there a way to do it ? Here is the code :

XYChart* c = new XYChart(1255, 528);

c->setPlotArea(0, 0, 1255, 528);

c->setBgImage("placeholder.png");

c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);

viewer->setChart(c);

  Re: Just display axes with a background image
Posted by Peter Kwan on Aug-10-2019 00:13
Hi Anuta,

Yes, you can display the axes. However, the axes will have no labels. They are just a straight line. Also, in your code, the plot area includes the entire chart surface. The axis labels are put outside the plot area, so even if there are labels, they will be outside the chart.

If you want to have something visible, try:

XYChart* c = new XYChart(1255, 528);
c->setPlotArea(5, 5, 1245, 518);
c->setBgImage("placeholder.png");
c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);
viewer->setChart(c);

or

XYChart* c = new XYChart(1255, 528);

        c->setPlotArea(5, 5, 1245, 518);
c->setBgImage("placeholder.png");
c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);

        // You can use setLinearScale to define the axis labels
        c->yAxis()->setLinearScale(0, 100, 20);
        // Put the labels inside the plot area (instead of outside it)
        c->yAxis()->setLabelGap(-1);

viewer->setChart(c);

Hope this can help.

Regards
Peter Kwan

  Re: Just display axes with a background image
Posted by Anuta Christian on Aug-14-2019 23:05
Great, you're right. The axes were just on the border. I can see them now but I don't understand why I cannot change the colors. I'm using this piece of code :

c->yAxis()->setColors(-5555555);
c->xAxis()->setColors(5555555);

The axes are still black. I've used tons of different values but nothing changes.

Sincerely yours

  Re: Just display axes with a background image
Posted by Anuta Christian on Aug-14-2019 23:12
And also, do you have any idea how to have the axes on bottom and left side ? Currently it's on top and left side.

Thank you

  Re: Just display axes with a background image
Posted by Peter Kwan on Aug-15-2019 05:03
Hi Anuta,

The plot area always have 4 axes on its 4 sides, but only the axes that are actually used will be drawn. That's why in many XYChart, you can only see the bottom and left axes, which are the primary x and y axes.

For your case, is it possible your code never used the axes, so they are not drawn. If you do not use the axes, you may still see a rectangle, which is the plot area border. The default color of the plot area border is black.

If you do not need to use an axis, you can force it to appear by just adding a dummy empty title the the axis. It is like:

XYChart* c = new XYChart(1255, 528);
c->setPlotArea(5, 5, 1245, 518);
c->setBgImage("placeholder.png");
c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);

        // Set the axes colors
c->yAxis()->setColors(0xff0000);
c->xAxis()->setColors(0x00ff00);

        // Add dummy title to make the otherwise unused axes appear
c->yAxis()->setTitle(" ");
c->xAxis()->setTitle(" ");

For the right and top axes, they can be accessed with c->xAxis2() and c->yAxis2(). You can also move the primary y and x axes to the left and top sides by using:

        c->setXAxisOnTop();
        c->setYAxisOnRight();

If you are not using the axes, but just need to line somewhere, you can also use BaseChart::addLine to add lines to the chart.

Hope this can help.

Regards
Peter Kwan

  Re: Just display axes with a background image
Posted by Anuta Christian on Aug-15-2019 05:44
Thanks a lot about your help, now it's perfect.

  Re: Just display axes with a background image
Posted by Peter+Kwan on Sep-21-2024 17:07
Hi Anuta,

If there is no data, ChartDirector cannot know what is the axis scale, so it does not automatically draw the axis labels. You need to set the axis scale with your own code.

Furthermore, by default, the axis is drawn outside the plot area rectangle. In your code, the plot area starts fills the entire chart, so there is no place to draw the axis labels. You need to reduce the plot area size so leave space for the axis labels. For example:

XYChart* c = new XYChart(1255, 528);

c->setPlotArea(0, 0, 1255, 528);

        // Assume both axes is from 0 to 100 with a label every 10 units
        c->xAxis()->setLinearScale(0, 100, 10);
        c->yAxis()->setLinearScale(0, 100, 10);

        // Put the axis labels inside the plot area
        c->xAxis()->setLabelGap(-1);
        c->yAxis()->setLabelGap(-1);

c->setBgImage("placeholder.png");

c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);

viewer->setChart(c);

Best Regards
Peter Kwan

  Re: Just display axes with a background image
Posted by Peter Kwan on Sep-21-2024 17:18
Hi.

I have just tried myself, and I found that even putting the labels inside the plot area, because the label text can have length, it is still possible for the part of the text to flow outside the chart. It is better to set the plot area position and size to leave some space for the axis labels:

XYChart* c = new XYChart(1255, 528);

c->setPlotArea(50, 20, 1255 - 80, 528 - 50);

// Assume both axes is from 0 to 100 with a label every 10 units
c->xAxis()->setLinearScale(0, 100, 10);
c->yAxis()->setLinearScale(0, 100, 10);

c->setBgImage("placeholder.png");

c->yAxis()->setWidth(3);
c->xAxis()->setWidth(3);

viewer->setChart(c);

Best Regards
Peter Kwan

  Re: Just display axes with a background image
Posted by Peter Kwan on Sep-21-2024 17:31
Hi Anuta,

Sorry, I made a mistake of answering a forum message that has already been answered long time ago. Please ignore my forum post.

Best Regards
Peter Kwan