I like this library. Is there any plan to add bar charts in wxMathPlot?
Well, not at the moment, mainly because I have little time to work on the library, but it is a good idea, and I'll add it to the wish list.
In any case, it should not be difficult to implement a new layer to plot bar charts: it is a matter to derive a new class from mpLayer and to override the Plot method to draw rectangles instead of lines.
Some example code for the Plot function of a bar based layer. Note that this code uses some other data particular to my derived classes so it will not work as is with mathplot you will need to modify it to do this but it gives an idea of what is needed.
// Set the pen
// Plot all points
int numPoints = (int)(points.size() - m_firstValidPoint);
// Calculate the X coord of the left and right
// border of the plot window. This will allow
// us to only plot points that fall in this region
wxCoord startPx = m_drawOutsideMargins ? 0 : w.GetMarginLeft();
wxCoord endPx = m_drawOutsideMargins ? w.GetScrX() : w.GetScrX() - w.GetMarginRight();
double leftX = w.p2x(startPx);
double rightX = w.p2x(endPx);
wxCoord ptX, ptY;
// Create pen for points with colour
//wxPen diffPen = m_pen;
// Caclulate width of bar to draw
int barWidth = 0.8 * w.GetScaleX();
if (barWidth == 0)
barWidth = 1;
// Get the zero y position
wxCoord zeroY = w.y2p(0);
for (int counter = m_firstValidPoint; counter < numPoints; counter++)
// Check if in range
if (points[counter].xCoord <= rightX)
if (points[counter].xCoord >= leftX)
ptX = w.x2p(points[counter].xCoord);
ptY = w.y2p(points[counter].yCoord);
// Set brush (fill) colour
if (points[counter].colour != wxNullColour)
// Set brush
// Draw line
dc.DrawRectangle(ptX - (barWidth/2), ptY, barWidth, zeroY - ptY);
// Reset brush to normal
When i am going to click mouse left on a mpwindow it needs to find a particular layer.Can u given me a Suggestion.
Hi, There's already bar -charts implemented to wxMathPlot:
gpPanel contains several other new feature also which might be useful for you.
Log in to post a comment.