当前位置: 首页 > 知识库问答 >
问题:

JFreeChart极图将零填充到点

齐朝明
2023-03-14

下面是示例代码

import java.awt.Color;
import java.awt.Dimension;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.PolarChartPanel;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class PolarCharDemo extends ApplicationFrame {
    private static final long serialVersionUID = 1L;
    double [][] myData = {{12.1,7.9,3.29,1.01,0,145},
                {12.6,8.4,3.22,1,0,145},
                {13.1,8.1,3.29,0.97,0,145},
                {10,7.5,3.22,0.93,0,145},
                {11.4,8.2,3.1,0.93,0,145},
                {11.7,7.3,2.99,0.9,0,145},
                {10.3,8,2.97,0.89,0,145},
                {8.8,7,3.05,0.9,0,145},
                {9.8,6.7,3.13,0.93,0,145},
                {11.1,7.1,3.05,0.91,0,145},
                {8.8,6.2,3.12,0.95,0,145},
                {9.6,7,2.82,0.44,2.3,5},
                {10.2,6.8,2.82,0.47,3.2,5},
                {9.4,6.8,2.76,0.41,2.9,5},
                {10,7,2.61,0.44,3.3,45},
                {12.8,8,2.95,0.49,2.2,50},
                {9.9,7.1,4.08,1.01,0.6,45},
                {7.1,4.4,2.23,0.4,1.5,5},
                {5,4,2.1,0.37,2.3,5},
                {7.2,4.1,2.17,0.37,1.5,5},
                {7.1,4.3,2.09,0.36,2,5},
                {5.1,4.1,2.17,0.38,2.1,5},
                {4.2,3.9,2.16,0.41,1.9,5},
                {4.9,3.9,2.08,0.35,2.5,5},
                {4.3,3.5,2.09,0.34,3,5}};
    /**
     * Creates a new instance of the demo.
     * 
     * @param title  the frame title.
     */
    public PolarCharDemo(final String title) {
        super(title);
        final XYDataset dataset = createAvgDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new PolarChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(1000, 670));
        chartPanel.setEnforceFileExtensions(false);
        setContentPane(chartPanel);
    }
    /**
     * Creates a sample chart.
     * @param dataset  the dataset.
     * @return A sample chart.
     */
    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart chart = ChartFactory.createPolarChart("", dataset, true, true, false); 
        final PolarPlot plot = (PolarPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setAngleGridlinePaint(Color.BLACK);
        plot.setRadiusGridlinePaint(Color.LIGHT_GRAY);

        final DefaultPolarItemRenderer renderer = (DefaultPolarItemRenderer) plot.getRenderer();
        renderer.setSeriesFilled(0, true);
        renderer.setSeriesPaint(0, Color.BLUE);
        renderer.setSeriesFilled(1, true);
        renderer.setSeriesPaint(1, Color.RED);
        renderer.setSeriesFilled(2, true);
        renderer.setSeriesPaint(2, Color.YELLOW);
        renderer.setSeriesFilled(3, true);
        renderer.setSeriesPaint(3, Color.GREEN);
        return chart;
    }
    /**
     * Creates an Average dataset.
     * @return An average dataset.
     */
    private XYDataset createAvgDataset() {    
        final XYSeriesCollection data = new XYSeriesCollection();
        XYSeries series0 = new XYSeries("Series1");
        XYSeries series1 = new XYSeries("Series2");
        XYSeries series2 = new XYSeries("Series3");
        for(int i=0;i<myData.length;i++)
        {
            series0.add(myData[i][5], myData[i][0]);
            series1.add(myData[i][5], myData[i][1]);
            series2.add(myData[i][5], myData[i][2]);
        }
        data.addSeries(series0);
        data.addSeries(series1);
        data.addSeries(series2);
        return data;
    }    

    /**
     * Main program that creates a thermometer and places it into
     * a JFrame.
     *
     * @param argv Command line arguements - none used.
     */
    public static void main(final String[] argv) {

        final PolarCharDemo demo = new PolarCharDemo("Polar Chart");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }   
}

共有1个答案

董建茗
2023-03-14

