17

次のようなデータセットがあります。

cars    trucks  suvs
1          2    4
3          5    4
6          4    6
4          5    6
9          12   16

このデータの棒グラフを描画しようとしています。現在、私はそれを行うことができますbarplot

barplot(as.matrix(autos_data), main="Autos", 
         ylab= "Total",beside=TRUE, col=rainbow(5))

このグラフの生成:

棒グラフ

私の質問は次のとおりです: ggplot2 を使用してそのようなグラフを描画できますか? 具体的には、ファセットやその他のオプションを使用してグラフを曜日ごとに分割するにはどうすればよいですか? はいの場合、どうすればそれを達成できますか? さらに、ファセットを使用して別のレイアウトを作成するにはどうすればよいですか?

4

2 に答える 2

34

これは以前に何度も尋ねられました。答えは、データを要約しないようにggplotに指示するためstat="identity"にを使用する必要があるということです。geom_bar

dat <- read.table(text="
cars    trucks  suvs
1   2   4
3   5   4
6   4   6
4   5   6
9   12  16", header=TRUE, as.is=TRUE)
dat$day <- factor(c("Mo", "Tu", "We", "Th", "Fr"), 
             levels=c("Mo", "Tu", "We", "Th", "Fr"))

library(reshape2)
library(ggplot2)

mdat <- melt(dat, id.vars="day")
head(mdat)
ggplot(mdat, aes(variable, value, fill=day)) + 
  geom_bar(stat="identity", position="dodge")

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

于 2012-04-27T15:12:17.877 に答える
0

ここにありtidyrます:

ここでの最大の問題は、データをきちんとした形式に変換する必要があることです。R for Data Science ( http://r4ds.had.co.nz/ ) を読んで、整理されたデータと ggplot を使用できるようにすることを強くお勧めします。

一般に、経験則として、同じ geom の複数のインスタンスを入力する必要がある場合、おそらくデータの形式に解決策がありaes()、トップ レベル内の関数にすべてを配置できるようになりますggplot()。この場合、 を使用しgather()てデータを適切に配置する必要があります。

library(tidyverse)

# I had some trouble recreating your data, so I just did it myself here
data <- tibble(type = letters[1:9], 
               repeat_1 = abs(rnorm(9)), repeat_2  
               =abs(rnorm(9)), 
               repeat_3 = abs(rnorm(9)))

data_gathered <- data %>%
  gather(repeat_number, value, 2:4)

ggplot(data_gathered, aes(x = type, y = value, fill = repeat_number)) +
geom_col(position = "dodge")

ここに画像の説明を入力

于 2018-08-10T14:50:34.017 に答える