0

ここにあるプロットのように、複数のデータセットを同じ棒グラフに表示したいと思います。

私のデータは基本的に、さまざまな国の「男性/女性」の身長です。X 軸に国を示し、国ごとの男性と女性の身長を示す 2 つの棒グラフ (青と赤) が必要です。

私はこれに数日間苦労しましたが、まだ理解していません。

各データセットは現在、最初の列に「国」、2番目の列に「高さ」を持つ独自のデータフレームに保存されています。だから私は male_heights と female_heights データフレームの両方を持っています.

ありがとう!

4

3 に答える 3

4

ダミーデータの例を次に示します。

# create some dummy data of two data.frames for male and female
set.seed(45)
dd.m <- data.frame(country = sample(letters[1:8]), height=sample(150:200, 8))
dd.f <- data.frame(country = sample(letters[1:8]), height=sample(130:180, 8))

# create an grp column for each of the above data.frames (M, F -> male, female)
dd.m$grp <- "M"
dd.f$grp <- "F"

# merge data together
dd <- rbind(dd.m, dd.f)

# set levels for grp column - which one should be displayed first within the group
# here, female followed by male
dd$grp <- factor(dd$grp, levels=c("F", "M"), ordered=TRUE)

# make sure country is a factor (reorder levels if you have to)
dd$country <- factor(dd$country)

# plot using ggplot
require(ggplot2)    
ggplot(data = dd, aes(x=country)) + 
      geom_bar(aes(weights=height, fill=grp), position="dodge") + 
      scale_fill_brewer(palette = "Set1")

これは与える: ここに画像の説明を入力してください

于 2013-03-11T14:56:01.623 に答える
3

まず、国に基づいて両方のdata.frameをマージする必要があります。たとえば、プロットにggplot2を使用できます。

ggplot2を使用した例を次に示します。

# some data
male_heights <- data.frame(country = LETTERS[1:20],
                           heights = runif(20, 10,20))
female_heights <- data.frame(country = LETTERS[1:20],
                            heights = runif(20, 10,20))

# merge both data.frame
df_m <- merge(male_heights, female_heights, by = 'country', suffixes=c('_males', '_females'))

# bring data to long format
require(reshape2)
dfm <- melt(df_m)

# plot
ggplot(dfm, aes(x = country, y = value, fill = variable)) +
  geom_bar(stat = 'identity', position = 'dodge')

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

于 2013-03-11T14:56:51.847 に答える
2

完全を期すために、ベース R のオプションと、通常は R と共にインストールされる「lattice」パッケージのオプションをいくつか示します。@Arun のサンプル データを使用して、それぞれの基本的な例を次に示します。(それぞれの外観をカスタマイズする方法はたくさんあります。)

## Base R -- Nothing fancy. 
## Requires a vector or matrix for your data
barplot(xtabs(height ~ grp + country, dd), 
        beside = TRUE, col = c("red", "blue"))

ここに画像の説明を入力

## lattice -- can work directly with your data.frame
## Several interesting options for groupings
library(lattice)
barchart(height ~ country, data = dd, groups = grp, 
         ylim = c(0, max(dd$height)+10), col = c("red", "blue"))

ここに画像の説明を入力

于 2013-03-11T16:02:14.380 に答える