我正在努力使用R
/ggplot2
来复制this演示的各个方面。
对于第一个点(绘制不同的bin计数),我已经很好地管理了,但是当对第二个点(不同的最大值)复制这种方法时,它奇怪地失败了,我不知道为什么。
下面是我在上面的文章**2.**中指出的缺乏鲁棒性的原因:
library(dplyr)
library(ggplot2)
library(magrittr)
requireNamespace("kmed")
# Define the new maxima to be used
maxima <- c(197, 202, 213, 224)
# Replicate the UCI heart data set
m_df <- bind_rows(
replicate(length(maxima), kmed::heart, simplify = FALSE)) %>%
dplyr::mutate(
sm = rep(maxima, each = nrow(kmed::heart)),
fsm = paste("Maximum Edited to:", rep(maxima, each = nrow(kmed::heart))))
# Modify the maxima
m_df[which(m_df$thalach == max(m_df$thalach)), "thalach"] <- maxima
# Generate individual geom_histogram layers, forcing identical number of bins
m_lp_hist <- plyr::llply(maxima, function(b) {
geom_histogram(
data = m_df %>% filter(sm == b),
mapping = aes(x = thalach),
bins = 20)
})
# Combine the layers
m_p_hist <- Reduce("+", m_lp_hist, init = ggplot2::ggplot())
m_p_hist +
ggplot2::facet_wrap(. ~ fsm, scales = "free_y") +
ggplot2::theme_bw() +
ggplot2::labs(x = "Maximum Heart Rate Achieved", y = "Count")
当评估结果图时,直方图非常相似(!),同时逐步通过使用ggplot() + m_p_list[[1]]
等生成的各个层。很好地显示了层之间的差异,从而显示了我想要展示的效果(直方图缺乏鲁棒性)。这是怎么回事!?
谢谢你的指点
1条答案
按热度按时间mzsu5hc01#
你非常接近(我认为的)你想要的。试试这个:
说明
您的原始代码将所有4个直方图层添加到单个ggplot对象中,然后再次将它们划分到4个单独的绘图面板中,**不允许x轴比例在各个方面变化。**因此,x轴范围/限制是根据所有4个层的组合数据计算的,每个直方图的20个箱是根据相同的范围计算的。
通过将
scales = "free_y"
更改为scales = "free"
,我们允许x轴尺度变化,并且每个直方图的20个bin是从不同的值范围计算的。顺便说一句,我不太清楚为什么要通过
facet_wrap
创建它。我会做4个单独的ggplot对象,然后将它们拼接成一个单独的图表,以便于演示,这将避免上述问题。例如: