Java 在jfreechart中,使类型线(x线)中的标签垂直

Java 在jfreechart中,使类型线(x线)中的标签垂直,java,swing,jfreechart,Java,Swing,Jfreechart,我已经创建了一个应用程序,它将我在jtable中的数据显示在jfreechart中。我的jfreechart版本是折线图。屏幕截图如下所示: 如何使标签在线条上是垂直的,这样看起来就会整齐有序 如何在会议轴值中创建值标签​​和轴类型 这是我的密码 public class LineChartDemo1 extends ApplicationFrame { /** * Creates a new demo. * * @param title the frame title. */ Li

我已经创建了一个应用程序,它将我在jtable中的数据显示在jfreechart中。我的jfreechart版本是折线图。屏幕截图如下所示:

  • 如何使标签在线条上是垂直的,这样看起来就会整齐有序
  • 如何在会议轴值中创建值标签​​和轴类型
  • 这是我的密码

    public class LineChartDemo1 extends ApplicationFrame {
    
    /**
     * Creates a new demo.
     *
     * @param title the frame title.
     */
    List<ReportChart> theDatas;
    
    public LineChartDemo1(final String title, List<ReportChart> chartData) {
        super(title);
    
        this.theDatas = chartData;
        final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartPanel);
    
        Main_Menu.presentase.removeAll(); // My form
        Main_Menu.presentase.setLayout(new java.awt.BorderLayout()); // My form
        Main_Menu.presentase.add(chartPanel); // My form
    }
    
    /**
     * Creates a sample dataset.
     *
     * @return The dataset.
     */
    private CategoryDataset createDataset() {
    
    
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    
        String algorithm1 = "Levensthein";
    
        String algoritma2 = "SmithWaterman";
    
        for (int i = 0; i < Main_Menu.jTable3.getRowCount(); i++) {
    
            Object fileName = Main_Menu.jTable3.getValueAt(i, 1);
            String fileNameToString = namaFile.toString();
    
            Object nilaiLevensthein = Main_Menu.jTable3.getValueAt(i, 2); 
            double value1 = Double.parseDouble(nilaiLevensthein.toString());
    
            Object nilaiSmithWaterman = Main_Menu.jTable3.getValueAt(i, 3);
            double value2 = Double.parseDouble(nilaiSmithWaterman.toString());
    
            dataset.addValue(value1, algoritma1, fileNameToString);
            dataset.addValue(value2, algoritma2, fileNameToString);
    
        }
    
        return dataset;
    
    }
    
    private JFreeChart createChart(final CategoryDataset dataset) {
    
        Object namaFile = Main_Menu.jTable3.getValueAt(0, 0);
        String namaFileKeString = namaFile.toString();
    
        // create the chart...
        final JFreeChart chart = ChartFactory.createLineChart(
                "Persentase Kemiripan", // chart title
                "File-file Pembanding", // domain axis label
                namaFileKeString, // range axis label
                dataset, // data
                PlotOrientation.VERTICAL, // orientation
                true, // include legend
                true, // tooltips
                false // urls
        );
    
        chart.setBackgroundPaint(Color.white);
    
        final CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setRangeGridlinePaint(Color.white);
    
        // customise the range axis...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setAutoRangeIncludesZero(true);
    
        final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
        //renderer.setDrawShapes(true);
    
        renderer.setSeriesStroke(
                0, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{10.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                1, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{6.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                2, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{2.0f, 6.0f}, 0.0f
                )
        );
    
    
        return chart;
    }
    
    }
    
    我成功地使标签在x轴上垂直 这是密码

     private JFreeChart createChart(final CategoryDataset dataset) {
    
        Object fileName = Main_Menu.jTable3.getValueAt(0, 0);
        String fileNameToString = fileName.toString();
    
        // create the chart...
        final JFreeChart chart = ChartFactory.createLineChart(
                "Persentation", // chart title
                "comparingFile", // domain axis label
                fileNameToString , // range axis label
                dataset, // data
                PlotOrientation.VERTICAL, // orientation
                true, // include legend
                true, // tooltips
                false // urls
        );
    
    
        chart.setBackgroundPaint(Color.white);
        ChartFactory.setChartTheme(StandardChartTheme.createDarknessTheme());
        ChartUtilities.applyCurrentTheme(chart);
    
        final CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setRangeGridlinePaint(Color.white);
    
        final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
        renderer.setShapesVisible(true);
        renderer.setUseFillPaint(true);
        renderer.setBaseItemLabelsVisible(true);
    
    
        CategoryAxis catAxis = plot.getDomainAxis();
    
        catAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);
        //catAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 16.0));
    
    
        renderer.setSeriesStroke(
                0, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{10.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                1, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{6.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                2, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{2.0f, 6.0f}, 0.0f
                )
        );
        // OPTIONAL CUSTOMISATION COMPLETED.
    
        return chart;
    }
    
    现在,第二点对我来说仍然是个谜 “如何在会议轴值中创建值标签​​轴类型是什么?”

  • 在域轴上调用
    setVerticalTickLabels()
    ,如图所示

  • 如图所示,创建自定义的
    XYItemLabelGenerator
    ,或
    CategoryItemLabelGenerator
    ,如图所示


  • XylineandShaperEnder和LineandShaperEnder有什么不同?除了其他的不同,
    LineandShaperEnder
    是一个
    CategoryItemRenderer
    ,而
    XylineandShaperEnder
    是一个
    XYItemRenderer
    。从这个例子中,我知道这个“XylineandShaperEnder renderer渲染器=(XylineandShaperEnder)plot.getRenderer();renderer.setBaseItemLabelsVisible(true);“但是我使用的是LineAndShapeRenderer,所以renderer.setBaseItemLabelsVisible(true);不工作您将需要一个
    类别项目标签生成器
     private JFreeChart createChart(final CategoryDataset dataset) {
    
        Object fileName = Main_Menu.jTable3.getValueAt(0, 0);
        String fileNameToString = fileName.toString();
    
        // create the chart...
        final JFreeChart chart = ChartFactory.createLineChart(
                "Persentation", // chart title
                "comparingFile", // domain axis label
                fileNameToString , // range axis label
                dataset, // data
                PlotOrientation.VERTICAL, // orientation
                true, // include legend
                true, // tooltips
                false // urls
        );
    
    
        chart.setBackgroundPaint(Color.white);
        ChartFactory.setChartTheme(StandardChartTheme.createDarknessTheme());
        ChartUtilities.applyCurrentTheme(chart);
    
        final CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setRangeGridlinePaint(Color.white);
    
        final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
        renderer.setShapesVisible(true);
        renderer.setUseFillPaint(true);
        renderer.setBaseItemLabelsVisible(true);
    
    
        CategoryAxis catAxis = plot.getDomainAxis();
    
        catAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90);
        //catAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 16.0));
    
    
        renderer.setSeriesStroke(
                0, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{10.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                1, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{6.0f, 6.0f}, 0.0f
                )
        );
        renderer.setSeriesStroke(
                2, new BasicStroke(
                        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                        1.0f, new float[]{2.0f, 6.0f}, 0.0f
                )
        );
        // OPTIONAL CUSTOMISATION COMPLETED.
    
        return chart;
    }