所以我有两个直方图,我可以一次做一个。使用以下代码的结果为6个不同的直方图提供了2行x 3 col facet图:
ggplot(data) +
aes(x=values) +
geom_histogram(binwidth=2, fill='blue', alpha=0.3, color="black", aes(y=(..count..)*100/(sum(..count..)/6))) +
facet_wrap(~ model_f, ncol = 3)
此处aes(y...)
只提供百分比而不是计数。
如上所述,我有两个这样的6个facet_wrap图,我现在将它结合起来表明一个比另一个更多的移位。 另外,数据大小不一样,所以我有一个:
# A tibble: 5,988 x 5
values ID structure model model_f
<dbl> <chr> <chr> <chr> <fctr>
1 6 1 bone qua Model I
2 7 1 bone liu Model II
3 20 1 bone dav Model III
4 3 1 bone ema Model IV
5 3 1 bone tho Model V
6 4 1 bone ranc Model VI
7 3 2 bone qua Model I
8 5 2 bone liu Model II
9 18 2 bone dav Model III
10 2 2 bone ema Model IV
# ... with 5,978 more rows
另一个:
# A tibble: 954 x 5
values ID structure model model_f
<dbl> <chr> <chr> <chr> <fctr>
1 9 01 bone qua Model I
2 8 01 bone liu Model II
3 22 01 bone dav Model III
4 6 01 bone ema Model IV
5 5 01 bone tho Model V
6 9 01 bone ran Model VI
7 12 02 bone qua Model I
8 11 02 bone liu Model II
9 24 02 bone dav Model III
10 9 02 bone ema Model IV
# ... with 944 more rows
所以它们的大小不一样,ID不相同(数据不相关),但我仍然希望合并直方图以查看数据之间的差异。
我认为这可能会成功:
ggplot() +
geom_histogram(data=data1, aes(x=values), binwidth=1, fill='blue', alpha=0.3, color="black", aes(y=(..count..)*100/(sum(..count..)/6))) +
geom_histogram(data=data2, aes(x=values), binwidth=1, fill='blue', alpha=0.3, color="black", aes(y=(..count..)*100/(sum(..count..)/6))) +
facet_wrap(~ model_f, ncol = 3)
然而,这并没有多大作用。
所以现在我被卡住了。这可能吗,或者......?
答案 0 :(得分:1)
基于内置数据集iris
(由于您没有提供可重现的数据),这是我的解决方法。为了创建较小的移位数据集,我使用dplyr
来保留每个物种的前20行,并为每个观察点添加1到Sepal长度:
smallIris <-
iris %>%
group_by(Species) %>%
slice(1:20) %>%
ungroup() %>%
mutate(Sepal.Length = Sepal.Length + 1)
您最后的代码会让您关闭,但您没有为两个直方图指定不同的颜色。如果您为每个设置fill
的方式不同,则会让它们以不同方式显示。您可以直接设置此项(例如,在其中一个中将“蓝色”更改为“红色”)或在aes
中设置名称。在aes
中设置它具有创建(和标记)图例的优势:
ggplot() +
geom_histogram(data=iris
, aes(x=Sepal.Length
, fill = "Big"
, y=(..count..)*100/(sum(..count..)))
, alpha=0.3) +
geom_histogram(data=smallIris
, aes(x=Sepal.Length
, fill = "Small"
, y=(..count..)*100/(sum(..count..)))
, alpha=0.3) +
facet_wrap(~Species)
创建此:
但是,我倾向于不喜欢重叠直方图的外观,所以我更喜欢使用密度图。你可以像上面那样做(只需更改geom_histogram
),但我认为你可以通过堆叠数据获得更多控制(以及将其扩展到两个以上的组的能力)。同样,这使用dplyr
将两个数据集拼接在一起:
bigIris <-
bind_rows(
small = smallIris
, big = iris
, .id = "Source"
)
然后,您可以相对轻松地创建绘图:
bigIris %>%
ggplot(aes(x = Sepal.Length, col = Source)) +
geom_line(stat = "density") +
facet_wrap(~Species)
创建: