gpt4 book ai didi

r - 如何在ggplot中标记堆叠的直方图

转载 作者:行者123 更新时间:2023-12-02 09:15:42 26 4
gpt4 key购买 nike

我正在尝试将相应的标签添加到直方图中的颜色栏中。这是可复制的代码。

ggplot(aes(displ),data =mpg) + geom_histogram(aes(fill=class),binwidth = 1,col="black")

enter image description here

此代码给出了直方图,并为直方图栏的汽车“类别”提供了不同的颜色。但是,有什么方法可以在图形的相应颜色内添加“类别”的标签?

最佳答案

内置函数geom_histogramstat_bin非常适合在ggplot中快速构建图。但是,如果您要进行更高级的样式设置,则通常需要在构建图之前创建数据。在您的情况下,您有重叠的标签,这些标签看起来很凌乱。

以下代码为数据帧建立一个合并频率表:

# Subset data
mpg_df <- data.frame(displ = mpg$displ, class = mpg$class)
melt(table(mpg_df[, c("displ", "class")]))

# Bin Data
breaks <- 1
cuts <- seq(0.5, 8, breaks)
mpg_df$bin <- .bincode(mpg_df$displ, cuts)

# Count the data
mpg_df <- ddply(mpg_df, .(mpg_df$class, mpg_df$bin), nrow)
names(mpg_df) <- c("class", "bin", "Freq")

您可以使用此新表来设置条件标签,因此,仅当观察到的观察值超过一定数量时,才对框进行标记:
ggplot(mpg_df, aes(x = bin, y = Freq,  fill = class)) +
geom_bar(stat = "identity", colour = "black", width = 1) +
geom_text(aes(label=ifelse(Freq >= 4, as.character(class), "")),
position=position_stack(vjust=0.5), colour="black")

enter image description here

我认为复制标签没有多大意义,但显示每个组的频率可能更有用:
ggplot(mpg_df, aes(x = bin, y = Freq,  fill = class)) +
geom_bar(stat = "identity", colour = "black", width = 1) +
geom_text(aes(label=ifelse(Freq >= 4, Freq, "")),
position=position_stack(vjust=0.5), colour="black")

enter image description here

更新资料

我意识到您实际上可以使用内部ggplot函数 ..count..选择性地过滤标签。无需预先格式化数据!
ggplot(mpg, aes(x = displ, fill = class, label = class)) +
geom_histogram(binwidth = 1,col="black") +
stat_bin(binwidth=1, geom="text", position=position_stack(vjust=0.5), aes(label=ifelse(..count..>4, ..count.., "")))

这篇文章对于解释ggplot中的特殊变量很有用: Special variables in ggplot (..count.., ..density.., etc.)

第二种方法仅在您想用计数标记数据集时才有效。如果要通过类或其他参数标记数据集,则必须使用第一种方法预先构建数据框。

关于r - 如何在ggplot中标记堆叠的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418943/

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