我不确定我是否理解您的数据,但将这些值规范化到允许将原点(0,0)添加到数据的角度范围可能会有所帮助。在下面的示例中,我选择了零。

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/** @see http://stackoverflow.com/a/12607586/230513 */
public class PolarCharDemo {

    private static final String title = "PolarChart";
    private static final double START = 0;
    private static final double END = 145;

    private void display() {
        JFrame f = new JFrame(title);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ChartPanel panel = new ChartPanel(createChart(createDataset()));
        panel.setPreferredSize(new Dimension(500, 500));
        f.add(panel);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private JFreeChart createChart(XYDataset dataset) {
        JFreeChart chart = ChartFactory.createPolarChart(
            title, dataset, true, false, false);
        PolarPlot plot = (PolarPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.white);
        plot.setAngleGridlinePaint(Color.black);
        plot.setRadiusGridlinePaint(Color.lightGray);
        DefaultPolarItemRenderer r = (DefaultPolarItemRenderer) plot.getRenderer();
        r.setFillComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
        for (int i = 0; i < dataset.getSeriesCount(); i++ ) {
            r.setSeriesFilled(i, true);
            r.setShapesVisible(false);
            r.setDrawOutlineWhenFilled(false);
        }
        NumberAxis rangeAxis = (NumberAxis) plot.getAxis();
        rangeAxis.setTickLabelsVisible(false);
        return chart;
    }

    private XYDataset createDataset() {
        XYSeriesCollection result = new XYSeriesCollection();
        for (int r = 4; r > 0; r--) {
            XYSeries series = new XYSeries(title + String.valueOf(r));
            series.add(0, 0);
            for (int t = (int) START; t <= END; t++) {
                series.add(t, r);
            }
            result.addSeries(series);
        }
        return result;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new PolarCharDemo().display();
            }
        });
    }
}
 类似资料:
  • 问题内容: 用Python方式填充数字字符串的最左端方法是在其左侧添加零,即数字字符串具有特定的长度? 问题答案: 字符串: 字符串格式化文档。

  • 问题内容: 抱歉,如果已经提出此问题,我已经进行了深入搜索,什么也没有。 现在,我知道: 会将我的价格填充到左侧的零,因此价格为25将得出 00025 如果我想将它们向右填充,结果是 25000 怎么办?我该如何 仅 使用 String.format 模式呢? 问题答案: 您可以使用: 我可以只使用格式模式吗? 就像方法一样使用。从这篇文章中,您将看到输出空间是硬编码的,因此必须使用。

  • 问题内容: 在数组末尾加零的更Python方式是什么? 在我的实际用例中,实际上我想将数组填充到最接近的1024倍数。例如:1342 => 2048,3000 => 3072 问题答案: 使用mode可以满足您的需要,在这里我们可以传递一个元组作为第二个参数来告诉每个大小要填充多少个零,例如a将在左边填充 2个 零,在右边填充 3个 零: 给出为: 也可以通过将元组的元组作为填充宽度来填充2D n

  • 抱歉,如果这个问题已经提出,我已经做了深入的搜索,什么都没有。 现在,我知道: 会在左边用0填充我的价格,所以25的价格会导致00025 如果我想把它们垫在右边,结果是25000呢?如何仅使用String.format模式?

  • 问题内容: 我正在使用DecimalFormat将双精度格式设置为2个小数位,如下所示: 它可以工作,但是如果我有一个像20这样的数字,它就给我这个: 我想要这个: 有什么建议? 问题答案: DecimalFormat类用于将十进制数字值转换为String。在您的示例中,您将使用来自format()方法的String并将其放回double变量中。如果然后输出该double变量,则不会看到格式化的字

  • 问题内容: 我对PostgreSQL相对较新,并且我知道如何在SQL Server中用左数零填充数字,但是我在PostgreSQL中努力解决这个问题。 我有一个数字列,其中最大位数为3,最小位数为1:如果是一位,它的左边有两个零,如果是两位,则有1,例如001、058、123。 在SQL Server中,我可以使用以下命令: 在PostgreSQL中不存在。任何帮助,将不胜感激。 问题答案: 您可