(x座標 y座標 値)という形式のデータで次のようなものがあります
1 1 32.4
1 2 23.4
..........
..........
1 50 65.2
2 1 23.1
2 2 91.9
..........
..........
2 50 73.2
..........
..........
50 49 26.8
50 50 76.8
これを、二次元(x,y)のセル上で
50×50の濃淡プロットを作るには
どうすれば良いでしょうか?
gnuplotでなくてもOKです。
最初はexcelでやろうとしたのですが、思いの外大変でした。
No.3ベストアンサー
- 回答日時:
#2の者です。
「Densityplotというのがwebで見つかったのですが、関数のプロットのよう(?)です。
質問のデータを濃淡グラフでプロットするにはどうしたらよいのでしょうか?」
DensityPlotはおっしゃるとおり関数のプロットです。リストデータの濃淡プロットにはListDensityPlotというコマンドを使います。
ここでちょっとがっかりさせてしまうかもしれませんが、ListDensityPlotが扱うデータは {x座標、y座標、値}のデータ列ではなく、値がずらずらと並んだリストです。
もし手近にmathematicaを試せる環境ならば次のようなことをやってみればわかります。
data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
ListDensityPlot[data, Mesh -> False];
1から12までの濃度値が横3×縦4の升目に反映された図になります。
ですから、ご質問の例では、方法は二つです。
その1:{x座標、y座標、値}で並んだリストデータを値だけのリストデータに形を変えてやらねばなりません。
値だけのリストデータをmathematicaに書き込めばもちろんいいんですが、こつこつタイプインするのは50×50ではちょっと無理ですね。
リストデータを外部のテキストファイルに書き込んであるのなら、それをまずImportコマンドで読み込んで、そのあとリストデータの構造を変えて値だけのリストデータにします(リストデータの編集法は長々しい説明になってしまいますのでご勘弁ください)。
外部ファイルを作るときに値だけの羅列データにして、ずらずらと一列のデータとしてImportし、そのあとPartitionコマンドで50に区切ってやるのも良いです。
その2:{x座標、y座標、値}のデータ列からInterpolationコマンドで補間関数を作り、その補間関数をDensityPlotで描く。
正直、mathematicaはなぜ{x座標、y座標、値}のデータ列をスムーズに扱ってくれないのかちょっとうらめしく思うこともあります。ご質問の例ではきれいな直交格子にデータが並んでいるのでまだ良いのですが、座標がばらばらの(つまり直交格子から見れば歯抜けのあるような)データだとややこしいことになってしまいます。
ありがとうございます!
周りに mathematica に詳しい人がいないので助かりました。
Partitionというので何とかなりそうな気がします。
No.2
- 回答日時:
私も以前gnuplotで濃淡表示をできないものかなと思っていろいろ調べたものの、その種のコマンドは見つからずギブアップしたことがあります。
もしgnuplotでできるならどなたかが回答されるだろうとも思っていたのですが、ありませんね。ということはgnuplot(の少なくとも現バージョン)にはその機能は無いと判断して良いということでしょう。
splotコマンドの三次元グラフ表示ならgnuplotは優れものなんですけどね。
(私は濃淡グラフを書くのにはmathematicaを使っています。高額な数式処理ソフトなのでお勧めはしません。市販されているグラフ描きソフトは当然濃淡図機能を持っているでしょうが、私は使用経験がありませんしそれほど安くもないし。。。)
この回答への補足
ありがとうございます!
すみません、ちょうど、mathematicaは近日中に購入予定なのです。
Densityplotというのがwebで見つかったのですが、関数のプロットのよう(?)です。
質問のデータを濃淡グラフでプロットするにはどうしたらよいのでしょうか?
No.1
- 回答日時:
少し大変かもしれませんが,Excelでできると思いますよ。
以外と簡単に。
gnuplot というソフトに関してはよくわかりませんが,
濃淡のグラフというのは,,関数では表せないような写真ドットのようなデータの集まりなのですよね。
関数で表せないとすると,
結局,ドット1つ1つのデータを与えて行かないとならないので,
どんなソフトを使ってもここの部分が思いの外大変だと思います。
というか,
Excelはデータベースソフトなので,元からデータベースを用意するもの(シート)が用意されているため,
逆に簡単で,こういう処理には モッテコイ だと思います。
Excelでマクロを使って,セルではなくオートシェイプを利用すれば,
データ入力"以外"の部分は簡単だと思います。
まず,
データの用意です。
A~C列を使って,2500行のデータを作成します。
この作業が一番面倒といえば面倒です。
A B C
1 1 32.4 ←1行目
1 2 23.4 ←2行目
..........
..........
1 50 65.2 ←50行目
2 1 23.1 ←51行目
2 2 91.9 ←51行目
..........
..........
2 50 73.2 ←100行目
..........
..........
50 49 26.8 ←2499行目
50 50 76.8 ←2500行目
次に,
5×5ピクセル のオートシェイプの四角形を
横50,縦50 合計2500個 アクティブシート上に並べるマクロを用意します。(コピペ可)
////////////////////////////////////////////////////////////////////////////
Sub Noutan1()
For I = 1 To 50
For J = 1 To 50
'expression.AddShape(Type, Left, Top, Width, Height)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
5 * I + 150, 5 * J + 100, 5, 5)
.Name = "Square" & I & "," & J
.Line.Visible = msoFalse
.Fill.ForeColor.RGB = RGB(I * 5, J * 5, 200)
End With
Next J
Next I
End Sub
////////////////////////////////////////////////////////////////////////////
わざと遊びで変なグラデーションの色にしていますが,
.Fill.ForeColor.RGB = RGB(I * 5, J * 5, 200)
の部分を,
.Fill.ForeColor.RGB = RGB(I255, 255, 255)
にすれば,真っ白なオートシェイプが並びます。
(低スペックなPCだと,処理に10秒以上かかるかもしれません。)
これで,
「Square1,1」 ~ 「Square50,50」 という名前の付いた,5×5ピクセル の四角形がたくさん生成されるので,
あとは,1,1 から順に,塗りを塗るマクロを用意します。(コピペ可)
////////////////////////////////////////////////////////////////////////////
Sub Noutan2()
'濃淡100を255に変換する定数 =2.55
W = 2.55
'A・B・C列の上の行から順に値の取得
For K = 1 To 2500
Obj = "Square" & ActiveSheet.Cells(K, 1) & "," & ActiveSheet.Cells(K, 2)
Col = ActiveSheet.Cells(K, 3)
ActiveSheet.Shapes(Obj).Fill.ForeColor.RGB = RGB(Col * W, Col * W, Col * W)
Next K
End Sub
////////////////////////////////////////////////////////////////////////////
Noutan1() を実行して,次に Noutan2() を実行すれば,
濃淡プロットの出来上がりです。
(低スペックなPCだと,処理に10秒以上かかるかもしれません。)
※Noutan1() は1回のみ実効可能です。
オブジェクトの名称が 2回目だと重なってしまうからです。
複数回実行する場合は,作成されたオートシェイプを全て消してから実行してください。
Noutan2() は複数回実効可能です。
私は全くマクロ(VBA) の専門家ではありません。
Flash(Web上でよく見るアニメーション)を主に専門分野としていますが,
Flashならこうするだろうなと言う方法を,Excelに置き換えてみました。
Flashにしても,gnuplotにしても,Excel にしても,データに関数のような関係式が無ければ,
少なくともデータ入力の部分が何かの形で必要なことは確かです。
gnuplot の場合はよくわかりませんが,
Flashの場合は元々データベースソフトではないため,
データを用意する部分がものすごく大変になります。
おそらく外部にデータ入りの CSV や XML などを用意して,
それを Flash にロードして,処理という形になると思います。
かなり面倒です。
データはデータ。
プログラムはプログラム。
元のデータを変えればプログラムを変えずとも結果が変わる。
Excelはこういうことを専門にできるソフトなので,
他のソフトに比べれば,データを用意する箱が用意されている分,すごく楽だと思います。
[ 作成&検証 Windows2000 Excel 2002 ]
=======================================
ひょっとしたら,マクロの登録方法や使用方法がわからないかもしれないので,
念のため書いておきます。
~~マクロの作成方法~~
[ツール] メニュー→ [マクロ]→[マクロ]でマクロダイアログボックスを出します。
[マクロ名] ボックスに、「実行するマクロの名前」
(つまり Noutan1 )を入力し,「作成」をクリック
Visual Basicエディタが開くと,Module1に
----------------------
Sub Noutan1()
End Sub
----------------------
がすでに用意されていると思います。ここを
----------------------
Sub Noutan1()
For I = 1 To 50
For J = 1 To 50
'expression.AddShape(Type, Left, Top, Width, Height)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
5 * I + 150, 5 * J + 100, 5, 5)
.Name = "Square" & I & "," & J
.Line.Visible = msoFalse
.Fill.ForeColor.RGB = RGB(I * 5, J * 5, 200)
End With
Next J
Next I
End Sub
----------------------
のように書きかえ,一旦Visual Basicエディタを閉じます。
これでマクロの作成は終わりです。
~マクロの実行方法~
方法1 ショートカットから実行
再び[ツール] メニュー→ [マクロ]→[マクロ]でマクロダイアログボックスを出します。
[マクロ名] ボックスの下にある大きなボックスから
「実行するマクロの名前」を選択し「オプション」を選択し,
マクロオプションダイアログボックスから
ショートカットキー
「Ctrl」+「任意のキー」でショートカットを登録すれば,
次回からこのショートカットキーでマクロが実行されます。
「任意のキー」は P A C Z など日頃自分が使われているキーは避けた方が良いです。
方法2 画像から実行
自分で書いた絵やネット上のボタン画像や写真もマクロ実行のボタンとして使用できます。
ボタンにしたい画像を右クリック→「マクロの登録」で
「実行するマクロの名前」を選択→「OK」で
マクロ実行ボタンの完成です。
その他,ツールバーのフォームから
ボタンを作って,そのボタンにマクロを登録するなど,
色々な方法があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 図のような散布図の作り方を教えてください。 1 2022/07/19 11:52
- Excel(エクセル) エクセルまたはgnuplotグラフの書き方 2 2022/11/18 15:45
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
- 数学 2次関数y=ax^2のグラフは点A(4,2)を通っている。y軸上に点BをAB=OB(Oは原点)となる 1 2022/04/08 00:05
- Illustrator(イラストレーター) ワードに貼った画像のキャンバスと画像本体のサイズの調整 2 2022/05/19 18:31
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- 統計学 確率統計でExcelの使い方を教えてください。 3 2022/07/27 19:21
- 数学 二次関数 解説で 問題の二次方程式の頂点は(x,y)と書いてあり 頂点ではない別の座標に(1,f(1 2 2023/02/07 19:21
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どなたか、S45Cの電気伝導率(S...
-
離散フーリエ変換の周波数分解能
-
誤差について
-
画像の式はフーリエ級数展開を...
-
MOSFETのgm-Vgs特性
-
静的・動的の意味
-
(2)のグラフの問題についてです...
-
フーリエ級数展開を使ってどう...
-
隣接平均と移動平均
-
1/3オクターブバンドについて質...
-
フーリエ変換、FFT演算について
-
savitzky-golayのフィルタについて
-
時間を100進法であらわしたい。
-
「強度」は高い?強い?
-
10,000百万円っていくらですか?
-
「1人あたりの1年間あたりの~...
-
合成関数の微分を使う時と、使...
-
微分可能ならば連続ですが、 不...
-
yの二乗をXで微分したら2y・y' ...
-
1寸・1尺・1間って何センチ?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報