如何在同一轴刻度上绘制两个直方图?

时间:2016-10-03 23:25:09

标签: r plot ggplot2 histogram

我有两个数据帧:dataf1,dataf2。它们具有相同的结构和列。 3列名称是A,B,C。他们都有50行。 我想在dataf1和dataf2上绘制B列的直方图。我可以分别绘制两个直方图,但它们的尺度不同。我想知道如何使用不同的颜色将它们放在相同的直方图上,或者绘制两个相同比例的直方图?

ggplot() + aes(dataf1$B)+ geom_histogram(binwidth=1, colour="black",fill="white") 
ggplot() + aes(dataf2$B)+ geom_histogram(binwidth=1, colour="black", fill="white")

2 个答案:

答案 0 :(得分:1)

正如哲源所说,你只需要为每个情节设定y限制,使它们达到相同的比例。使用ggplot2,一种方法是使用lims命令(虽然scale_y_continuouscoord_cartesian也可以工作,尽管略有不同)。您还应永远使用data$column indside aes()。相反,对data内的数据框和未加引号的列名使用aes()参数。这是一个内置数据的例子。

p1 = ggplot(mtcars, aes(x = mpg)) + geom_histogram() + lims(y = c(0, 13))
p2 = ggplot(iris, aes(x = Sepal.Length)) + geom_histogram() + lims(y = c(0, 13))

gridExtra::grid.arrange(p1, p2, nrow = 1)

enter image description here

在同一个图上两个得到两个直方图,最好的方法是组合你的数据帧。猜测,没有看到你的数据是什么样的:

dataf = rbind(dataf1["B"], dataf2["B"])
dafaf$source = c(rep("f1", nrow(dataf1)), rep("f2", nrow(dataf2))

ggplot(dataf, aes(x = B, fill = source)) + 
    geom_histogram(position = "identity", alpha = 0.7)

答案 1 :(得分:1)

将您的数据合并到一个数据框中,并使用新列标记数据最初来自哪个数据框。然后使用该新专栏为您的情节填充美学。

data1$source="Data 1"
data2$source="Data 2"

dat_combined = rbind(data1, data2)

您尚未提供样本数据,因此以下是使用内置iris数据框的可能图表的几个示例。在下面的图中,dat类似于dat_combinedPetal.Width类似于BSpecies类似于source

dat = subset(iris, Species != "setosa") # We want just two species

ggplot(dat, aes(Petal.Width, fill=Species)) + 
  geom_histogram(position="identity", colour="grey40", alpha=0.5, binwidth=0.1)

ggplot(dat, aes(Petal.Width, fill=Species)) + 
  geom_histogram(position="dodge", binwidth=0.1)

ggplot(dat, aes(Petal.Width, fill=Species)) + 
  geom_histogram(position="identity", colour="grey40", binwidth=0.1) +
  facet_grid(Species ~ .)

enter image description here