How to | グラフやプロットにエラーバーを加える方法
測定に基づくデータのプロットでは,プロットの点を中心とする垂直の線つまり区間を書き加えることによって,関連する誤差推定を示すことがよくある.Wolfram言語では,2つの方法を使ってグラフやプロットにそのようなエラーバーを加えることができる.
以下では,2009年におけるセントルイスの毎月の平均最高気温を計算してプロットするステップを示す.
WeatherDataを使って2009年におけるセントルイスの毎日の最高気温をTimeSeries形式でインポートする:
rawData = WeatherData["Saint Louis", "MaxTemperature", {{2009, 1, 1}, {2009, 12, 31}, "Day"}]TimeSeriesWindowを使って各月ごとにデータ点をグループ化する(まず,月の最後を定義する):
ends = DayRange[{2009, 1, 1}, {2009, 12, 31}, "EndOfMonth"]filteredDataByMonth = Table[TimeSeriesWindow[rawData, {{2009, k, 1}, ends[[k]]}], {k, 1, 12}];meanData = Mean /@ filteredDataByMonthTimeSeriesとして与えられたデータ集合の標準誤差を計算する関数を定義する.ここでは,標準誤差は標準偏差をデータ集合の観測数の平方根で割ったものである:
standardError[ts_] := StandardDeviation[ts] / Sqrt[ts["PathLength"]]stdErrorData = standardError /@ filteredDataByMonth次に棒グラフにエラーバーを加えることができる関数を定義する:
errorBar[type_ : "Rectangle"][{{x0_, x1_}, {y0_, y1_}}, value_, meta_] := Block[{error, mags = QuantityMagnitude[value]},
error = Flatten[QuantityMagnitude[meta]];
error = If[error === {}, 0, Last[error]];{ChartElementData[type][{{x0, x1}, {y0, y1}}, mags, meta], {Black, Line[{{{(x0 + x1) / 2, y1 - error}, {(x0 + x1) / 2, y1 + error}}, {{1 / 4 (3 x0 + x1), y1 + error}, {1 / 4 (x0 + 3 x1), y1 + error}}, {{1 / 4 (3 x0 + x1), y1 - error}, {1 / 4 (x0 + 3 x1), y1 - error}}}]}}]この関数は,データ点をdata->errorとして取る.以下では,平均および関連する標準誤差がこの形式に入れられている:
chartData = Table[meanData[[i]] -> stdErrorData[[i]], {i, 1, Length[meanData]}]グラフを作る前に,各月のラベルを作成し,それにスタイルを付ける:
labels = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};BarChartを使ってグラフを作成する:
BarChart[chartData, ChartElementFunction -> errorBar["Rectangle"], ChartLabels -> Placed[labels, Axis, Style[#, 12, FontFamily -> "Arial"]&], Frame -> Left, FrameLabel -> Automatic]このデータおよび関連する誤差を,各平均が線で結ばれているプロットに示すこともできる.
これを行うためには,まず「ErrorBarプロットパッケージ」をロードする:
Needs["ErrorBarPlots`"]このパッケージに入っているErrorListPlotは,そのデータを{data,error}という形式のリストで取る.以下ではデータはこの形式に入れられている:
plotData = QuantityMagnitude /@ Partition[Riffle[meanData, stdErrorData], 2]目盛のラベルを設定し,ErrorListPlotで使う:
tickSpecs = {{{1, "1月"}, {2, "2月"}, {3, "3月"}, {4, "4月"}, {5, "5月"}, {6, "6月"}, {7, "7月"}, {8, "8月"}, {9, "9月"}, {10, "10月"}, {11, "11月"}, {12, "12月"}}, Automatic};ErrorListPlotを使ってデータをプロットする:
ErrorListPlot[plotData, Joined -> True, Frame -> {Left, Bottom}, Ticks -> tickSpecs, AxesLabel -> {None, Style["気温 (C)", 12, FontFamily -> "Arial"]}]