2012-05-06 10 views
0

私は、それぞれの値が-1と+1の間にあるデータの行列(> 5000rows)を持っています。ヒートマップをSVG形式で生成するためのスクリプトを作成しましたが、実際のデータセットでSVGファイルのサイズが大きくなりました。 Inkscapeは苦労し、レンダリングと画面の更新は本当に遅いです。それをsvgzに圧縮することは役に立ちません。マトリックスデータをSVGのヒートマップとして効率的にレンダリングするにはどうすればよいですか?

x、y、幅、高さ、塗りつぶしの5つの属性を持つ各矩形を使って、各値に対して矩形を描くアプローチを行った。あなたが想像することができるように、96x5000値で、それは多くの矩形です。各属性を整数に変換することにより、ファイルサイズを〜34MBから〜29MBに縮小しました。私が持っていたもう1つのアイデアは、塗りつぶし属性を削除し、各カラーグループごとに1つずつ、10-20クラスの1つに置き換えることでした。私はまだそれをやっているより良い方法がなければならないと思うので、まだ最後のビットをしていない。例として

: -

<rect fill="#000000" height="14" width="10" x="50" y="81" /> 

HTMLで、Iは、短いクラス名またはIDは、カラーグループを参照すると<tr's><th's><table>を、使用したいです。値が0または中間値の場合、クラス名は不要で、<th>はプリセットニュートラルカラーを継承できます。

SVGでは、正式な表指定はないようですが、どうすればこの問題に取り組むべきですか? 私は現在、以下のオプションを検討している: -

  1. display propertyは(悪い文書化)インラインテーブルオプションを持っています。明らかに、それは"an accidental remnant from CSS"になる可能性があります。これは、display:table-row-groupのスタイルを参照するIDを持つ、各行に<g>があることを意味します。
  2. <text>要素を行として使用し、<tspan>をネストして、hereとしてください。
  3. layout managerをECMAScriptで記述してください。

また、XSLTはパワフルで複雑ですが、ウェブブラウザでしか動作しないように思われます。私は理想的には、ベクターグラフィックスエディタで保存、表示、編集できるすべてのファイルを1つのファイルに保存したいと思います.XSLTがこれを可能にするかどうかはわかりません。

これを行う最も効率的な方法は何でしょうか?ファイルサイズはレンダリングの速度ほど重要ではありません。どんな助けでも大歓迎です。

UPDATE: - テキストのネストされたとtspanの者は、何の塗りつぶしや背景色の属性を持っていないよう

  • 2は動作しないでしょう。この例では、背景色を指定するためにrectを使用しています.tspanは塗りの作成方法を提供していません。

私はまた、行の長さは、私がSVGを生成するためのPythonの(c)ElementTree moduleを使用しています。..遅いレンダリングとは何かを持っている可能性があるかどうかを疑問に思い、そしてデフォルトでは、単一の改行文字なしで、すべてのXMLを書き込みます。パーサー/レンダラーは、イメージの各行をXMLの新しい行に分けることができますか?

+0

matplotlibでヒートマップを生成するには、この質問を参照してください。http://stackoverflow.com/q/2369492/1301710 matplotlibを使ってFigureをsvgに保存することができます。それがあなたが探しているものかどうかは分かりません。 – bmu

答えて

1

私はあなたがこのためにキャンバスを使用する方が良いかもしれないと思う。キャンバスを作成し、キャンバスに長方形を描画します。矩形は、キャンバスのビットマップの一部としてのみ存在します。

+0

私はキャンバスの使用を開始したいと思いますが、私はSVGとして保存する方法を知らないでしょう。私はそこにライブラリがあると思いますが、私はHTMLを生成していないので、キャンバスは不適切と思われます。しかし、提案をありがとう –

+1

あなたはSVGを使用する理由を何も与えていない。あなたがしたいのは、見た目のあるデータを表示し、色のついた四角でビットマップのように振る舞うなら、キャンバスはあなたが望むものです。あなたが他の未開示の要件を持っていなければ、ラウンドホールドの正方形のペグです。 –

+0

図は、主にオフラインでの表示、編集、印刷に適している必要があります。ある時点で私はこれをWebアプリケーションに埋め込みますが、私はこれをPythonのsvgplotlibのスタンドアロンモジュールとして開発しました。私はすでに仕事をしてきました、私はそれを速くする方法を知る必要があります! –

関連する問題