ggplot2 상자 그림에서 특이치 무시
ggplot2 상자 그림에서 특이치를 무시하는 방법은 무엇입니까?단순히 사라지기만 하는 것이 아니라(예: outlier.size=0) y축이 1/3번째 백분위수를 나타내도록 크기가 조정되도록 무시했으면 합니다.특이치 때문에 "상자"가 너무 작게 축소되어 사실상 선이 됩니다.이것을 다룰 수 있는 기술이 있습니까?
편집 예는 다음과 같습니다.
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom="boxplot")
특이치를 표시하지 않고 축 한계를 변경합니다.
예를 들면.
n <- 1e4L
dfr <- data.frame(
y = exp(rlnorm(n)), #really right-skewed variable
f = gl(2, n / 2)
)
p <- ggplot(dfr, aes(f, y)) +
geom_boxplot()
p # big outlier causes quartiles to look too slim
p2 <- ggplot(dfr, aes(f, y)) +
geom_boxplot(outlier.shape = NA) +
scale_y_continuous(limits = quantile(dfr$y, c(0.1, 0.9)))
p2 # no outliers plotted, range shifted
사실, Ramnath가 그의 답변에서 보여주었듯이 (그리고 Andrie도 댓글에서) 통계를 계산한 후에 를 통해 척도를 자르는 것이 더 이치에 맞습니다.
coord_cartesian(ylim = quantile(dfr$y, c(0.1, 0.9)))
(아마도 여전히 사용해야 할 것입니다.scale_y_continuous
(축 파단을 고정합니다.)
다음은 boxplot.stats를 사용한 솔루션입니다.
# create a dummy data frame with outliers
df = data.frame(y = c(-100, rnorm(100), 100))
# create boxplot that includes outliers
p0 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)))
# compute lower and upper whiskers
ylim1 = boxplot.stats(df$y)$stats[c(1, 5)]
# scale y limits based on ylim1
p1 = p0 + coord_cartesian(ylim = ylim1*1.05)
나도 같은 문제를 가지고 있었고 Q1, Q2, 중위수, ymin, ymax에 대한 값을 미리 계산했습니다.boxplot.stats
:
# Load package and generate data
library(ggplot2)
data <- rnorm(100)
# Compute boxplot statistics
stats <- boxplot.stats(data)$stats
df <- data.frame(x="label1", ymin=stats[1], lower=stats[2], middle=stats[3],
upper=stats[4], ymax=stats[5])
# Create plot
p <- ggplot(df, aes(x=x, lower=lower, upper=upper, middle=middle, ymin=ymin,
ymax=ymax)) +
geom_boxplot(stat="identity")
p
한 가지 아이디어는 데이터를 2-패스 절차로 윈저라이징하는 것입니다.
첫 번째 패스를 실행하여 한계가 무엇인지 학습합니다(예: 주어진 백분위수에서의 절단 또는 평균 위의 N 표준 편차).
두 번째 패스에서, 주어진 경계를 넘어 그 경계의 값을 설정합니다.
저는 이것이 좀 더 현대적인 강력한 기술이 지배해야 하는 구식 방법이라는 것을 강조해야 하지만 여전히 그것을 많이 접하게 됩니다.
gg.layers::geom_boxplot2
당신이 원하는 것입니다.
# remotes::install_github('rpkgs/gg.layers')
library(gg.layers)
library(ggplot2)
p <- ggplot(mpg, aes(class, hwy))
p + geom_boxplot2(width = 0.8, width.errorbar = 0.5)
https://rpkgs.github.io/gg.layers/reference/geom_boxplot2.html
수염이 최대 및 최소 값으로 확장되도록 하려면 다음과 같이 조정할 수 있습니다.coef
논쟁.기본값:coef
는 1.5입니다(즉, 수염의 기본 길이는 IQR의 1.5배).
# Load package and create a dummy data frame with outliers
#(using example from Ramnath's answer above)
library(ggplot2)
df = data.frame(y = c(-100, rnorm(100), 100))
# create boxplot that includes outliers
p0 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)))
# create boxplot where whiskers extend to max and min values
p1 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)), coef = 500)
간단하고, 더럽고, 효과적입니다.gem_boxplot(특이값.알파 = 0)
gem_boxplot 함수의 "coef" 옵션을 사용하면 사분위간 범위의 관점에서 특이치 컷오프를 변경할 수 있습니다.이 옵션은 stat_box 그림 함수에 대해 설명되어 있습니다.특이치를 비활성화하려면(즉, 일반 데이터로 처리됨) 기본값 1.5를 사용하는 대신 매우 높은 컷오프 값을 지정할 수 있습니다.
library(ggplot2)
# generate data with outliers:
df = data.frame(x=1, y = c(-10, rnorm(100), 10))
# generate plot with increased cutoff for outliers:
ggplot(df, aes(x, y)) + geom_boxplot(coef=1e30)
언급URL : https://stackoverflow.com/questions/5677885/ignore-outliers-in-ggplot2-boxplot
'programing' 카테고리의 다른 글
명령 및 인수와 함께 python 하위 프로세스를 사용하는 동안 "OSError: [Errno 2] 해당 파일 또는 디렉터리 없음" (0) | 2023.06.07 |
---|---|
구체적으로, 포크()는 리눅스에서 malloc()에서 동적으로 할당된 메모리를 어떻게 처리합니까? (0) | 2023.06.07 |
사용자별로 조건을 충족하는 초기 항목 필터링 (0) | 2023.06.07 |
Angular 2 및 TypeScript 약속 (0) | 2023.06.07 |
소수점 다음에 숫자를 얻는 방법은? (0) | 2023.06.07 |