87

データフレームにはn個の列があり、列ごとに1つのプロットをn個取得したいと思います。

私は初心者で、Rに堪能ではありませんが、とにかく2つの解決策を見つけました。

最初のものは機能しますが、列名は出力されません(そして私はそれらが必要です!):

data <- read.csv("sample.csv",header=T,sep=",")
for ( c in data ) plot( c, type="l" )

2つ目は、列名を出力するため、より適切に機能します。

data <- read.csv("sample.csv",header=T,sep=",")
for ( i in seq(1,length( data ),1) ) plot(data[,i],ylab=names(data[i]),type="l")

(R言語の観点から)より良い解決策はありますか?

4

11 に答える 11

98

パッケージにはggplot2少し学習が必要ですが、結果は非常に見栄えがよく、多くのコードを記述しなくても、優れた凡例に加えて、他の多くの優れた機能を利用できます。

require(ggplot2)
require(reshape2)
df <- data.frame(time = 1:10,
                 a = cumsum(rnorm(10)),
                 b = cumsum(rnorm(10)),
                 c = cumsum(rnorm(10)))
df <- melt(df ,  id.vars = 'time', variable.name = 'series')

# plot on same grid, each series colored differently -- 
# good if the series have same scale
ggplot(df, aes(time,value)) + geom_line(aes(colour = series))

# or plot on different plots
ggplot(df, aes(time,value)) + geom_line() + facet_grid(series ~ .)

ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2011-02-02T17:51:11.987 に答える
47

個別のパネルまたは同じパネルを使用して、データフレームからすべての列をプロットする非常に簡単な方法があります。

plot.ts(data)

どちらが生成されますか(X1〜X4は列名です):

ここに画像の説明を入力してください

すべてのオプションについては、?plot.tsをご覧ください。

プロット関数をこれ以上制御せず、ループを使用しない場合は、次のようなこともできます。

par(mfcol = c(ncol(data), 1))
Map(function(x,y) plot(x, main =y), data, names(data))
于 2011-02-03T05:07:57.667 に答える
15

あなたはフープを飛び越えてあなたの解決策をに変換するかlapplysapplyまたはapply呼び出すことができます。(@jonwがこれを行う1つの方法を示しているようです。)それ以外は、すでに持っているものは完全に受け入れ可能なコードです。

これらがすべて時系列または類似のものである場合は、以下が適切な代替手段である可能性があります。これは、単一のプロット領域の独自のパネルに各シリーズをプロットします。zooこのような注文データを非常にうまく処理するため、このパッケージを使用します。

require(zoo)
set.seed(1)
## example data
dat <- data.frame(X = cumsum(rnorm(100)), Y = cumsum(rnorm(100)),
                  Z = cumsum(rnorm(100)))
## convert to multivariate zoo object
datz <- zoo(dat)
## plot it
plot(datz)

これは次のようになります。 動物園のプロット機能の例

于 2011-02-02T17:19:08.287 に答える
11

誰も言及していないことに驚いていmatplotます。各線を別々の軸にプロットする必要がない場合に非常に便利です。たった1つのコマンド:

matplot(y = data, type = 'l', lty = 1)

?matplotすべてのオプションを表示するために使用します。

凡例を追加するには、カラーパレットを設定してから、次のように追加します。

mypalette = rainbow(ncol(data))
matplot(y = data, type = 'l', lty = 1, col = mypalette)
legend(legend = colnames(data), x = "topright", y = "topright", lty = 1, lwd = 2, col = mypalette)
于 2016-12-05T19:20:46.847 に答える
9

上記のヒントのいくつかを使用して(特にnames(df)[i]フォームの@daroczigに感謝)、この関数は数値変数のヒストグラムと因子変数の棒グラフを出力します。データフレームを探索するための良いスタート:

par(mfrow=c(3,3),mar=c(2,1,1,1)) #my example has 9 columns

dfplot <- function(data.frame)
{
  df <- data.frame
  ln <- length(names(data.frame))
  for(i in 1:ln){
    mname <- substitute(df[,i])
      if(is.factor(df[,i])){
        plot(df[,i],main=names(df)[i])}
        else{hist(df[,i],main=names(df)[i])}
  }
}

よろしくお願いします、マット。

于 2012-01-24T22:30:57.533 に答える
5

lattice

library(lattice)

df <- data.frame(time = 1:10,
                 a = cumsum(rnorm(10)),
                 b = cumsum(rnorm(10)),
                 c = cumsum(rnorm(10)))

form <- as.formula(paste(paste(names(df)[- 1],  collapse = ' + '),  
                         'time',  sep = '~'))

xyplot(form,  data = df,  type = 'b',  outer = TRUE)
于 2011-11-21T10:22:35.130 に答える
4

残念ながら、ggplot2は、データを長い形式に変換せずにこれを(簡単に)行う方法を提供していません。あなたはそれと戦うことを試みることができますが、データ変換を行う方が簡単です。ここでは、meltreshape2、gathertidyr、およびtidyrを含むすべてのメソッドpivot_longerdata.frameをワイド形式からロング形式に再形成します

以下を使用した簡単な例を次に示しpivot_longerます。

> df <- data.frame(time = 1:5, a = 1:5, b = 3:7)
> df
  time a b
1    1 1 3
2    2 2 4
3    3 3 5
4    4 4 6
5    5 5 7

> df_wide <- df %>% pivot_longer(c(a, b), names_to = "colname", values_to = "val")
> df_wide
# A tibble: 10 x 3
    time colname   val
   <int> <chr>   <int>
 1     1 a           1
 2     1 b           3
 3     2 a           2
 4     2 b           4
 5     3 a           3
 6     3 b           5
 7     4 a           4
 8     4 b           6
 9     5 a           5
10     5 b           7

ご覧のとおりpivot_longer、選択した列名をnames_to(デフォルトの「名前」)で指定されたものに入れ、長い値をvalues_to(デフォルトの「値」)で指定されたものに入れます。デフォルトの名前でよければ、useを使用できますdf %>% pivot_longer(c("a", "b"))

これで、通常どおりにプロットできます。

ggplot(df_wide, aes(x = time, y = val, color = colname)) + geom_line()

ここに画像の説明を入力してください

于 2020-10-23T07:14:31.840 に答える
3

私はこのコンピューターにRを持っていませんが、ここに亀裂があります。parウィンドウに複数のプロットを表示するために使用したり、次のページを表示する前にクリックを求めるプロンプトを表示したりすることができます。

plotfun <- function(col) 
  plot(data[ , col], ylab = names(data[col]), type = "l")
par(ask = TRUE)
sapply(seq(1, length(data), 1), plotfun)
于 2011-02-02T17:11:57.973 に答える
3

xlabオプションを使用して、タイトル(およびを介して軸のタイトルも指定できますylab)を指定できますmain。例えば:

plot(data[,i], main=names(data)[i])

また、データフレームの各変数をプロット(および保存)する場合はpngpdfまたはその他の必要なグラフィックスドライバーを使用し、その後dev.off()コマンドを発行する必要があります。例えば:

data <- read.csv("sample.csv",header=T,sep=",")
for (i in 1:length(data)) {
    pdf(paste('fileprefix_', names(data)[i], '.pdf', sep='')
    plot(data[,i], ylab=names(data[i]), type="l")
    dev.off()
}

mfrowまたは、のパラメータを使用して、すべてのプロットを同じ画像に描画しますpar()。例:par(mfrow=c(2,2)同じ「画像」に次の4つのプロットを含めるために使用します。

于 2011-02-02T17:08:37.457 に答える
1

.csvファイルファイルの列名が有効でない場合R名:

data <- read.csv("sample.csv",sep=";",head=TRUE)
data2 <- read.csv("sample.csv",sep=";",head=FALSE,nrows=1)

for ( i in seq(1,length( data ),1) ) plot(data[,i],ylab=data2[1,i],type="l")
于 2016-03-01T10:51:43.473 に答える
0

このリンクは、同じ問題について私を大いに助けました:

p = ggplot() + 
  geom_line(data = df_plot, aes(x = idx, y = col1), color = "blue") +
  geom_line(data = df_plot, aes(x = idx, y = col2), color = "red") 

print(p)

https://rpubs.com/euclid/343644

于 2020-12-14T09:44:33.793 に答える