gpt4 book ai didi

r - 如何使用 ggplot2 制作帕累托图(又名排序图)

转载 作者:行者123 更新时间:2023-12-04 21:12:53 29 4
gpt4 key购买 nike

我发现“使用开源工具进行数据分析”一书中的排序图(也称为帕累托图)非常有用。所以我试着用ggplot2绘制书中的例子。

书中给出了下图,注意坐标是翻转的,使国家名称显示在Y轴上,这样更易​​读。虚线是数据的 CDF(累积分布函数)。

Rank order chart
(来源:使用开源工具进行数据分析)

制作部分模拟数据:

country = c('US', 'Brazil', 'Japan', 'India', 'Germany', 'UK', 'Russia', 'France')

sales = c(40, 14, 7, 6, 2.8, 2, 1.8, 1)

# The data is already sorted
df = data.table(country=country, sales=sales)

然后我用了 stat_ecdf在 ggplot2 中绘制 CDF:
ggplot(data=df) + stat_ecdf(aes(x=sales))

但是这个图看起来像:

enter image description here

X 轴显示销售额但不显示国家/地区。

我找到了另一个实现 here .但它是通过折线图和显式累积和来实现的,这看起来与书中的示例大不相同。

有没有办法将帕累托图绘制为第一个图?

编辑

我弄错了虚线的含义。它不是CDF,而是累积比例。

在将值映射到其百分位等级的 CDF 中,百分位等级为 US是 100。但在排序图表中, percentageUS约为 45%,说明在美国的销售额占总销售额的 45%。

因此,我不应该使用 stat_ecdf绘制排名顺序图。

最佳答案

有一些很好的讨论 here关于为什么用两个不同的 y 轴绘图是一个坏主意。我将限制分别绘制销售额和累计百分比,并将它们并排显示,以提供帕累托图的完整视觉表示。

# Sales
df <- data.frame(country, sales)
df <- df[order(df$sales, decreasing=TRUE),]
df$country <- factor(df$country, levels=as.character(df$country)) # Order countries by sales, not alphabetically
library(ggplot2)
ggplot(df, aes(x=country, y=sales, group=1)) + geom_path()

enter image description here
# Cumulative percentage
df.pct <- df
df.pct$pct <- 100*cumsum(df$sales)/sum(df$sales)
ggplot(df.pct, aes(x=country, y=pct, group=1)) + geom_path() + ylim(0, 100)

enter image description here

关于r - 如何使用 ggplot2 制作帕累托图(又名排序图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813775/

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