gpt4 book ai didi

R:适合显示具有倾斜计数的数据的图

转载 作者:行者123 更新时间:2023-12-02 01:51:25 26 4
gpt4 key购买 nike

我有这样的数据:

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())

我的情节如下。正如您所看到的,由于计数低的对象太多,图形的宽度很长,而条形的宽度很小,对于计数高的对象几乎看不见。有没有更好的方法来表示这些数据?我的目标是显示一些最高计数的对象并显示许多低计数的对象。有没有办法将低计数的分组在一起?

enter image description here

最佳答案

我的猜测是您的数据看起来像这样:

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] 绘制它时,我得到了一个类似的数字。

enter image description here

<小时/>

这里有一些策略“显示一些最高计数的对象并显示许多低计数的对象。”

直方图

普通的直方图在这里可能无法澄清,因为重要的大值出现的频率显着降低,并且不够突出:

ggplot(object_count, aes(count)) +
geom_histogram()

enter image description here

但是我们可以通过改变 y 轴来改变这一点,以更加强调小值。 pseudo_log 变换非常适合这一点,因为它的工作原理类似于大值的对数变换,但线性接近 -1 到 1。在此 View 中,我们可以清楚地看到仅出现一种的异常值在哪里,但也看到还有更多的小值。如果大值的具体值不如其一般范围那么重要,则此处的 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)

enter image description here

分面

另一种选择可能是将您的 View 分成两部分,一个显示大值的详细信息,另一个显示所有小值:

object_count %>%
mutate(biggies = if_else(count > 20, "Big", "Little")) %>%
ggplot(aes(obj_num, count)) +
geom_col() +
facet_grid(~biggies, scales = "free")

enter image description here

集中

另一个选项可能过于将 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()

enter image description here

累计计数(~帕累托图)

如果您对总计数的份额感兴趣,您还可以查看累积计数并了解大值如何构成较大份额:

object_count %>%
mutate(cuml = cumsum(count)) %>%
ggplot(aes(obj_num)) +
geom_tile(aes(y = count + lag(cuml, default = 0),
height = count))

enter image description here

关于R:适合显示具有倾斜计数的数据的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com