f=194*X<sup>-1.094</sup>*Y<sup>-0.278</sup>

という関数のグラフを作成したいと考えています。


この数式は、先日日本腎臓学会が発表した、日本人の糸球体濾過量(GFR)推定式で、
変数Xが血清クレアチニン量、変数Yが年齢になります。


http://www.jsn.or.jp/
にノモグラムはあるのですが、2次元で等高線がfの値となるようなグラフ*を作成するソフト(商用ソフト不可)はあるでしょうか?


*例として、このようなものです。(これはBMIの早見表です)
http://www.mmjp.or.jp/stethoscope/bmi.jpeg

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/06/05 03:36:44
  • 終了:2008/06/05 20:48:44

回答(3件)

id:rubikitch No.1

るびきち回答回数120ベストアンサー獲得回数222008/06/05 04:44:56

ポイント5pt

詳しくないですが、gnuplotやgraphvizはどうでしょうか?どちらもフリーソフトウェアです。

http://d.hatena.ne.jp/rubikitch

id:tatsu___kun

申し訳ございませんが、あなた様より詳しくありませんので、具体的かつ明瞭な例示がないと、回答いただいた内容が有益か否か判定できません。

それと、URIと回答内容の関係がよくわかりません。URIの参照先には有益と判断されるような内容は見つけられませんでした。

2008/06/05 07:23:28
id:noir_k No.2

noir_k回答回数45ベストアンサー獲得回数22008/06/05 09:03:27

ポイント40pt

gnuplotの3次元プロットしたものを、真上から見れば、等高線になります。

http://t16web.lanl.gov/Kawano/gnuplot/plot3d.html


具体的には、以下のようにすればよいでしょう。


gnuplot> set ticslevel 0

gnuplot> splot 194*(x**(-1.094))*(y**(-0.278))

gnuplot> set contour

gnuplot> set cntrparam levels 10

gnuplot> set contour base

gnuplot> unset surface

gnuplot> set view 0,0

gnuplot> replot

id:tatsu___kun

ありがとうございました。

・・・何故か真上から見た図にならなかったです。

2008/06/05 20:34:18
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912008/06/05 11:46:19

ポイント50pt

ツールでも作成はできますが、EXCEL の3D グラフでも一応それらしいグラフができます。

下記は、数式を使用してセルにデータの表を作成し(A1:S17)、挿入から3Dグラフを選んで作成するやり方をマクロで実行した例です。


シートタブをクリックしコードの表示を選択して、そこに下記をコピーしてください。

シートに戻ってAlt+F8を押し、makeGraph を実行してみてください。

Sub makeGraph()
    Dim i&, j&, age&, creatinine#
    Dim sSheet As Worksheet
    Set gsheet = ActiveSheet
    
    i = 1
    For age = 5 To 80 Step 5
        i = i + 1
        gsheet.Cells(i, "A").Value = age
    Next
    
    j = 1
    For creatinine = 0.6 To 4.01 Step 0.2
        j = j + 1
        gsheet.Cells(1, j).Value = creatinine
    Next

    gsheet.Range("B2").Formula = "=194*B$1^(-1.094)*$A2^(-0.278)"
    gsheet.Range("B2").Copy
    gsheet.Range(gsheet.Cells(2, "B"), gsheet.Cells(i, j)).Select
    gsheet.Paste

    With Charts.Add
        .SetSourceData gsheet.Range("A1").CurrentRegion, PlotBy:=xlRows
        .Location Where:=xlLocationAsObject, Name:=gsheet.Name
    End With
    With ActiveChart
        .ChartType = xlSurface
        .HasTitle = True
        .ChartTitle.Characters.Text = "日本人の糸球体濾過量"
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.Characters.Text = "クリアチニン"
        .Axes(xlSeries).HasTitle = True
        .Axes(xlSeries).AxisTitle.Characters.Text = "年齢"
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.Characters.Text = "GFR"
        
        .Rotation = 120
    End With
End Sub

グラフ上を右クリックして、3D-グラフを選択すると、向きなど細かい調整が可能です。

http://www.relief.jp/itnote/archives/001713.php

id:tatsu___kun

ありがとうございました。

マクロで頑張れば出来るものですね。

2008/06/05 20:34:41
  • id:ootatmt
    商用ソフト不可ということは、エクセルもだめなんですね?
  • id:Mook
    graphviz は方向性が異なる気がしますが、gnuplotのサンプルは下記にありました。
    http://t16web.lanl.gov/Kawano/gnuplot/plot3d.html#6.1

    直接試してはいないので、コメントで失礼しますが、
    http://search.vector.co.jp/search?query=%82R%8E%9F%8C%B3%83O%83%89%83t
    でも、いろいろとありますので、一度試してみてはどうでしょうか。

    参考までに伺いたいのですがグラフを書く場合、血清クレアチニン量の定義域はどの程度でしょうか。
  • id:tatsu___kun
    tatsu___kun 2008/06/05 10:02:39
    エクセルは特別なアドオンがなければOKです。クレアチニンの範囲は0.6から4.0を想定しています。
  • id:ita
    こんなかんじ?
    http://f.hatena.ne.jp/ita/20080605120950

    gnuplot のスクリプト


    set xlabel "血清クレアチニン量"
    set xrange [0.6:4.0]

    set ylabel "年齢"
    set yrange [1:100]

    f(x,a)= (a/194.0*(x**1.094))**(-1.0/0.278)

    plot \
    f(x,25) t "25" w l,\
    f(x,50) t "50" w l,\
    f(x,75) t "75" w l,\
    f(x,100) t "100" w l,\
    f(x,125) t "125" w l,\
    f(x,150) t "150" w l


    pause -1
  • id:ita
    ちなみにF(x,y)=a をyについて解いた y=f(x,a)という関数をプロットしてます。
  • id:tatsu___kun
    tatsu___kun 2008/06/05 20:50:20
    結局id:ita様の回答が最も有用でした。
    ita様には200p送付します。
    皆様有り難うございました。
    gnuplotって面白いですね。
  • id:Mook
    今回はマクロで書きましたが、手作業でできる手順をマクロにしただけですので、
    表ができれば、後はグラフの作成ボタンを押すだけで、今回の結果と同じになります。

    でもやはり、グラフは専用のアプリケーションでやったほうがきれいにできそうですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません