다음과 같은 데이터가 있습니다.
Name Count
Object1 110
Object2 111
Object3 95
Object4 40
...
Object2000 1
따라서 처음 3 개 개체 만 개수가 많고 나머지 1996 개체는 40 개 미만, 대다수는 10 개 미만입니다.이 데이터를 다음과 ggplot
같이 막대로 플로팅합니다 .
ggplot(data=object_count, mapping = aes(x=object, y=count)) +
geom_bar(stat="identity") +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
내 줄거리는 다음과 같습니다. 보시다시피 적은 개수의 개체가 너무 많기 때문에 그래프의 너비가 매우 길고 막대의 너비가 작아서 개수가 많은 개체에서는 거의 보이지 않습니다. 이 데이터를 표현하는 더 좋은 방법이 있습니까? 내 목표는 몇 개의 상위 개수 개체를 표시하고 개수가 적은 개체가 많이 있음을 보여주는 것입니다. 낮은 카운트를 함께 그룹화하는 방법이 있습니까?
내 생각 엔 데이터는 다음과 같습니다.
set.seed(1)
object_count <- tibble(
obj_num = 1:2000,
object = paste0("Object", obj_num),
count = ceiling(20 * rpois(2000, 10) / obj_num)
)
head(object_count)
## A tibble: 6 x 3
# obj_num object count
# <int> <chr> <dbl>
#1 1 Object1 160
#2 2 Object2 100
#3 3 Object3 46
#4 4 Object4 55
#5 5 Object5 56
#6 6 Object6 40
물론 그것을 플롯 ggplot(object_count, aes(object, count)) + geom_col() + [theme stuff]
하면 비슷한 그림을 얻습니다.
다음은 "상위 개수의 개체 몇 개를 표시하고 개수가 적은 개체가 많이 있음을 보여주는"전략입니다.
중요한 큰 값이 극적으로 덜 자주 나타나고 충분히 눈에 띄지 않기 때문에 바닐라 히스토그램은 여기서 명확하지 않을 수 있습니다.
ggplot(object_count, aes(count)) +
geom_histogram()
그러나 우리는 작은 값을 더 강조하기 위해 y 축을 변환함으로써 그것을 바꿀 수 있습니다. pseudo_log
은 선형에 가까운 큰 값을 변환 로그처럼 작동하지만 이후 -1 1.이보기에서 변화가에 대한 좋은, 우리는 분명히 하나의 모습과 이상 값이 어디에 있는지, 또한 더 많은 있다는 것을 볼 수있다 작은 값. binwidth = 1
큰 값의 특정 값이 자신의 일반적인 범위만큼 중요하지 않은 경우 여기 더 넓은 것으로 설정 될 수있다.
ggplot(object_count, aes(count)) +
geom_histogram(binwidth = 1) +
scale_y_continuous(trans = "pseudo_log",
breaks = c(0:3, 100, 1000), minor_breaks = NULL)
또 다른 옵션은 뷰를 두 부분으로 분할하는 것입니다. 하나는 큰 값에 대한 세부 정보이고 다른 하나는 모든 작은 값을 표시합니다.
object_count %>%
mutate(biggies = if_else(count > 20, "Big", "Little")) %>%
ggplot(aes(obj_num, count)) +
geom_col() +
facet_grid(~biggies, scales = "free")
또 다른 옵션은 10 미만의 모든 개수를 너무 한꺼번에 묶을 수 있습니다. 아래 버전은 개체 이름과 개수를 강조하고 "기타"범주에는 포함 된 값의 수를 표시하기 위해 레이블이 지정되어 있습니다.
object_count %>%
mutate(group = if_else(count < 10, "Others", object)) %>%
group_by(group) %>%
summarize(avg = mean(count), count = n()) %>%
ungroup() %>%
mutate(group = if_else(group == "Others",
paste0("Others (n =", count, ")"),
group)) %>%
mutate(group = forcats::fct_reorder(group, avg)) %>%
ggplot() +
geom_col(aes(group, avg)) +
geom_text(aes(group, avg, label = round(avg, 0)), hjust = -0.5) +
coord_flip()
총 개수의 비율에 관심이있는 경우 누적 개수를보고 큰 값이 큰 비율을 구성하는 방법을 볼 수도 있습니다.
object_count %>%
mutate(cuml = cumsum(count)) %>%
ggplot(aes(obj_num)) +
geom_tile(aes(y = count + lag(cuml, default = 0),
height = count))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다