この記事では、プロット領域を水平方向と垂直方向に四つの領域に分割した散布図を作成するのがいかに簡単かを説明します。 領域はチャート軸で区切られており、これらの軸は象限を画定するために必要な場所に配置できます。
色付きの象限の背景を持つExcelグラフを作成する方法を示すチュートリアルを書いていますが、積層領域と二次軸を使用して色付きの背景を取得していたため、より複雑でした。 これは、作成と保守がはるかに簡単で、ほぼ同じ目的を果たします。
ここでは、計算された平均値と最初のXY散布図を含むサンプルXとYデータです。 分析で意味のある場所に配置することはできますが、xデータとYデータのそれぞれの平均値に軸を配置します。
このチャートの軸の位置を変更する必要があります。 水平軸をダブルクリックするか、水平軸を選択してCtrl+1(数字の1)を押して、軸の書式設定作業ウィンドウ(ここではExcel2013)または軸の書式設定ダイアログ( 軸オプション>垂直軸が交差する下で、軸値オプションを選択し、示されているようにボックスにX平均を入力します。
で交差する結果は左の下に示されています。 右下の垂直軸に対して繰り返します。
これらの軸ラベルは完全に邪魔ですが、それらを移動するのは簡単です。 各軸の書式を設定し(上記のように作業ウィンドウまたはダイアログを開きます)、ラベル>ラベル位置の下で、ドロップダウンから低を選択します。
今、これらのラベルは、彼らが害よりも良い(左下)を行うチャートの端に沿っています。 象限をもう少し明確に突き出すために、少量の書式設定を行うことができます。 右下のグラフでは、グリッド線に灰色の明るい色合いを使用し、軸線の色にはマーカーと同じ色の濃い色を使用しました。
以下に示すような簡単なルーチンを使用して、VBAを使用して軸と軸ラベルを配置するのは簡単 このルーチンはラベルを配置し、ワークシートで計算された平均値を使用して軸線を配置します。
Sub AxesAsQuadBoundaries1() With ActiveChart With .Axes(xlCategory) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = ActiveSheet.Range("A17").Value2 End With With .Axes(xlValue) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = ActiveSheet.Range("B17").Value2 End With End WithEnd Sub
次のルーチンはワークシートの計算をスキップし、代わりにグラフにプロットされたXとYの値の平均を取って軸線を配置します。
Sub AxesAsQuadBoundaries2() Dim vData As Variant With ActiveChart vData = .SeriesCollection(1).XValues With .Axes(xlCategory) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = WorksheetFunction.Average(vData) End With vData = .SeriesCollection(1).Values With .Axes(xlValue) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = WorksheetFunction.Average(vData) End With End WithEnd Sub
ワークシートイベントを使用して、グラフ軸の位置を変更することもできます。 私のXとYの値は=RANDBETWEEN(2,14)
を使用して計算されたため、ワークシートが計算するたびに(たとえば、F9ファンクションキーを押して)、値が変更されます。 私はこの計算イベントを次のように活用することができます。
- ワークシートタブを右クリックし、ポップアップメニューからコードの表示を選択します。 Vbエディターが開き、ワークシートに対応するコードモジュールが表示されます。
- 新しいコードモジュールの上部にある左側のドロップダウンからワークシートを選択します。
- 右のドロップダウンから計算を選択します。
- 以下のようにコードを入力します。
ここにコードがあるので、自分ですべて入力する必要はありません。 ワークシートのコードモジュールにコピーして貼り付けるだけです。
Private Sub Worksheet_Calculate() Dim vData As Variant With Me.ChartObjects(1).Chart vData = .SeriesCollection(1).XValues With .Axes(xlCategory) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = WorksheetFunction.Average(vData) End With vData = .SeriesCollection(1).Values With .Axes(xlValue) .TickLabelPosition = xlTickLabelPositionLow .CrossesAt = WorksheetFunction.Average(vData) End With End WithEnd Sub
ワークシートモデルの詳細に応じて、次のように使用できます。Worksheet_Calculate
, Worksheet_Change
, Worksheet_PivotTableUpdate
, またはチャートを更新するための他のイベント手順。