R言語における棒グラフとヒストグラムの例

⚡ スマートサマリー

R の棒グラフとヒストグラムは ggplot2 を使用して作成され、カテゴリのカウントには geom_bar()、連続分布には geom_histogram() を使用します。このチュートリアルでは、色、グループをカスタマイズします。pingmtcarsデータセットにおけるスタッキング、方向付け、ビニング、およびバー内ラベル。

  • 📊 中核的な特徴: 棒グラフはカテゴリ変数を要約するのに対し、ヒストグラムは単一の連続変数を区間に分割する。
  • 🧱 グラフィックの文法: すべてのプロットはデータセットと aes() マップを組み合わせたものです。ping、そしてプラス記号で結ばれた幾何学的図形。
  • 🎨 カラーコントロール: 均一な色にするには、geom_bar() 関数の中に fill を配置し、グループごとに色分けするには、aes() 関数の中に fill を配置します。
  • 📐 位置調整: position = “fill” はカウントをパーセンテージに変換し、position_dodge() はグループ化された棒グラフを横に並べます。
  • 🔢 値のプロット: y軸にグループ平均などの計算済み統計量が既に表示されている場合は、stat = “identity” を渡します。
  • ☃ ヒストグラムのビニング: geom_histogram() 関数でビン数またはビン幅を設定してください。デフォルトの30ビンはデータに適さないことがほとんどです。

R言語における棒グラフ・ヒストグラム

Rにおける棒グラフとは何ですか?

棒グラフは、X 軸にカテゴリ変数を表示するのに最適な方法です。 このタイプのグラフは、y 軸の XNUMX つの側面を示します。

  1. 最初の項目は、各グループにおける発生回数をカウントします。
  2. 2番目の図は、y軸に変数の要約統計量(最小値、最大値、平均値など)を示しています。

以下の変数を含むmtcarsデータセットを使用します。

  • cyl: 車のシリンダー番号。 数値変数
  • am: トランスミッションのタイプ。0 は自動、1 は手動。数値変数
  • mpg: ガロンあたりのマイル数。 数値変数

ヒストグラムは非常に似ているため、コードを書く前にその違いを明確にしておく価値があります。

Rにおける棒グラフとヒストグラム:主な違い

この2つの図表は見た目がよく似ており、しばしば混同される。しかし、それぞれ異なる問いに答えており、異なる幾何学的図形を用いている。

基準 棒グラフ ヒストグラム
X軸変数 カテゴリ変数または因子変数 連続的かつ数値的
バーが表すもの 1つのカテゴリー 値の1つの区間、またはビン
バー間の隙間 はい、カテゴリーは別々です いいえ、ゴミ箱は隣接しています
バーオーダー 自由に配置換え可能 数値スケールによって固定されます
質問への回答 各グループを比較するとどうでしょうか? ある変数はどのように分布しているか?
ggplot2オブジェクト geom_bar() ジオムヒストグラム()

経験則:棒グラフの順序を変更しても意味が通じる場合は棒グラフ、順序を変更すると意味が失われる場合はヒストグラムを使用します。同じ連続変数の四分位に基づく要約には、 箱ひげ図.

Rで棒グラフを作成する方法

グラフを作成するには R、すぐに公開できるグラフを作成するライブラリ ggplot を使用できます。 このライブラリの基本的な構文は次のとおりです。

ggplot(data, mapping = aes()) +
geometric object 

arguments: 
data: dataset used to plot the graph 
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common objects are:

- Point: `geom_point()`
- Bar: `geom_bar()`
- Line: `geom_line()`
- Histogram: `geom_histogram()` 

このチュートリアルでは、棒グラフを描画する幾何学的オブジェクト geom_bar() と、連続データ用の geom_histogram() に焦点を当てます。

棒グラフ: カウント

最初のグラフは、geom_bar() を使用した円柱の周波数を示しています。 以下のコードは最も基本的な構文です。

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

Code 説明

  • データセット mtcars を ggplot に渡します。
  • aes() 引数の中で、x軸を因子変数cylに設定します。
  • + 記号は、R にコードの読み取りを継続させることを意味します。コードを分割することで、コードが読みやすくなります。
  • 幾何学オブジェクトには geom_bar() を使用します。

出力:

棒グラフ: カウント

お願い: 変数を必ず因子に変換してください。そうしないと、R は変数を数値として扱います。以下の例を参照してください。

棒グラフ: カウント

グラフをカスタマイズする

グラフをカスタマイズするために XNUMX つの引数を渡すことができます。

- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar	

バーの色を変更する

バーの色を変更できます。 バーの色はすべて似ていることに注意してください。

# Change the color of the bars
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar(fill = "coral") +
    theme_classic()

Code 説明

  • バーの色は aes() マップによって制御されますping 幾何学的オブジェクトの内部(つまり、ggplot() 関数内ではない)です。fill 引数で色を変更できます。ここでは、サンゴ色を選択します。

出力:

バーの色を変更する

このコードを使用できます。

grDevices::colors()

R で利用可能なすべての色を確認するには、約 650 色があります。

強度を変更する

バーの色の強度を増減できます。

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

Code 説明

  • バーの濃淡を調整するには、アルファ値を変更します。アルファ値が大きいほど濃淡が濃くなり、小さいほど濃淡が薄くなります。アルファ値の範囲は0から1です。1の場合、色はパレットと完全に一致します。0の場合、バーは表示されません。ここでは、アルファ値を0.5に設定します。

出力:

強度を変更する

グループごとに色分け

バーの色を変更できます。つまり、グループごとに XNUMX つの異なる色が表示されます。 たとえば、cyl 変数には XNUMX つのレベルがあるため、XNUMX つの色で棒グラフをプロットできます。

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

Code 説明

  • aes() 関数内の引数 fill は、棒グラフの色を変更します。色を変更するには、fill に x 軸の変数を設定します。この例では、x 軸の変数は cyl です。fill = factor(cyl)

出力:

グループごとに色分け

バーにグループを追加する

別の要因レベルに基づいて、Y 軸をさらに分割できます。たとえば、シリンダーの種類に基づいて、オートマチック トランスミッションとマニュアル トランスミッションの数をカウントできます。

次のように進めます。

  • ステップ 1: mtcars データセットを使用してデータ フレームを作成する
  • ステップ 2: am 変数に、自動変速機の場合は auto、手動変速機の場合は man というラベルを付けます。am と cyl を係数として変換して、ggplot() 関数で factor() を使用する必要がないようにします。
  • ステップ3: シリンダーごとのトランスミッションの数を数える棒グラフをプロットする
library(dplyr)
# Step 1
data <- mtcars %>% 
#Step 2
mutate(am = factor(am, labels = c("auto", "man")),
    cyl = factor(cyl))

データセットの準備ができたら、グラフを作成できます。

# ステップ3

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar() +
    theme_classic()

Code 説明

  • ggplot() 呼び出しはデータセットデータと aes() マップを受け取りますping.
  • aes() には、変数 x-axis と、バーを埋めるためにどの変数が必要か (つまり am) を含めます。
  • geom_bar(): 棒グラフを作成します。

出力:

バーにグループを追加する

地図ping 棒グラフは2つの色で塗りつぶされ、それぞれのレベルに対応します。データセット内の他の因子変数を選択することで、グループを簡単に変更できます。

パーセントで表した棒グラフ

生の数の代わりにバーをパーセンテージで視覚化できます。

# パーセント単位の棒グラフ

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

Code 説明

  • geom_bar() 引数でposition = “fill”を使用して、Y軸にパーセンテージを含むグラフィックを作成します。

出力:

パーセンテージの棒グラフ

サイド・バイ・サイド・バー

グループ変数を並べて棒グラフをプロットするのは簡単です。

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

Code 説明

  • Position=position_dodge(): バーの配置方法を明示的に指示します。

出力:

サイド・バイ・サイド・バー

要約統計を含む棒グラフ

チュートリアルの第2部では、y軸にはカウントではなく計算値が表示されます。これはあくまで棒グラフであることに注意してください。真のヒストグラムについては後ほど説明し、異なる幾何学的オブジェクトを使用します。

