Scilabで行列をグラフ化する方法とは?

このQ&Aのポイント
  • Scilabで行列をグラフ化する方法について質問させてください。
  • Matplotを使用して行列をグラフ化しようとした際にオートスケールが正常に機能しない問題が発生しています。
  • 行列内の数値が0未満の場合、カラーマップによって黒色で表示されるため、設定したグラフの見た目が悪くなります。
回答を見る
  • ベストアンサー

Scilabで行列をグラフ化したいのですが…

Scilabで行列をグラフ化したいのですが… すみません、Scilabを使っていて詰まってしまったので初心者なゆえ質問させてください。 行列をMatplotを使ってグラフ化しようとしたのですが、 グラフ化するとなぜかオートスケールがきかず出力画面が真っ黒になってしまいます。 おそらく、カラーマップでナンバー1が黒なので行列内にある2未満の数値がすべて 黒として表示されているのだと思います。 行列内の数値はすべて0以上1未満でしたので。 ここで例えば、 A=[0 0.5:1 2]; Matplot(A) とすると要素(2,2)だけが青色でほかすべてが黒の二次元グラフができるかと思います。 (カラーマップ2が青なので) 理想は行列内のMAX値を一番明るくし、0を今までどおりの黒にしたいです。 ここに行列Bがあり、 B=[0 0.3 0.2:0 0 0.5] とするならば、 0.5を一番明るくして0に近づくほどその色を黒にしていく。 こんなグラフが欲しいと思っています。 できますでしょうか?? 無知ですみません、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dip28p
  • ベストアンサー率100% (1/1)
回答No.1

ご希望の感じになるのかどうかわかりませんが、 グレースケールでやるっていうのはどうでしょう? //-------------------------------------------------------- lines(0) Crange=100 // 増やすと分解能が上がる。(上限不明) B=[0:0.1:0.9 ; 1:0.1:1.9 ; 2:0.1:2.9 ; 3:0.1:3.9] Bg=B.*(Crange/max(B)) // Bの最大値をCrangeの最大値にしたMatrix Matplot(Bg) // ColorMap xset("colormap",graycolormap(Crange)) //グレースケール化 lines(50) //--------------------------------------------------------

millefeuie
質問者

お礼

>dip28pさん ありがとうございます!!自分でも考えてみて一応形には なったのですが、こちらのプログラムを参考にさせてもらったほうが より理想に近いものになりました!!ありがとうございます。 また、続けて質問する形で非常にあつかましいのですが グレーカラーマップ、ホットカラーマップなどは自分で作ることができるのでしょうか? たとえば、「ブルーカラーマップ」で数値の変化で白→青→黒 と言った感じです。調べた限りではできなさそうな感じではありますが・・・。 お手数かけます、よろしければご回答のほどよろしくお願いいたします。

その他の回答 (1)

  • dip28p
  • ベストアンサー率100% (1/1)
回答No.2

helpでColormapを調べると、こんな感じのサンプルがありました。 なんとか調整すれば使えるかもしれません。 //--------------------------------------------- lines(0) n=32; B=[0:0.1:0.9 ; 1:0.1:1.9 ; 2:0.1:2.9 ; 3:0.1:3.9] Bg=B.*(n/max(B)) Matplot(Bg) cc=linspace(0,1,n/2)'; c0=zeros(cc); c1=ones(cc); r=[c0;cc]; g=[c0;cc]; b=[cc;c1]; cmap=[r g b]; f=gcf(); f.color_map=cmap; lines(50) //---------------------------------------------

millefeuie
質問者

お礼

>dip28p 理想の形にすることができました! 本当に見ず知らずの私にアドバイスくださりありがとうございました♪

