(Excel)対数グラフの作り方

 Excelで対数グラフ、つまり軸が対数スケールになっている(目盛の数値の間隔が一定でなく、1,10,100…とか1,2,4,8…というように増えていく)グラフを作る方法についてです。
 通常のグラフ機能によるもののほか、Microsoft 365で利用できるPython in Excelを使った例も紹介します。

グラフ機能を使う方法

 通常のグラフ機能を使う方法です。グラフの作成にはタイトルや軸ラベルの指定など複雑な手順が必要になりますが、そうした詳細は省略して、軸を対数スケールにする部分にほぼ絞って紹介します。
 なお、散布図の場合は片対数グラフ(一方の軸のみ対数スケール)だけでなく両対数グラフ(両軸とも対数スケール)にすることが可能です。折れ線グラフの場合は片対数グラフ(y軸のみ対数スケール)のみ可能です。

散布図の場合(片対数、両対数グラフ)

 B,C列に入力されているデータをもとに、散布図の対数グラフを作成するものとします。
 まずは値が記録されている範囲(B3:C14)を選択し、「挿入」タブから「散布図」を選択します。
 なお、見出し(2行目)を含めて選択するとグラフのタイトルが変わりますが、大筋には影響ありません。

 


 これで基本的な散布図が作成されます。

 


 ここからy軸を対数スケールに変更します。
 y軸上に表示されている数字をダブルクリックします。間のスペースをダブルクリックするとこの後に表示されるメニューが異なるものになるので注意してください。

 


 ウインドウの右側に設定用のメニュー領域が表示されます。
 ここで「対数目盛を表示する」のチェックボックスにチェックを入れます。
 もしこのようなメニューが表示されない場合は、上部の「軸のオプション」とアイコンが選択されているかどうか確認してください。

 


 これでy軸が対数スケールで表示された片対数グラフとなります。
 グラフの形状(各点の位置関係)は変わりますが、左下に詰まっていた点どうしの間隔が確保され見やすくなりました。
 なお1つ上の画面で「基数」の値を、例えば「8」に変えた場合には、軸上に表示される値は1,8,64…というように8倍のオーダーとなります。

 


 続いてx軸上の数字をダブルクリックして同様に設定すると…

 



 これでx軸も対数スケールで表示され、両対数グラフとなりました。

補助目盛線を追加する

 目盛線(グラフ内の薄い水平/垂直線)の間に、さらに細かい目盛線を入れる方法です。
 まずはy軸上の数字を右クリックして、メニューから「補助目盛線を追加」を選択します。

 


 これで補助目盛線が表示されました。
 通常の(対数グラフでない)グラフとは異なり、間隔は不均一なものとなります。

 


 x軸でも同様に設定すると次のようになります。



点を直線でつなぐ

 散布図上の各点を直線でつなぐ方法です。
 点のうちいずれかをダブルクリックします(右クリックして「データ要素の書式設定」を選択してもOK)。

 


 ウインドウの右側にメニューが現れますので、上部のアイコンを選択し、「線」から適当なもの(ここでは「線(単色)」)を選択します。

 


 各点をつなぐ直線が表示されました。
 ただしこの直線は値の近いもの同士を接続するのではなく元のデータの並び順に沿って接続しますので、自然に見せる場合はデータをソートしておく必要があります。

近似曲線を表示する

 散布図の形状を近似する曲線を表示する方法です。
 散布図の点のいずれかを右クリックし、メニューから「近似曲線の追加」を選択します。

 


 ウインドウの右側にメニューが現れますので、曲線の種類から適当なものを選びます。
 ここでは「累乗近似」とします。なおメニューを下にスクロールしていけば数式の表示なども設定できますが、ここでは省略します。

 


 これでグラフ上に近似曲線(この例では視覚的に直線となっていますが)が表示されます。

折れ線グラフの場合(片対数グラフのみ)

 グラフの種類を折れ線グラフとした場合(「挿入」タブ→「折れ線」)、x軸にはデータの各値が等間隔に表示され、これを変更することはできません(ただのラベル的な扱い)。
 つまりx軸について対数スケールにできないので両対数グラフにはできません。

 


 よって両対数グラフを折れ線グラフ状に表示したい場合は、上記例のように散布図の点を線でつなぐこととなります。
 もちろん片対数グラフでよい内容(データ)ならば、折れ線グラフとして作成して問題ありません。

 なお補助目盛線や近似曲線については、散布図での操作と同様です。

Python in Excelを使う方法

 Microsoft 365で利用可能なPython in Excelを使う方法です。
 これもかなり高機能ですが、ここでは込み入った内容は省略して「こういうことができる」といった程度に紹介します。


 使うデータは上記例と同じで、次のようなものです(シート名「SheetA」上に存在)。
 ただしPython in Excelではセル内にグラフが描画されることから、グラフは別のシート上に作成するものとします。

 


 その別シートのセルに次のように入力すると、散布図の両対数グラフが表示されます。
 数式バーの左側で「Excelの値」を選択することでセル内にグラフを表示させていますが、そういったPython in Excel(PY関数)の基本的な入力手順についてはこちらの記事に記していますのでご確認ください。

 B2セル(Python in Excel)

plt.scatter(xl("SheetA!B3:B14"), xl("SheetA!C3:C14"))
plt.xlabel(xl("SheetA!B2"), fontname='Meiryo')
plt.ylabel(xl("SheetA!C2"), fontname='Meiryo')
plt.xscale('log', base=10)
plt.yscale('log', base=10)
plt.grid(which='both')
plt.show()

 
 ダブルとシングルのクォーテーションが混在したりしてますがご容赦ください。
 matplotlib.pyplotモジュール(plt)を使っています。パッと見でもだいたい意味がわかりそうな内容ですが、以下は補足です。

  • xlabel/ylabel(軸ラベル)においてフォント名を指定していますがこれがないと日本語が文字化けします。さしあたりメイリオが使えますがYu GothicとかMS何とかなどを適当に指定しても使えません。他のフォントが使えるようでしたら追記します。
  • xscale/yscale(軸のスケール)で「’log'」を指定することで対数グラフとしています。片方の軸だけでやれば片対数グラフになります。「base=~」は基数(底)の指定です。
  • grid(目盛)の「which='both'」は主・副の目盛線をともに表示する指定です。

参考サイト:
Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定 - YutaKaのPython教室
 


 セル選択時に右上に表示されるアイコンをクリックすると、グラフが図としてコピーされます。

 


 次の画像は折れ線グラフ状に表示させる例です。

 B2セル(Python in Excel)

plt.plot(xl("SheetA!B3:B14"), xl("SheetA!C3:C14"))
plt.xlabel(xl("SheetA!B2"), fontname='Meiryo')
plt.ylabel(xl("SheetA!C2"), fontname='Meiryo')
plt.xscale('log', base=10)
plt.yscale('log', base=10)
plt.grid(which='both')
plt.show()

 上記例とほぼ同じで、最初の行の「plt.plot」だけが違いです。
 直線は値の近いもの同士を接続するのではなく元のデータの並び順に接続しますので、自然な表示にしたい場合はデータをソートしておく必要があります。