目的は、シリンダーの種類ごとにガロンあたりの平均マイル数のグラフを作成することです。 有益なグラフを描画するには、次の手順に従います。

  • ステップ 1: シリンダーごとのガロンあたりの平均マイル数を含む新しい変数を作成する
  • ステップ 2: 基本的なヒストグラムを作成する
  • ステップ 3: 向きを変更する
  • ステップ 4: 色を変更する
  • ステップ5: サイズを変更する
  • ステップ 6: グラフにラベルを追加する

ステップ1) 新しい変数を作成します

data_histogram という名前のデータ フレームを作成します。これは、単純に車のシリンダー数によるガロンあたりの平均マイル数を返します。 この新しい変数を means_mpg と呼び、平均値を小数点以下 XNUMX 桁で四捨五入します。

# ステップ1

data_histogram <- mtcars %>%
mutate(cyl = factor(cyl)) %>%
group_by(cyl) %>%
summarize(mean_mpg = round(mean(mpg), 2))

ステップ2) 基本的なヒストグラムを作成する

ヒストグラムを作成できます。まだクライアントに渡せるほど完成度は高くありませんが、傾向は既に把握できます。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity")

Code 説明

  • aes() には XNUMX つの変数が含まれるようになりました。 cyl 変数は x 軸を指し、mean_mpg は y 軸を指します。
  • geom_bar() 関数は、行数を数える代わりに、y軸変数をそのまま使用するように、stat = “identity” を渡す。geom_bar() 関数のデフォルト値は stat = “count” である。

出力:

ヒストグラム

ステップ3) 向きを変える

グラフの方向を垂直から水平に変更します。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

Code 説明

  • coord_flip() を使用してグラフの方向を制御できます。

出力:

ヒストグラム

ステップ4) 色を変える

X 軸変数の因子水準に応じてバーの色を区別できます。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

Code 説明

  • fill=cylマップを使用すると、グループごとにグラフをプロットできます。pingRはcyl変数のレベルに基づいて色を自動的に処理します。

出力:

ヒストグラム

ステップ5) サイズを変更

グラフをより美しくするには、バーの幅を小さくします。

graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity",
        width = 0.5) +
    coord_flip() +
    theme_classic()

Code 説明

  • geom_bar() 関数内の width 引数は、棒グラフの太さを制御します。値が大きいほど、棒グラフは太くなります。
  • プロットはオブジェクトグラフに保存されます。なぜなら、次のステップで変更されずに再利用されるからです。中間プロットを保存することで、コードの可読性が維持されます。

出力:

ヒストグラム

ステップ6) グラフにラベルを追加する

最後のステップでは、各棒グラフの中にmean_mpgの値をラベルとして追加します。

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

Code 説明

  • 関数 geom_text() は、テキストの美しさを制御するのに役立ちます。
    • label=: バーの内側にラベルを追加します
    • means_mpg: ラベルに変数mean_mpgを使用します
  • hjust は、ラベルが棒グラフ上のどの位置に表示されるかを制御します。1 に近い値では棒グラフの端付近に配置され、値が大きいほど軸の方へ移動します。グラフの向きが垂直の場合は、hjust を vjust に変更してください。
  • color=”white”: 文字の色を変更します。 ここでは白色を使用します。
  • size=3: 文字のサイズを設定します。

出力:

ヒストグラム

R言語で棒グラフの棒の順序とラベル付けを行う方法

下書きのグラフを出版可能なグラフにするには、2つの仕上げ作業が必要です。それは、棒グラフを値順に並べ替えることと、軸に適切なラベルを付けることです。

バーの並び替え。 ggplot2 はデフォルトで因子レベルをアルファベット順に並べますが、これは必ずしも最も情報量の多い順序ではありません。2 番目の変数でソートするには、x 変数を reorder() で囲みます。

# Sort the bars from lowest to highest mean_mpg
ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) +
    geom_bar(stat = "identity", fill = "coral") +
    theme_classic()

ソート変数にマイナス記号を前置して、reorder(cyl, -mean_mpg) のようにすると、ソート方向が反転します。

タイトルと軸ラベルを追加します。 labs() 関数は、すべてのテキスト要素を一度の呼び出しで設定します。

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    labs(title = "Average fuel economy by cylinder count",
        subtitle = "mtcars dataset",
        x = "Number of cylinders",
        y = "Mean miles per gallon",
        fill = "Cylinders",
        caption = "Source: mtcars") +
    theme_classic()