関連するQ&A

  • scilabでのグラフ描画時の軸設定

    scilabで2次元グラフを描くときの軸の設定 scilabのカラー描画であるMatplotを使ってグラフを描画しているのですが、縦軸と横軸の交点が思い通りに設定できません。 また、グラフと軸がずれて配置されてしまいます。 現在このようなプログラムでグラフを描画しています。 u=[1:1:5;1:1:5;1:1:5;1:1:5;1:1:5]; umin=min(u(:)); umax=max(u(:)); u=255*(u-umin)/(umax-umin); Matplot(u);//行列プロット set(gcf(),'color_map',jetcolormap(256)); colorbar(umin,umax);//color barの表示 g=gca(); g.axes_visible='off'; g.children.data=g.children.data($:-1:1,:);//原点を左下にする xtics=0:1:4;//x軸目盛の設定 drawaxis(x=xtics,y=0.5,dir='d',tics='v'); g.children(1).tics_labels=string(-2:1:2); ytics=0:1:4;//y軸目盛りの設定 drawaxis(x=0.5,y=ytics,dir='l',tics='v'); g.children(1).tics_labels=string(1:1:5); このプログラムを実行すると、縦軸が0.5で、横軸が-1.5のところで交わってしまいます。 また、カラー表示されたグラフが縦軸・横軸共に1.5くらいずつずれてしまいます。 ちなみにこのプログラムは以下のURLのサイトのプログラムを参考にしたものです。 http://vision.kuee.kyoto-u.ac.jp/lecture/dsp/?menu=mat_figure 初心者の質問で申し訳ありませんが、かなり困っています。ご指導、アドバイスよろしくお願いいたします。

  • 行列式のプログラム

    適当な形式にて初期化された2つの2次元配列により、3×4行列Aと4×3行列Bの要素を表現し、積ABを求めて表示させるプログラムなんです。 ここまでならなんとかなるかもと思ったんですが、行列はAはプログラム中で以下の数値で初期化して、行列Bの要素はキーボードから入力させるようにしないといけないんです。。   2.0 3.0 4.0 5.0 A= 3.0 4.0 5.0 6.0   1.0 2.0 3.0 4.0 なんですけれども、教えていただけたらうれしいです。。 お願いします!!

  • SCILABでの行列計算のエラー文が理解できない。

    SCILABという計算ソフトを使用して次のような計算を行っていました、 A=[1 2 3; 4 5 6; 7 8 8.999999999999] B=[-1 0 1]^T (^Tは転置行列の意) Aの逆行列とBの積A^(-1)*B=Xとして、det(X)を計算したところ、次のようなエラーが出てきました。 ↓ matrix is close to singular or badly scaled. rcond=7.7099D-17 このエラー文の意味が不明です。 直訳すると matrix is (行列は) close to (ほぼ、ほとんど) singular (特異である) or (もしくは) badly scaled.(好ましくないスケール) となりますが、このエラーはつまりどういう意味なのでしょうか。 直訳など、何が問題なのかが知りたいです。 どなたかわかる方、ご教示のほどお願いいたします。

  • EXCEL2007 円グラフ表示されない

    EXCEL2007で円グラフを読み込ませています。 その円グラフがうまく表示できず困っています。 <例>   A  B _________________ 1  5   10 2  3   5 3   2  5 4   0  3 5   5  2 上記のようにセルに数値が入っているとします。 この場合、B列には0を含む数値がないので問題なく 円グラフが5分割色わけされるのですが・・・ A列に0が含まれている場合、0の部分だけが省かれ 他の数値が反映され色わけされるイメージでしたが なぜか全て同じ色になってしまいます。 EXCEL2003では0の部分は省かれるのですが EXCEL2007になると全て同じ色になるのは どこか設定の問題でしょうか?仕様でしょうか?

  • 行列のノルム

    以下、xはn次元ベクトル、A=(a(i,j))はn×n行列とします。 ■||x||_2 = √{Σ_[j=1~n](x_j)^2} (ユークリッドノルム) ※x_jは、xの第j成分です。 このノルムを採用したとき、行列Aのノルムは以下のように定義することが出来る。 ・||A||_2 = MAX_[x]{||Ax||_2/||x||_2} この具体的な表現は以下で与えられる、らしいのですが…。 ・||A||_2 = MAX_[k]{√(μ_k)} (μ_kは、BをAの転置行列として、BAの固有値。) 本を読んでも、「簡単に導出できるので試みられたい。」とかしか書かれておらず、困っています。どうやって導出するのでしょうか?僕には簡単に導出できません。 また、 ■||x||_∞ = MAX_[k]{|x_k|}  ※x_kは、ベクトルxの第k成分。 このノルムを採用したとき、行列Aのノルムを ・||A||_∞ = MAX_[x]{||Ax||_∞/||x||_∞} と定義できて、この具体的な表現は、 ・MAX_[i]{Σ_[j=1~n]|a(i,j)|} で与えられるらしいのですが、本を読んでも、これも証明が省かれています。 ||A||_1についてはきちんと証明が載っているのですが…。 どちらか片方ずつでも、おねがいします。

  • 行列の比較

    M行N列(M×N)の行列A,B,Cがあるとき。 行列Aに対してBとCどちらが近いかを比較する方法には どのようなものがあるのでしょうか。 例 行列A(3×3) 1 1 1 1 1 1 1 1 1 行列B(3×3) 1 1 2 2 1 1 1 1 1 行列C(3×3) 2 2 2 2 2 2 2 2 2 例では誤差で考えるとBの方がAに近いのですが 行列内の互いの数値関係が同じ(同じ値)ということで Cの方がAに近い性質を現していることを数値で示したいと考えています つまり求めたいのは相関(?)のような近さです 思いつくのは一列づつ相関をとって最終的に全ての行での 平均をとる方法ですが 他に上手く(出来れば一つの数字で)近さの程度を表す方法や 一般的な方法があれば教えて頂けないでしょうか。 よろしくお願い致します。

  • エクセルのグラフの色を統一するやり方を教えてください!

    こんにちは。 エクセルでグラフを描いているのですが、ひとつのグラフに何本かの線や点の色を統一したいのですが、一度に全ての色を同じにするやり方を教えて頂けないでしょうか? 具体的に困っている所は、 ひとつのグラフの中に160本程の線を表示させたいのですが、 自動で描くと 1本目(系列1)が青、 2本目がピンク、 3本目が黄色・・・ といった感じになりますが、これを全て黒にしたいのです。 1本1本色を変えていくと手間がかかってしょうがありません。 初期設定で黒に指定する、または色のついたグラフを一気に黒に変換する、 といった手法はございませんか? どなたか教えてください! 宜しくお願い致します。

  • 三次元回転行列

    2つの三次元単位ベクトルa,bがあるときに aを回転させてbにあわせるような回転行列を求めたいんですが うまく求められません。 どのように解けば回転行列を求められるんでしょうか?

  • 可変グラフ作成

    こんにちは。 可変グラフを作成したいと思い、何度か挑戦しましたがすべて失敗してしまいました。 ご教授の程よろしくお願いいたします。 例えば、    A  B  C  D  E・・・・・Y 1 測定時間 2 数値A 3 数値B 5 測定時間 6 数値A 7 数値B の様に、横のデータを可変させたいのです。 ちなみにA1,A5のデータをグラフの軸にし、数値A,Bを2軸のグラフにしたのですが、数式はどのようにすればよろしいのでしょうか?

  • 行列

    行列A、B、C…をそれぞれ成分が全て正の行和が0の対称行列とし、 行列Xを対角成分に左上からA,B,C,,,と並べて他全て0の行列とすると、 Xの固有値0に対する固有ベクトルが (λA、λA、、、λB、λB、、、λC、λC、λC、、、)に限ることの証明を、 どなたかお願いします。