如何使用ggplot2限制每个构面的观察次数

时间:2018-12-17 23:20:57

标签: r ggplot2

我拥有包含数千个观察值和3列的数据。 X,Y和构面因子。是否可以通过在ggplot中设置一些参数而不管理数据来将每个构面网格的观察数限制为10个?

m1 = d1[,c("ACCOUNT_NAME", "Calculated_Potential", "SEGMENT")]

m1 = m1[order(m1[,"Calculated_Potential"], decreasing = T),]

p <- ggplot(data=m1, aes(x=reorder(ACCOUNT_NAME, Calculated_Potential), 
                         y=Calculated_Potential/10^6)) + 
     geom_bar(stat="identity") + 
     theme(axis.text.x = element_text(angle = -90, hjust = 0)) +
     facet_grid(~ SEGMENT) 

我会尝试类似的方法: reorder(ACCOUNT_NAME, Calculated_Potential)[1:10] 但是会引发错误。没有它,ggplot只会绘制所有观察结果。

是否有快速的解决方法,或者我需要手动管理每个组?

样本数据:

m1 = data.frame(ACCOUNT_NAME = stringi::stri_rand_strings(100, 10), 
                Calculated_Potential = runif(100, 10^6, 10^7), 
                SEGMENT = round(runif(100, 0, 2)))

所有这些观察结果都面对3个地块。我想限制它们的前10名(就像它们被排序一样)。

Appr。 2

我使用它的距离更近了

# get sorted values for each facet
u = unique(m1$SEGMENT)
seg = NULL
for (i in 1:length(u)) {  #i=1
  m = m1[which(m1$SEGMENT == u[i]),]
  seg[[i]] =  m[order(m[,"Calculated_Potential"], decreasing = T),]
}
seg = lapply(seg, function(x) x[1:10,])

p <- ggplot(data=data.table::rbindlist(seg), aes(x=reorder(ACCOUNT_NAME, Calculated_Potential), y=(Calculated_Potential/10^6))) + 
  geom_bar(stat="identity") + theme(axis.text.x = element_text(angle = -90, hjust = 0)) +
  facet_grid(~ SEGMENT) 

但是现在所有数据都针对每个构面绘制了30个观测值,因此可能只有一种方法可以制作3个单独的图而没有构图。

1 个答案:

答案 0 :(得分:1)

这并不完全在ggplot中,而是紧凑的tidyverse代码。

{{1}}