SWT/Eclipse RCP アプリケーションでチャートを描画するための次のライブラリを知っています。
- Eclipse BIRT Chart Engine (使用方法に関する記事へのリンク)
- JFreeChart
SWT できれいなグラフを描画するための他のライブラリはありますか? または、一般的に Java のチャートですか? 結局のところ、いつでも画像を表示できます...
SWT/Eclipse RCP アプリケーションでチャートを描画するための次のライブラリを知っています。
SWT できれいなグラフを描画するための他のライブラリはありますか? または、一般的に Java のチャートですか? 結局のところ、いつでも画像を表示できます...
BIRT や JGraph は使用していませんが、SWT アプリケーションでは JFreeChart を使用しています。SWT で JFreeChart を使用する最良の方法は、コンポジットを AWT フレームにして、JFreeChart の AWT 機能を使用することです。これを行う方法は、コンポジットを作成することです
Composite comp = new Composite(parent, SWT.NONE | SWT.EMBEDDED);
Frame frame = SWT_AWT.new_Frame(comp);
JFreeChart chart = createChart();
ChartPanel chartPanel = new ChartPanel(chart);
frame.add(chartPanel);
異なるプラットフォーム間での実装に関していくつかの問題があり、その中の SWT コードは非常に貧弱です (これについては、Gilbert 氏は SWT をよく知らず、AWT 用に作成されています)。私の 2 つの最大の問題は、AWT イベントが SWT を介してバブルアップするため、いくつかの誤ったイベントが発生することと、AWT フレームをラップするために JFreeChart が大幅に遅くなることです。
@zvikico
グラフを Web ページに配置するというアイデアは、おそらく適切な方法ではありません。最初にいくつかの問題があります。それは、異なるプラットフォームでの Web ブラウザーの統合を Eclipse が処理する方法が一貫していないことです。また、Web 用のいくつかのグラフ作成パッケージについての私の理解から、それらはそのセットアップを必要とするサーバー側であり、私のものを含む多くの企業もプロキシ サーバーを使用しており、これが Eclipse Web ブラウジングで問題を引き起こすことがあります。
SWTChart は、折れ線グラフ、散布図、棒グラフ、および面グラフで良好な結果を示します。API は簡単で、Web サイトには多数の例があります。Google で検索してから、1 時間もかからずにデータを表示できるようになりました。
あなたもこれが好きかもしれません
それはあなた自身のデータプロバイダーでリアルタイムデータをプロットする能力を持っています。
私が使用したのはJChart2Dと JFreeChart です。夏の間、私はライブ プロッター アプリケーションを作成し、そのために JFreeChart を使用しました。プロジェクトを開始した人は JChart2D を使用していましたが、グラフのルック アンド フィールを微調整するための十分なオプションがないことがわかりました。
JChart2D は非常に高速であるはずなので、ライブ プロットを行う必要がある場合は、JFreeChart で 1 秒間に数回プロットを実行しても問題はありませんでしたが、これを参照してください。
java2s.comにはチャート作成ライブラリのかなりのリストもあります
また、Eclipse RCP アプリ用のグラフ作成ライブラリも探していましたが、ここで Caleb の投稿に出くわしました。私にとっては、JFreeChart よりもはるかに高速であり、拡張も容易です。本当に何かについて文句を言わなければならない場合は、Javadoc をもう少し冗長にすることができますが、これは他のすべてが優れていることを示しているだけです。
いくつかのオプションを評価した後、Eclipse プラグインでプロットを表示するために JavaScript ライブラリを使用することにしました。zvikico が既に示唆しているように、ブラウザーで HTML ページを表示することが可能です。HTML ページでは、JavaScript ライブラリの 1 つを利用して実際のプロットを行うことができます。Chartist を使用している場合は、コンテキスト メニューから画像を SVG ファイルとして保存できます。
一部の JavaScript グラフ作成ライブラリ:
D3js: http://d3js.org
その他の JavaScript チャート作成フレームワーク: https://en.wikipedia.org/wiki/Comparison_of_JavaScript_charting_frameworks
チャーティストの例の画像:
Java コードの例:
package org.treez.results.chartist;
import java.net.URL;
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class WebViewSample extends Application {
private Scene scene;
@Override
public void start(Stage stage) {
// create the scene
stage.setTitle("Web View");
Browser browser = new Browser();
scene = new Scene(browser, 750, 500, Color.web("#666970"));
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
class Browser extends Region {
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
public Browser() {
//add the web view to the scene
getChildren().add(browser);
//add finished listener
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
executeJavaScript();
}
});
// load the web page
URL url = WebViewSample.class.getResource("chartist.html");
String urlPath = url.toExternalForm();
webEngine.load(urlPath);
}
private void executeJavaScript() {
String script = "var chartist = new Chartist.Line(" + "'#chart'," + " " + "{"
+ " labels: [1, 2, 3, 4, 5, 6, 7, 8]," + "series: [" + " [5, 9, 7, 8, 5, 3, 5, 44]" + "]" + "}, " + ""
+ "{" + " low: 0," + " showArea: true" + "}" + "" + ");" + " var get = function(){return chartist};";
webEngine.executeScript(script);
Object resultJs = webEngine.executeScript("get()");
//get line
JSObject line = (JSObject) resultJs;
String getKeys = "{var keys = [];for (var key in this) {keys.push(key);} keys;}";
JSObject linekeys = (JSObject) line.eval(getKeys);
JSObject options = (JSObject) line.eval("this.options");
JSObject optionkeys = (JSObject) options.eval(getKeys);
options.eval("this.showLine=false");
}
@Override
protected void layoutChildren() {
double w = getWidth();
double h = getHeight();
layoutInArea(browser, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER);
}
@Override
protected double computePrefWidth(double height) {
return 750;
}
@Override
protected double computePrefHeight(double width) {
return 500;
}
}
HTML ページの例:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="chartist.min.css">
</head>
<body>
<div class="ct-chart" id="chart"></div>
<script type="text/javascript" src="chartist.js"></script>
</body>
</html>
これを機能させるには、chartist.js と chartist.min.css をダウンロードして、html ファイルと同じ場所に配置する必要があります。Web からそれらを含めることもできます。別の例については、こちらを参照してください: https://www.snip2code.com/Snippet/233633/Chartist-js-example
編集
D3.js の Java ラッパーを作成しました。
ILOG JViews Chartsもありますが、これは十分な機能を備えているように見えますが、余裕があればの話ですが。 Eclipse での使用に関する追加情報を次に示します。
3D データをプロットするためのシンプルな Java ライブラリであるjzy3dを試すことをお勧めします。これは、Java、AWT、Swing、または SWT 用です。
JChartsは別のオプションです。JFreeChart に似ていますが、ドキュメントは無料です。SWT を直接サポートしていませんが、いつでも画像を生成して SWT フレームに埋め込むことができます。
SWT ビューに Web ページを埋め込むのは非常に重要です。最近試してみましたが、非常にうまく機能します。HTML 用の美しいチャート コンポーネントがたくさんあり、オプションになる可能性があります。コンポーネントがクライアント側のみであることを確認してください (サーバーを起動する場合を除く)。
私は Flash をテストしていませんが、動作させることができると確信しています (当然、これは、ソフトウェアに Flash プラグインをインストールする必要があることを意味します)。
JGraph もありますが、それがグラフ (つまり、ノードとエッジ) だけのものなのか、それともチャートも対象なのかはわかりません。