【问题标题】:How can I transfer dots to line in JFreeChart?如何将点转移到 JFreeChart 中的线?
【发布时间】:2017-12-09 20:23:56
【问题描述】:

我在将 JFreeChart 生成的点转换为线时遇到问题。

首先,有一些真正帮助我达到这一点的来源

其次,这是我的代码

  import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Dimension;
  import java.awt.EventQueue;
  import java.awt.event.ActionEvent;
  import java.util.*;
  import javax.swing.AbstractAction;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  import org.jfree.chart.*;
  import org.jfree.chart.axis.NumberAxis;
  import org.jfree.chart.plot.PlotOrientation;
  import org.jfree.chart.plot.XYPlot;
  import org.jfree.chart.renderer.xy.XYItemRenderer;
  import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
  import org.jfree.data.xy.XYDataset;
  import org.jfree.data.xy.XYSeries;
  import org.jfree.data.xy.XYSeriesCollection;



public class x_y_2 extends JFrame {

private static final String title = "Connecting The Dots";
private XYSeries added = new XYSeries("Added");
private LinkedList<XYSeries> ls = new LinkedList<>();

public x_y_2(String s) {
    super(s);
    final ChartPanel chartPanel = createDemoPanel();
    this.add(chartPanel, BorderLayout.CENTER);
    JPanel control = new JPanel();

    JLabel label = new JLabel("Enter 'x' value");
    JTextField Field_x = new JTextField();
    Field_x.setPreferredSize( new Dimension( 100, 24 ));

    JLabel label2 = new JLabel("Enter 'y' value");
    JTextField Field_y = new JTextField();
    JLabel error = new JLabel("importent* in case no value is entered,value  
     is set to '1' ");
    error.setForeground(Color.RED);
    Field_y.setPreferredSize( new Dimension( 100, 24 ));

    control.add(label);
    control.add(Field_x);
    control.add(label2);
    control.add(Field_y);

    control.add(new JButton(new AbstractAction("Add") {

        @Override
        public void actionPerformed(ActionEvent e) {
                if (Field_x.getText().isEmpty()) {
                    Field_x.setText("1"); ; 
                }
                if (Field_y.getText().isEmpty()) {
                    Field_y.setText("1"); 
                }
            Double x = Double.parseDouble(Field_x.getText());
            Double y = Double.parseDouble(Field_y.getText());

            added.add(x,y);
            ls.add(added);
            Field_x.setText("");
            Field_y.setText("");       
        }
    }));
    this.add(control, BorderLayout.SOUTH);
    control.add(error);
}
private ChartPanel createDemoPanel() {
    JFreeChart jfreechart = ChartFactory.createScatterPlot(
        title, "X", "Y", createSampleData(),
        PlotOrientation.VERTICAL, true, true, false);

    return new ChartPanel(jfreechart);
}


private XYDataset createSampleData() {
    XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
    xySeriesCollection.addSeries(added);
    return xySeriesCollection;
}

public static void main(String args[]) {
            x_y_2 demo = new x_y_2(title);
            demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            demo.pack();
            demo.setLocationRelativeTo(null);
            demo.setVisible(true);

}}

这是输出中的图像

我的主要问题是点数。我该怎么做?我试过用这种方法做类似的事情

   renderer.setSeriesLinesVisible

但是,我没有为我工作。

编辑:

解决办法就是这样写:

JFreeChart jfreechart = ChartFactory.createXYLineChart(
    title, "X", "Y", createSampleData(),
    PlotOrientation.VERTICAL, true, true, false);

代替这个:

JFreeChart jfreechart = ChartFactory.createScatterPlot(
    title, "X", "Y", createSampleData(),
    PlotOrientation.VERTICAL, true, true, false);

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    here 所述,您选择的ChartFactory 使用显示形状但不显示线条的XYLineAndShapeRenderer。你可以

    • 选择不同的工厂,如图here

    • 写你自己的工厂,如图here,或者

    • 获取对渲染器的引用并使线条显式可见:

      private ChartPanel createDemoPanel() {
          JFreeChart jfreechart = ChartFactory.createScatterPlot(
              title, "X", "Y", createSampleData(),
              PlotOrientation.VERTICAL, true, true, false);
          XYPlot plot = jfreechart.getXYPlot();
          XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
          renderer.setBaseLinesVisible(true);
          return new ChartPanel(jfreechart);
      }
      

    【讨论】:

    • 你很优秀!看了很多你的回答,非常感谢。如果你有时间,我还有另一个问题.. 是否可以只画点,然后在添加所有点并单击完成后,算法将开始,只画一条线到某个点但不是全部,我真的有这部分有问题,我会感谢任何帮助,所以我的问题很简单:所有的点都添加了,我可以画一条线到一些但不是全部吗?
    • 你需要一个自定义渲染器,用于example;如果您提出新问题,请引用此答案。
    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多