How do I create a bar chart using the Java prefuse library?

前端 未结 1 1142
天命终不由人
天命终不由人 2021-01-16 05:02

I\'ve currently got prefuse to plot a scatter graph, where the X axis is the computer name and the Y axis is its temperature. How do I get it to draw bars showing the values

相关标签:
1条回答
  • 2021-01-16 06:04

    I think I should probably point out how I did this - Stack Overflow is supposed to be a repository too, after all. Earlier in the code was the following:

    m_vis.setRendererFactory(new RendererFactory() {
        Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP);
        Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM);
        Renderer barRenderer = new ShapeRenderer();
    
        public Renderer getRenderer(VisualItem item) {
            return item.isInGroup("yAxis") ? yAxisRenderer :
                   item.isInGroup("xAxis") ? xAxisRenderer :
                   barRenderer;
        }
    });
    

    I extended the shape renderer to always return a rectangle of the correct width and height, and positioned it half a bar to the left of where it was supposed to be. If you want to position your bars in the centre, you need to do that yourself - prefuse won't help you.

    m_vis.setRendererFactory(new RendererFactory() {
        Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP);
        Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM);
        Renderer barRenderer = new ShapeRenderer() {
            protected Shape getRawShape(VisualItem item) {
                double x = item.getX();
                double y = item.getY();
                if (Double.isNaN(x) || Double.isInfinite(x))
                    x = getInsets().left + axisWidth + totalBarWidth / 2;
                if (Double.isNaN(y) || Double.isInfinite(y))
                    y = 0;
    
                double width = totalBarWidth / (barCount + 1) - barGap;
                double height = getHeight() - getInsets().bottom - axisHeight - y;
                x -= width / 2;
    
                return rectangle(x, y, width, height);
            }
        };
    
        public Renderer getRenderer(VisualItem item) {
            return item.isInGroup("yAxis") ? yAxisRenderer :
                   item.isInGroup("xAxis") ? xAxisRenderer :
                   barRenderer;
        }
    });
    
    0 讨论(0)
提交回复
热议问题