2008-08-22 23 views
18

私はSWT/EclipseのRCPアプリケーションでグラフを描画するための次のライブラリを知っている:SWTの美しいグラフのライブラリ?

SWTで美しいグラフを描くためにそこにありますか?またはJavaのチャートは一般的ですか?結局のところ、画像を常に表示することができます...

答えて

11

私はBIRTやJGraphを使用していませんが、私はSWTアプリケーションでJFreeChartを使用しています。 SWTでJFreeChartを使用する最良の方法は、コンポジットをAWTフレームにし、JFreeChartのAWT機能を使用することです。これを行う方法があり、異なるプラットフォーム間での実装に関してはいくつかの問題があるだけでなく、その中にSWTコードはその防衛に氏ギルバートは、SWTを知らない(非常に悪いです

複合

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); 
を作成することですよくAWT用に作られています)。私の2つの最大の問題は、AWTのイベントがSWTを介してバブルアップする際に、誤ったイベントが発生し、AWTフレームをラップすることによるものです.JFreeChartはかなり遅くなります。

@zvikico

Webページにチャートを置くというアイデアは、おそらく行くのに最適な方法ではありません。まず、異なるプラットフォーム上でWebブラウザを統合する方法をEclipseがどのように扱うのかが一貫していないという問題がいくつかあります。また、Web用のいくつかのグラフ化パッケージを理解しているので、セットアップを必要とするサーバー側でも、私のプロキシサーバーを含む多くの企業が、時にはEclipse Webブラウジングで問題を引き起こします。

+0

FYI、はJFreeChartを持っている実験的なSWTの統合を参照してください。本番アプリケーションでは、これをうまく使用します。 –

+0

残念ながら、JFreeChartのLGPLライセンスはEclipse Public License(EPL)と互換性がありません。 – Stefan

0

JGraphもありますが、これはグラフ(ノードやエッジ)のみであるのか、それともチャートであればわかりません。

0

これは別のものです.WSTビューにウェブページを埋め込むのは非常に難しいことです。私は最近それを試して、それは非常にうまく動作します。これはどこにあるのかを見ることができます:HTMLのための美しいチャートコンポーネントがたくさんありますが、それはオプションになる可能性があります。コンポーネントをクライアント側でのみ使用するようにしてください(サーバーを起動しない場合)。

私はFlashをテストしていませんが、実際には動作させることができます(当然、ソフトウェアにはFlashプラグインがインストールされている必要があります)。

1

余裕があれば、かなり完成したと思われるILOG JViews Chartsもあります。 Hereは、eclipseで使用する場合の追加情報です。

+0

JViewsはRogueWaveによって購入されました:http://www.roguewave.com/products/visualization/jviews/whats-new – Stefan

0

JChartsが別のオプションです。 JFreeChartに似ていますが、ドキュメントは無料です。 SWTを直接サポートするわけではありませんが、イメージを生成してSWTフレームに埋め込むことができます。

8

SWTChartは、線グラフ、散布図、棒グラフ、および領域グラフで良好な結果を示します。 APIはまっすぐであり、ウェブサイトには多数の例があります。私はそれをGoogleから1時間以内に私のデータを見ることにしました。

SWTChart

+0

SWTChartはチャートリアルタイムデータとどのように関連していますか?私が知ることから、データシリーズはチャート全体にロードされており、新しい値が利用可能になるとそのデータセットを更新する方法はありません。私はこれがパフォーマンス上の問題だと思う。 – akatkinson

+0

SWTChartはEPLのライセンスを受けています。 – Stefan

+0

svgまたはpngエクスポートをサポートしていないようです。 – Stefan

2

私が使用した1はJChart2DとはJFreeChartです。私は夏にライブプロッタアプリケーションを行い、そのためにJFreeChartを使用しました。プロジェクトを開始した人はJChart2Dを使っていましたが、チャートのルック・アンド・フィールを調整するのに十分なオプションがないことがわかりました。

JChart2Dは非常に高速なので、ライブプロットを行う必要がある場合は、JFreeChartがプロットを1秒間に数回実行することはありませんでしたが、それを見てください。

も非常に私が提案するjava2s.com

+0

JChart2DとJFreeChartの両方がLGPLでライセンスされています。 – Stefan

1

上のグラフ作成ライブラリのリストは、あなたはjzy3d、3Dデータをプロットするための単純なJavaライブラリが存在してみてください。これは、Java用、AWT、SwingまたはSWT用です。

+0

Jz3dはBSDでライセンスされています。 – Stefan

5

あなたはそれが独自のデータプロバイダにリアルタイムデータをプロットする能力を持ってthis 1あまりにも

を好むかもしれません。私はまた、EclipseのRCPアプリケーションのためのチャート作成ライブラリを探していた

enter image description here

+1

これはEPLの下でライセンスされたNebula Visualization Widgetsの一部です。開始ページは次のとおりです:http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/plain/widgets/visualization /org.eclipse.nebula.visualization.xygraph/html/GettingStarted.html – Stefan

2

は、ここにカレブのポストにつまずいたと間違いなく私自身は今SWTChartをお勧めすることができます。 JFreeChartよりもはるかに高速で、簡単に拡張できます。私が本当に何かについて不平を述べなければならないのであれば、javadocはもう少し冗長かもしれませんが、これは他のすべてが素晴らしいと言うことです。

1

いくつかのオプションを評価した後、Eclipseプラグインでプロットを表示するためにJavaScriptライブラリを使用することにしました。 zvikicoが既に提案しているように、ブラウザにhtmlページを表示することは可能です。 htmlページでは、JavaScriptライブラリの1つを利用して実際のプロットを行うことができます。チャーティストを使用する場合、コンテキストメニューからSVGファイルとして画像を保存することができます。

いくつかのJavaScriptのチャートライブラリ:

チャーティスト例イメージ

enter image description here

例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ファイルと同じ場所に配置する必要があります。あなたはウェブからそれらを含めることもできます。別の例についてはこちらをご覧ください: https://www.snip2code.com/Snippet/233633/Chartist-js-example

編集

私はD3.jsのためのJavaラッパーを作成し、

https://github.com/stefaneidelloth/javafx-d3