2

ggplot2 のテーブル オブジェクトから折れ線グラフをプロットするための単純な類似物を見つけることができませんでした。パッケージの優雅さと実用性を考えると、明らかに何かが欠けているに違いないと思います。例として、毎年の観測データ フレームを考えてみましょう。

dat<-data.frame(year=sample(c("2001":"2010"),1000, replace=T))

ベース R での簡単な時系列プロット:

plot(table(dat$year), type="l")

qplot に切り替えると、「非関数を適用しようとしています」というエラーが返されます。

qplot(table(dat$year), geom="line")

ggplot2 にはデータ フレームが必要です。けっこうだ。しかし、これは同じエラーを返します。

qplot(year, data=dat, geom="line")

いくつかの検索といじりの後、私は を放棄qplotし、次のアプローチを思いつきました。これには、ライン ジオメトリの指定、カウントのビニング、ゼロのプロットを避けるための最終値のドロップが含まれます。

ggplot(dat, aes(year) ) + geom_line(stat = "bin", binwidth=1, drop=TRUE)

ブロックを一周するのはかなり長いようです。また、ビンが x 軸の年央の値と正確に一致していないため、まだ完全に満足できるものではありません。どこで間違ったのですか?

4

2 に答える 2

1

おそらくあなたが望むよりもさらに複雑ですが:

qplot(Var1,Freq,data=as.data.frame(table(dat$year)),geom="line",group=1)

group=1Year変数(Var1)が係数として返されるため、これが必要です...)

ワンライナーとして必要ない場合は、ytab <- as.data.frame(table(dat$year))最初にテーブルを抽出してデータフレームに変換するために使用できます...

Brian Diggsの答えに従って、もう少しfortify機械を構築したい場合は、これをもう少し凝縮することができます。

可能であれば係数を数値に変換する効用関数:

conv2num <- function(x) {
    xn <- suppressWarnings(as.numeric(as.character(x)))
    if (!all(is.na(xn))) xn else x
}

そして、fortifyテーブルをデータフレームに変換してから、列を数値にしようとするメソッド:

fortify.table <- function(x,...) {
    z <- as.data.frame(x)
    facs <- sapply(z,is.factor)
    z[facs] <- lapply(z[facs],conv2num)
    z
}

これで、これはほぼ希望どおりに機能します。

qplot(Var1,Freq,data=table(dat$year),geom="line")

table(相互分類係数の数値的性質を保持するオプションがあれば、それは素晴らしい/簡単です...)

于 2012-04-25T14:15:52.307 に答える
1

ベンの答えを拡張すると、「標準的な」アプローチは、テーブルからデータフレームを作成することです。その時点で、年を数値に戻すことができます。

ytab <- as.data.frame(table(dat$year))
ytab$Var1 <- as.numeric(as.character(ytab$Var1))

次のいずれかが機能します。

ggplot(ytab, aes(Var1, Freq)) + geom_line()
qplot(Var1, Freq, data=ytab, geom="line")

ここに画像の説明を入力

もう 1 つのアプローチはfortify、テーブルをデータ フレームに変換する関数を作成し、それを使用することです。

fortify.table <- as.data.frame.table

次に、データ フレームの代わりにテーブルを直接渡すことができます。しかし、Var1それは今でも要因であり、何group=1年にもわたって線をつなぐ必要があります。

ggplot(table(dat$year), aes(Var1, Freq)) + geom_line(aes(group=1))
qplot(Var1, Freq, data=table(dat$year), geom="line", group=1)

ここに画像の説明を入力

于 2012-04-25T20:28:42.057 に答える