我拥有包含数千个观察值和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名(就像它们被排序一样)。
我使用它的距离更近了
# 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个单独的图而没有构图。
答案 0 :(得分:1)
这并不完全在ggplot中,而是紧凑的tidyverse代码。
{{1}}