labs() 内で fill = NULL を設定すると、凡例のタイトルが完全に削除されます。また、x 軸にグループ名が既に表示されている場合は、theme(legend.position = “none”) を使用して凡例を削除します。

お好みの色をお選びください。 デフォルトのカラーパレットを、ご自宅のスタイルに合ったものに置き換えてください。

scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))

geom_histogram() 関数を使って R でヒストグラムを作成する方法

ヒストグラムは、単一の連続変数がどのように分布しているかを示すものです。ggplot2は、カテゴリを数える代わりに、数値範囲をビンに分割し、それぞれのビンにいくつの観測値が含まれるかを数えます。

library(ggplot2)
# Most basic histogram
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram()

Rは、デフォルトの30ビンは任意であるため、より適切なビン数を選択することを推奨するメッセージを表示します。これを制御する引数は次の2つです。

  • ビン:範囲を分割する区間の数。
  • ビン幅各区間の幅を、変数の単位で表します。単位が意味を持つ場合に使用してください。
# Set the number of bins
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(bins = 10, fill = "coral", color = "white") +
    theme_classic()

# Or set the width of each bin instead
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(binwidth = 4, fill = "coral", color = "white") +
    theme_classic()

ヒストグラムにおいて、ビン分割は最も重要な選択です。ビン数が少なすぎると、2つ目のピークなどの真の構造が隠れてしまいます。多すぎると、グラフがノイズだらけになってしまいます。最終的に1つの値に決める前に、いくつかの値を試してみましょう。

グループ間の比較。 要素をマッピングして塗りつぶし、分布が読みやすい位置を設定します。

ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
    geom_histogram(bins = 10, position = "identity", alpha = 0.5) +
    theme_classic()

position = “identity” とアルファ値を小さく設定すると、ヒストグラムが重なり合って形状を直接比較できます。ビンを並べて表示したい場合は、position = “dodge” を使用してください。

個数ではなく密度。 グループのサイズが異なる場合は、面積が比較可能になるように密度をプロットし、平滑化された曲線を重ね合わせます。

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(aes(y = after_stat(density)), bins = 10,
        fill = "coral", alpha = 0.6) +
    geom_density(color = "steelblue", linewidth = 1) +
    theme_classic()

R言語における棒グラフとヒストグラム: Code 参 考

棒グラフは、x軸がカテゴリカルデータで、y軸がカウントまたは要約統計量である場合に適しています。以下の表は、上記で説明した各バリアントに対応するggplot2の呼び出しを示しています。

DevOps Tools Engineer試験のObjective Code
数量カウント
ggplot(df, aes(x = factor(x1))) + geom_bar()
塗りつぶしの色を変えてカウントする
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar()
グループごとにカウント (積み上げ)
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar()
グループで並べて数える
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge())
グループごとのカウント (% 単位で積み上げ)
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill")
値(要約統計量)
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity")
連続変数のヒストグラム
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30)

よくあるご質問

x軸の変数が連続値で、その分布を確認したい場合はヒストグラムを使用します。x軸が明確なカテゴリで構成され、それらを比較したい場合は棒グラフを使用します。

aes() 関数内では、fill は変数を色にマッピングするため、各グループにそれぞれ異なる色合いが割り当てられます。一方、aes() 関数外の geom_bar() 関数内では、fill はすべての棒グラフに適用される固定値です。

万能な答えはありません。まずは観測数の平方根から始めて、調整してください。ビンの数が少なすぎると、2つ目のピークなどの構造が隠れてしまい、多すぎると、ノイズが多くてギザギザしたグラフになってしまいます。

ヒストグラムは、AIプロジェクトにおける探索的データ分析の標準的な第一歩であり、モデルのトレーニングを行う前に、データの偏り、外れ値、クラスの不均衡を明らかにします。次に、棒グラフを用いて、特徴量の重要度とカテゴリの頻度を要約します。

はい。AIアシスタントは、グラフの簡単な説明からggplot2レイヤーを作成し、stat引数の欠落などのエラーを説明できます。生成されたコードは必ずご自身のデータで実行して、マップを確認してください。ping は正しい。