R语言 如何在函数ggplot中添加子图?

eqoofvh9  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(127)

我有下面的数据集,它基本上是一个3列的数据框架

column_A <- rep(sample(300:1000000, 903, replace = F), each=10)
column_B <- sample(5:25, 9030, replace = T)

df <- data.frame(column_A, column_B)
df$group <- sample(1:4, nrow(df), replace = T)
rm(column_A)
rm(column_B)

我想使用geom.point()生成一个图,使用以下代码:

graph_builder <- function(data_set, y_axis_parameter, category, group) {
 
  graph <- ggplot(data_set, aes(x = factor({{category}}), y = {{ y_axis_parameter }})) +
    geom_point() +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) + 
    facet_grid(rows = vars({{ group }}), scales = "free_x") 
  
  graph
}

graph_builder(df, column_B, column_A, group )

使用我的真实的数据集,类似于生成的数据框,我正在处理x轴的大量类别(接近900个),因此x轴上的值变得拥挤且不可读。我想让我的图表更具可读性。

**我的解决方案:**我正在向数据框添加一个名为“group”的新列,并分配数值,从1到4。这将大致相等数量的数据点分配给这四个组(1,2,3和4)中的每一个。但正如您在代码中看到的,我添加了这个新列,它在grpah_builder()函数之外分配分组。

我认为一定有更好的方法将我的矩阵划分为4个(或5个)子组,以这种方式,最终的图有4个子图。我应该提到的是,在我的真实的 Dataframe 中,x轴上的值并不遵循均匀分布,这使得在使用cut()函数时组大小不同。Look at this solution

**问题1:**有没有一种方法可以在graph_builder()函数中划分数据集?正如你所看到的,我的代码生成的图形是不可读的,任何使它更具可读性的解决方案都是值得赞赏的。

2w3rbyxf

2w3rbyxf1#

你在问你的x轴的英雄主义。这里有一个版本,我已经分裂成6个方面的类别值的顺序图表。这只是勉强可读,但它不是很明显,我可以做得更好,没有一个更大的格式。也许IMAX?
在这里,我将类别转换为因子,并将其转换为数字,因此num_cat的范围将从第一个column_A值的1到最后一个值的903。然后我们就可以用一点数学来平均地分组。

graph_builder <- function(data_set, y_axis_parameter, category) {
    
  data_set <- data_set %>%
    mutate(num_cat = as.numeric(factor({{category}})),
           group = floor(num_cat*6/max(num_cat + 1))) 
    
  ggplot(data_set, aes(x = factor({{category}}), y = {{ y_axis_parameter }})) +
    geom_point() +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) + 
    theme(strip.background = element_blank(), strip.text = element_blank()) +
    facet_wrap(vars(group), scales = "free_x", nrow = 6) 
  }

graph_builder(df, column_B, column_A )

相关问题