2009-05-09 15 views
6

いくつかのデータをさまざまな形でプロットする必要があります。現在、私はMatplotlibを使用しています。私はプロットできてとても満足しています。Barchart(o plot)3D in Python

この質問は、最後のものをプロットする方法です。データはthisのような「距離テーブル」に似ています(私のテーブルは128x128であり、要素あたり3つ以上の番号があります)。

さて、私のデータは、このように3D barchart、またはそれらの多分3は、だろう(私のデータはアルファベット順にソート距離テーブルのように「ランダムに」変化していない)距離テーブルよりもはるかに優れた「構造化」であります完璧。私の理解は、このようなグラフがMatplotlibにないことです。

theseのような(色の付いた)Countor3dを使用することも、imshowのような2Dのものを使用することもできますが、データは実際にはよく表現されていません(データは128ポイントで意味があります。 2点間)。バーの高さは色よりも読みやすく、IMOです。

そこで質問:

  1. はmatplotlibの中の3D棒グラフを作成することが可能ですか?美的目的のために「擬似」3Dレンダリングをした2Dバーチャルだけではなく、2Dドメインを意味することは明らかです。
  2. 前の質問に対する答えが「いいえ」であれば、それを行うことができる他のライブラリがあります?私はPythonベースのものを強く好んでいますが、他のLinuxに優しい可能性もあります。
  3. 前の質問に対する答えが「いいえ」ならば、そのデータを表示する方法はありますか?例えば。 imshowやその他の色付きの方法にスーパーインポーズされた値を持つ表を作成しますか?

答えて

5

MyavaVi2は、3D barcharts(少し下にスクロール)です。いったん持っていればMayaVi/VTK/ETS/etcなどです。それはすべて美しく動作しますが、すべてのものをインストールする作業になる可能性があります。 Ubuntuはすべてパッケージ化されていますが、私が知っている唯一のLinuxディストリビューションです。

+1

よさそうだAN Ubuntuの中にインストールするケーキの一部である、ちょうど 須藤mayavi2 をインストールapt-getを残念ながら、この例では動作しません:enthought.mayaviから を。 MLABのインポート* はImportError:MLAB しばらくという名前のモジュール01)(enthought.mayavi.tools.mlabインポート* 作品から (提案はオンラインで見つける)が、棒グラフを提供していません。 提案? – Davide

+0

mayavi2のバージョンはありますか?私はmlabが3.1.0リリースのために改造されたと信じています、そして、それはドキュメントがカバーしているものです。 – Autoplectic

+0

「mayavi2 -V」は「MayaVi 2.0.2a1」 – Davide

7

今のところmatplotlibには3Dサポートはありませんでしたが、recentlyに追加されました。それ以来、リリースされておらず、ドキュメンテーションも少ししかないので、svnバージョンを使用する必要があります(examples/mplot3d/demo.pyを参照)。私はmplot3dが実際の3D棒グラフをサポートしているかどうか分かりませんが、デモの1つは少し上に見えるように見えます。

編集:デモのソースコードはthe examplesですが、何らかの理由で結果が正しくありません。私はtest_polys機能を意味し、ここではそれがどのように見えるかです:

example figure http://www.iki.fi/jks/tmp/poly3d.png

test_bar2D機能がさらに良いだろうが、それは現在のsvnのバージョンでエラーが発生して、それがデモでコメントアウトされます。いくつかの些細な問題、または修正するのが難しいことがあります。

+0

デモの結果はオンラインのどこかに表示できますか?そうでない場合は、ローカルマシン上で実行し、回答を編集してソースコードとその結果の画像を表示できますか? – Davide

+0

ありがとうございます、私はあなたの答えを受け入れていません、今は動作しませんが、私はそれをupvoted、そして私はそれが動作するのを楽しみにしています – Davide

0

あなたはチャートディレクターをチェックアウトすることがあります

http://www.advsofteng.com

それはチャートやグラフのかなり多種多様を持っており、素敵なPythonの(および他のいくつかの言語)APIを持っています。

2つのエディションがあります。無料版は生成された画像に鮮明を表示し、 有料版は非常に合理的な価格です。ここで

は、棒グラフを積み重ね、より興味深い探し3dの一つだ:

sample graph http://www.advsofteng.com/images/demo10.png

5

もう一つの可能​​性はpseudo 3D bar chartsのいくつかの種類を描くことができgnuplotの、ある、とgnuplot.pyは、Pythonからgnuplotにインタフェースすることができます。私はそれを自分で試していない。

+2

+1うわー、gnuplotはPythonの裏口から来ています:-)私それは90年代に多く使われていた...それを見てみよう(しかし、擬似3次元棒グラフは新しいツールに比べて醜い...) – Davide

1

これは、matplotlibを使用した単純なBar-3dのコードです。

import mpl_toolkits 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
%matplotlib inline 

## The value you want to plot 
zval=[0.020752244,0.078514652,0.170302899,0.29543857,0.45358061,0.021255922,0.079022499,\ 
    0.171294169,0.29749654,0.457114286,0.020009631,0.073154019,0.158043498,0.273889264,0.419618287]  

fig = plt.figure(figsize=(12,9)) 
ax = fig.add_subplot(111,projection='3d') 
col=["#ccebc5","#b3cde3","#fbb4ae"]*5 
xpos=[1,2,3]*5 
ypos=range(1,6,1)*5 
zpos=[0]*15 
dx=[0.4]*15 
dy=[0.5]*15 
dz=zval 

for i in range(0,15,1): 
    ax.bar3d(ypos[i], xpos[i], zpos[i], dx[i], dy[i], dz[i],  
color=col[i],alpha=0.75) 

ax.view_init(azim=120) 
plt.show()  

http://i8.tietuku.com/ea79b55837914ab2.png

+0

少し遅れてパーティー私が当時のプロットをしようとしていたことを思い出してください!)しかし、matplotlibで最後に実装されたこの機能を見てうれしいです – Davide