0

就像在这里找到的图中一样,我想在同一个条形图中显示多个数据集。

我的数据基本上是各个国家的“男性/女性”身高。我想要沿 x 轴的国家和每个国家/地区的男性和女性身高的两个条形图(一个蓝色和一个红色)。

我已经为此苦苦挣扎了几天,但仍然没有弄清楚。

每个数据集当前都存储在自己的数据框中,第一列是“国家”,第二列是“高度”。所以我有一个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 回答