Javaで簡単な折れ線グラフを描画する
私のプログラムでは、単純な得点の折れ線グラフを描きたいと考えています。テキストファイルがあり、各行には整数のスコアがあり、それを読み込んでグラフクラスの引数として渡したい。私が見たすべての例は、メソッドをmainと同じクラスで実装していましたが、私はそれをしません。
オブジェクトに配列を渡してグラフを生成したいのですが、paintメソッドを呼び出すときにGraphics g.を要求されます。今のところ、こんな感じです。
public class Graph extends JPanel {
public void paintGraph (Graphics g){
ArrayList<Integer> scores = new ArrayList<Integer>(10);
Random r = new Random();
for (int i : scores){
i = r.nextInt(20);
System.out.println(r);
}
int y1;
int y2;
for (int i = 0; i < scores.size(); i++){
y1 = scores.get(i);
y2 = scores.get(i+1);
g.drawLine(i, y1, i+1, y2);
}
}
}
とりあえず、簡単な乱数発生器を挿入して、配列を埋めてみました。
私は既存のフレームを持っており、基本的にGraphクラスをインスタンス化してパネルをフレームに取り付けたいと思っています。ところで、この質問はとても混乱しているようで本当に申し訳ないのですが、私はほとんど寝ていません...。
私のメインステートメントにあるコードは
testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph graph = new Graph();
testFrame.add(graph);
SSCEが何なのか正確には分かりませんが、これは私の試みです。
public class Test {
JFrame testFrame;
public Test() {
testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph graph = new Graph();
testFrame.add(graph);
testFrame.setBounds(100, 100, 764, 470);
testFrame.setVisible(true);
}
Graph.java
public class Graph extends JPanel {
public Graph() {
setSize(500, 500);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D gr = (Graphics2D) g; // This is if you want to use Graphics2D
// Now do the drawing here
ArrayList<Integer> scores = new ArrayList<Integer>(10);
Random r = new Random();
for (int i : scores) {
i = r.nextInt(20);
System.out.println(r);
}
int y1;
int y2;
for (int i = 0; i < scores.size() - 1; i++) {
y1 = (scores.get(i)) * 10;
y2 = (scores.get(i + 1)) * 10;
gr.drawLine(i * 10, y1, (i + 1) * 10, y2);
}
}
}
24
6
お客様のコードの問題点とご提案
pack()
を呼び出す。例えば、こんな感じです。
というようなグラフが出来上がります。 。
Hovercraft Full Of Eelsのソリューションを補完するだけです。
私は彼のコードを作り直し、少し調整して、グリッドと軸ラベルを追加しました。これで、Y軸は存在する最小値から最大値までになります。 ゲッター/セッターを2つ追加する予定でしたが、必要ありませんでした。必要に応じて追加できます。
これがGistリンクです。以下のコードも貼り付けます:GistのGraphPanel。
こんな感じです: 例。!
または、単にJFreechartライブラリを使用する - http://www.jfree.org/jfreechart/ .
いくつかの行のコードで、折れ線グラフのすべての描画を処理する多くのオープンソースプロジェクトが存在します。 XChartライブラリを使用して、カップルのテキスト(
CSV
)ファイルのデータから折れ線グラフを描く方法を次に示します。 免責事項:私はプロジェクトの主任開発者です。この例では、
に2つのテキストファイルが存在します。/ CSV / CSVChartRows /
。 ファイルの各行はプロットされるデータポイントを表し、各ファイルは異なるシリーズを表していることに注意してください。series1
にはx
、y
、およびerror bar
のデータが含まれていますが、series2
にはx
とy
のデータしか含まれていません。series1.csv。
series2.csv。
ソースコード。
結果プロット。
。![ここに画像の説明を入力してください](http://i.stack.imgur.com/3hme3.png。)。
パネルのpaintComponentメソッドをオーバーライドして、カスタム描画ができるようにします。こんな感じで。
Hovercraft Full Of Eelsの答えは非常に良いですが、プログラムで機能させるために少し変更する必要がありました。
代わりに。
私が彼のやり方を使えば、グラフィックは逆さまになるからです。
(ランダムな値の代わりにハードコードされた値(例:1,3,5,7,9)を使用した場合、それが表示されます)。