- ベストアンサー
エンドユーザが簡単にグラフを描くのに最適なプログラムは?
ども。 前回質問を投稿したのですが、回答が少なかったのでもう一度仕切りなおしで。 ウェブブラウザなどでエンドユーザが簡単にグラフを描くのに最適なプログラムは何かご指導をいただければと思います。 要求する仕様や条件は、前回の投稿を参照していただきたいと思います。 前回の投稿内容です。 QNo.4073440 http://okwave.jp/qa4073440.html 当方はjavaかAjaxと考えています。 ■javaを使い、フォームからの入力から計算し、グラフを描画、ファイル出力。 と、漠然とフローを考えていましたが、 ■Ajaxを利用して、Google MAPのように動的に条件を変えられ、グラフも動的に更新される。 というような欲張りなフローも魅力的に感じてきました。 まだ、javaもAjaxもぜんぜんわかりませんが、方向性の検討がつきません。そのほかの提案もいただいたのですが、もう少し検討したいと思いますので、ぜひ意見をいただきたいと思います。 専属のプログラマではないので、シンプルかつ短時間でできるものを望みますが、TCOや機能も考慮して判断したいと考えています。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2の者です。 >perl、rubyの方が繰り返しの実行が楽というのは~ プログラムでグラフを描くのでしょうかというのにつながるのですが、 毎回描きたいグラフに合わせて毎回プログラムを作るとなると、 Javaのようなコンパイラのソフトですと、コンパイルして実行となります。 スクリプト系ですとエディタで編集して インタプリタに読み込ませる形で実行すればすぐに実行できます。 ただ、どうも他の方とのやり取りを見ていると、 紹介したgnuplotのようなソフトを専用化して簡単に使える物がほしいのかと思います。 >グラフ描画の必要な機能として条件が変わる点の値をグラフ内にラベルと値を表示することが必要なのです。 gnuplotでは任意の座標にラベルをつけたり、矢印を出したりできます。 http://t16web.lanl.gov/Kawano/gnuplot/label2.html#4.4 グラフの描き方の設定ファイルとデータのファイルを用意して、 それを読み込ませてグラフを描くこともできるので、 質問者さんの方で雛形を用意して、 実際の使用者にはデータファイルを差し替えるなどで対応するのもありかと思います。 もちろんスクリプト言語と組み合わせるのもすばらしいと思います。
その他の回答 (4)
- ssr-y6
- ベストアンサー率71% (5/7)
以下は、3次関数のグラフを画像として作成するサーブレットとそれを表示するJSPのサンプルです。 -----サーブレット----- package qa4096220; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; public class graph extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { double x, y, P[] = new double[4]; int i; for (i = 0; i < 4; i ++) { try { P[i] = Double.parseDouble(req.getParameter("P" + Integer.toString(i))); } catch (Exception e) { P[i] = 0; }; }; try { BufferedImage OSI = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB); for (i = -250; i < 250; i ++) { x = (double)i / 25.0; y = P[3]*x*x*x + P[2]*x*x + P[1]*x + P[0]; if ((y < 10.0) && (y > -10.0)) OSI.setRGB((int)(x * 25.0 + 250.0), (int)(-y * 25.0 + 250.0), 0xFF0000); }; res.setContentType("image/jpeg"); ImageIO.write(OSI, "jpeg", res.getOutputStream()); } catch (Exception e) { System.out.println(e.toString() + ":Get"); }; }; } -----JSP----- <%@ page contentType="text/html; charset=UTF-8" %> <html> <head> <title>Graph</title> <% String ad = "http://192.168.100.100:8080/minnaservlet/4096220.jpeg"; %> <script> function GetGraph() { document.getElementById("img").src = "<%=ad%>" + <% for (int i = 0; i < 4; i ++) { %>"<%=i==0?"?":"&"%>P<%=i%>=" + document.getElementById("P<%=i%>").value + <%}%> ""; }; </script> </head> <body> <center><img id="img" src="<%=ad%>"></center><br> <form> y = <input type="text" id="P3">x^3 + <input type="text" id="P2">x^2 + <input type="text" id="P1">x + <input type="text" id="P0"> <input type="button" value="描画" OnClick="javascript:GetGraph()"><br> </form> </body> </html>
お礼
ども。 Amuro Rayです。 ほったらかしですみません。 ssr-y6さんソースコードまで頂いてありがとうございます。 java系プログラムのプロフェッショナルの方でしょうか? 感服です。ぜひ参考に…、としたいところですが、申し訳ないです。 まだjavaは???です。 まずは部内で作って広めようとたくらんでいたのですが、VPNネットワークシステムのインフラ整備を任され、ツールの一つをどうにかするという次元ではなくなってしまい翻弄されている次第です。 突然の金融危機で設備投資が難しい中、本当少ない予算で実現できるのか疑心暗鬼です。 もしネットワークシステムが導入できたらウェブサーバーは当然扱いますので、ぜひブラウザ上で実現したいと考えています。 ありがとうございました。 当分先ですがグラフ機能に着手できるようになったら、また質問することがあると思いますので、よろしくお願いします。
- superside0
- ベストアンサー率64% (461/713)
javaというか、javaアプレットを作っておいて、 ブラウザ上でそれをアプリケーションとして動かすというイメージを期待されているんですかね。 サーバー上にデータを保存するのではないなら、できなくはないかと思いますし、FLASHでも可能ではと。 ただ、どちらにしても、それをダウンロードさせる為の、サーバーが必要ですが、リンク先の要件定義によると、サーバーレスが前提なんですよね? ということは、Ajaxはこの時点で、選択肢から消えますし、 そもそも、わざわざブラウザ上で動かすために苦労しなくても、 Excel上に、 エンドユーザーでも簡単に入力できるようにナビジェーションされた、入力フォームと、 グラフ作成してHTML保存でgif化する一連作業をマクロを作ってボタン化 というxlsを利用者に配布すれば、簡単に実現できるかと思います。
お礼
superside0さん、遅くなってすみません。 まさにブラウザ上でアプリケーションを動かしたかったのです。 Flashなどいろいろな方法があって便利やら迷いやらです。 スタンドアロンの動作が一番都合がよいのですが、サーバー上で動作させる方が結果データの再利用などを考慮するとそちらの方が良いのかと思います。 Excelで一応作ってみてはいるのですが、玄人には使い方がそれなりにわかってもらえるのですが、よくわからない人にとってはフォームがあろうと無かろうとほとんどわからず、イレギュラーな操作を行わないように機能を制限すれば、急に使えなくなったと言い出すしまい…。 なのでグラフの描画機能はブラックボックスにして、フォームやイメージの操作などで制限や機能を導いてしまうほうが楽なのかなと。 また配布したxlsファイルは、ウイルスのように亜種が出回って正しく機能するものがどれだかわからなくなってしまってます。(お恥ずかしい次第です。組織としての意識が無いんですね。) 愚痴になってしまいましたが、ありがとうございました。
- ceita
- ベストアンサー率24% (304/1218)
プログラムでグラフを描くのでしょうか? グラフを描くためのソフトを質問者さんが作るのでしょうか? ユーザにプログラム言語を使用させるのならば、 perlやrubyなどのスクリプト系の言語の方が 繰り返し実行するのが楽なので、よいと思います。 単純にグラフを描くのであれば、 gnuplotなどのグラフ作成ソフトを使用するのがいいと思います。
補足
早速の回答ありがとうございます。 プログラムで描画します。 コーディングは自ら書くかベンダーに依頼することも考えています。 perl、rubyの方が繰り返しの実行が楽というのは、グラフ描画プログラムがあり、それを実行させるにはということでしょうか?(すみません。この辺がよくわかりません。ちなみにNamazuでperlスクリプトがどのような動きをしているのかぐらいしか経験がないもので…。) gnuplotは初めて拝見させていただきました。 このような優れたグラフ描画ソフトウェアがあるとは知りませんでした。ありがとうございます。しかもさまざまなプラットホームに対応していますね。 ですが、後から投稿で申し訳ないのですが、グラフ描画の必要な機能として条件が変わる点の値をグラフ内にラベルと値を表示することが必要なのです。その値は条件によって変化します。 グラフは製品の能力線図をあらわすので、具体的に数値の表示が求められています。 gnuplotをもっとよく知りperlなどのスクリプト言語もあわせて使うなどいろいろ工夫するとそれに近いこともできそうな気がしますが、それは難しいですか? さらに意見がありましたら引き続きお願いします。
- koko_u_
- ベストアンサー率18% (459/2509)
リンク先もちょろっと読みましたけど、お仕事で使うんですよね。 RFP 書いてベンダーに提案してもらうのが早くて確実だと思いますよ。 見た目がシンプルだからと言って、プログラムもシンプルで済むわけではありません。普通は逆です。
補足
早速の回答ありがとうございます。 >RFP 書いてベンダーに提案してもらうのが早くて確実… 仕事で利用するのでおっしゃるとおり要求仕様を作成の上SIさんなどに依頼するのが最もですね。(実際その方が楽なのですが…) 今判断がつきにくい所があります。 利用したい機能が社内技術部の方が個人的にExcleで作ってしまっていて、当然作者はカスタマイズして使いこなせるのですが、そうでない方は当たり前なのですが使えない状況です。 「フローと仕様がわかるのだから、これぐらい作れるだろ。」という見解と計測器と制御器のメーカーでもあるので、実際にプログラミングをしているのだから、ベンダーに依頼するほど必要ないと思われています。 実務内容はさわりだけでしたが、転勤前にはその部署に所属していて、C++でローパス、ハイパスフィルタの減衰特性のグラフ化やコード作成をしてきた経験もあり、そのときから、「君はJAVAをやってもらいたい。」とも言われていました。 効率やコスト、時間を考えれば即アウトソーシングが正解なのですが、それがjavaなのか、Ajaxなのか、それ以外なのか提案前に知っておこうと思ったので質問をさせていただいた次第です。 どの手段がよいか下調べでもあり、また個人でできるものなのかどうかも知りたいですね。(隠れプログラマになりたい・・・) >見た目がシンプルだからと言って、プログラムもシンプルで済むわけではありません。普通は逆です。 そうですね。同感です。 社内でGoogle MAPを利用している方はこれがどんなに大変なコードでかかれているかなんてわからないですよね。そこがプログラマにとって悲しいところですが、でも本来プログラムはそうであるべきだと思います。 なので要求も「エンドユーザが簡単に…」という点は外せないと思います。 RFPの件、ありがとうございました。 参考程度にベンダーさんに声をかけてみようと思います。 その他ありましたらぜひ回答をいただければと思います。
お礼
ceitaさん、遅くなりました。 回答ありがとうございます。 java系はコンパイル後実行、スクリプト系はインタプリタ型実行でしたね。 基本的な違いを忘れていました。 機能としてはgnuplotで目的の機能を有したテンプレートを用意できれば…、ということですね。 そうですね。 ただすみません。 今ネットワークシステムの構築業務を任されているので、そちらに120%従事でこちらの方は当分断念せざるを得ません。 必ず実現しようと考えていますので、ひそかに努力しようと思います。 ありがとうございました。