19

私はこの質問の反対、そしてこの質問反対のようなことをしたいのですが、それはプロット自体ではなく、伝説に関するものです.

他のSOの質問は、未使用の因子レベルを維持する方法について尋ねているようです。私は実際に私のものを削除したいと思います。いくつかの名前変数と、多数の棒グラフを作成するために使用している変数属性の列 (ワイド形式) がいくつかあります。再現可能な例を次に示します。

library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()

私はこれを得る:

ここに画像の説明を入力

対応する var nを持つ名前のみが棒グラフに表示されるようにしたいです (B には空白がありません)。

y=var出力ファイル名とビットを変更するだけで、ベース プロット コードを再利用するのは非常に簡単です。可能であれば、各プロットの結果にドロップレベルを使用するためだけに、データ フレームをサブセット化する必要はありません。


na.omit()提案に基づいて更新する

改訂されたデータセットを考えてみましょう:

library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()

NAが存在するna.omit()ため、プロットに使用する必要があります。var1しかし、na.omit はすべての列Aに値が存在することを確認するため、プロットはNA を持っているため、同様に削除されvar3ます。これは私のデータにより類似しています。NAが散りばめられた合計15の応答があります。現在プロットされている y ベクトルの値を持たず、データ フレーム全体のどのベクトルにも NAを持たない因子レベルのみを削除したいと考えています。

4

3 に答える 3

20

簡単なオプションの 1 つはna.omit()、データ フレームで使用してdfこれらの行を削除することです。NA

ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()

あなたの更新を考えると、次の

ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()

正常に動作し、 でのみ考慮NAされVar1ます。と のみをプロットしていることを考えるnameと、これらの変数のみを含むデータ フレームVarに適用します。na.omit()

ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()
于 2012-07-09T21:07:29.560 に答える
6

プロットするときは、データ フレームの 2 つの列のみを使用していることに注意してください。つまり、data.frame 全体を渡すのではなく、関連する列をx[,c("name", "var1")]取得して na.omit を適用し、不要な行を削除できます (Gavin Simpson が示唆するように)。na.omit(x[,c("name", "var1")])次に、このデータをプロットします。

私の R/ggplot はかなり錆びており、おそらくこれを達成するためのよりクリーンな方法があることに気付きました。

于 2012-07-09T21:30:39.693 に答える