如何可视化数字属性括号内布尔属性为 TRUE 的比例?
How to visualise the proportion of a boolean attribute being TRUE under brackets of a numeric attribute?
在数据框中说,X是数字属性,Y是布尔属性。
我如何可视化这两个属性之间的关系,通过根据它的值将X分成k(比如10)个括号,并绘制条形图来显示Y在X的不同取值范围下的比例是多少,所以剧情是这样的?
% of Y
^
1 |
0.8 | ---
0.6 | | |
0.4 | --- | |
0.2 | --- | | | |
0 +-|-|---|-|---|-|---> X
1-10 11-20 21-30
另外,我只是不知道is/is这种可视化问题有什么具体的术语,但它一定是一种常用的可视化技术。我也没有想到,也没有找到更简洁的方式来表达上述需求。有人也可以帮我找到更好的方法来描述这个问题吗?
如果您有一个具有固定分箱(如出生国家/地区)的变量,您可以使用条形图。酒吧之间应该有空间。如果您有一个变量可以在一个范围内取许多可能的值,例如年龄,您需要一个直方图。直方图将 bin 紧挨着放置,以提供视觉线索,表明 bin 可以使用不同的范围来完成。
如果您刚刚开始学习统计和可视化,请查看 https://www.openintro.org/。他们为高中生和大学生提供了极好的材料(具有扎实的 R 和 SAS 指南)。
这个问题的不寻常之处在于,与典型的直方图不同,y 轴表示第二个二元变量值之一的比例。本质上,它是部分双向 table.
的百分比的图形表示
例如,我们可以使用 table 计算 V 型和直列发动机(vs
变量)的频率,如问题评论中所述。
mtcars$mpg_group <- cut(mtcars$mpg, c(10, 20, 30, 40))
table(mtcars$vs,mtcars$mpg_group)
> table(mtcars$vs,mtcars$mpg_group)
(10,20] (20,30] (30,40]
0 15 3 0
1 3 7 4
为了将其转换为条形图,我们需要操纵数据来计算比例。有三种不同的比例计算方法,包括:
- 作为输入数据中观测值总数的一部分,
- V 型发动机汽车总数的一小部分,或
- 占 MPG 范围内汽车总数的一小部分。
首先我们将计算 V 引擎的比例,其中分母是数据框中的所有汽车。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
df$proportion <- df$count / sum(df$count)
plot_df <- df[as.numeric(df$vs)==1,]
此时,plot_df
包含上面打印的 table 中对应于 V 引擎的行。我们现在可以使用 barplot()
打印图表,其中 y 轴表示具有 V 形引擎的 mpg_group
的比例。
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: Cars with V Engines by MPG range")
...以及输出:
要打印一个条形图,其中百分比的分母是配备 V 型发动机的汽车总数,我们调整代码如下。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
plot_df <- df[as.numeric(df$vs)==1,]
plot_df$proportion <- plot_df$count / sum(plot_df$count)
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: Cars with V Engines by MPG range")
...以及输出:
最后,根据 MPG 范围内的汽车数量计算比例有点复杂,但可以结合使用 aggregate()
和 `merge()。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
totals <- aggregate(count ~ mpg_group,data = df,FUN="sum")
names(totals)[2] <- "total"
plot_df <- merge(df,totals)
plot_df <- plot_df[as.numeric(df$vs)==1,]
plot_df$proportion <- plot_df$count / plot_df$total
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: V Engine cars within MPG range")
...以及输出:
解读情节
第一个图表可以解释如下:46% 的汽车的 MPG 在 10 到 20 之间,并且采用 V 型发动机。
第二张图表可以解释为:在18辆V型发动机的汽车中,83%的汽车MPG在10到20之间。
第三张图表可以解读为:MPG在10到20之间的18辆汽车中,83%的车是V型发动机。
在数据框中说,X是数字属性,Y是布尔属性。 我如何可视化这两个属性之间的关系,通过根据它的值将X分成k(比如10)个括号,并绘制条形图来显示Y在X的不同取值范围下的比例是多少,所以剧情是这样的?
% of Y
^
1 |
0.8 | ---
0.6 | | |
0.4 | --- | |
0.2 | --- | | | |
0 +-|-|---|-|---|-|---> X
1-10 11-20 21-30
另外,我只是不知道is/is这种可视化问题有什么具体的术语,但它一定是一种常用的可视化技术。我也没有想到,也没有找到更简洁的方式来表达上述需求。有人也可以帮我找到更好的方法来描述这个问题吗?
如果您有一个具有固定分箱(如出生国家/地区)的变量,您可以使用条形图。酒吧之间应该有空间。如果您有一个变量可以在一个范围内取许多可能的值,例如年龄,您需要一个直方图。直方图将 bin 紧挨着放置,以提供视觉线索,表明 bin 可以使用不同的范围来完成。
如果您刚刚开始学习统计和可视化,请查看 https://www.openintro.org/。他们为高中生和大学生提供了极好的材料(具有扎实的 R 和 SAS 指南)。
这个问题的不寻常之处在于,与典型的直方图不同,y 轴表示第二个二元变量值之一的比例。本质上,它是部分双向 table.
的百分比的图形表示例如,我们可以使用 table 计算 V 型和直列发动机(vs
变量)的频率,如问题评论中所述。
mtcars$mpg_group <- cut(mtcars$mpg, c(10, 20, 30, 40))
table(mtcars$vs,mtcars$mpg_group)
> table(mtcars$vs,mtcars$mpg_group)
(10,20] (20,30] (30,40]
0 15 3 0
1 3 7 4
为了将其转换为条形图,我们需要操纵数据来计算比例。有三种不同的比例计算方法,包括:
- 作为输入数据中观测值总数的一部分,
- V 型发动机汽车总数的一小部分,或
- 占 MPG 范围内汽车总数的一小部分。
首先我们将计算 V 引擎的比例,其中分母是数据框中的所有汽车。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
df$proportion <- df$count / sum(df$count)
plot_df <- df[as.numeric(df$vs)==1,]
此时,plot_df
包含上面打印的 table 中对应于 V 引擎的行。我们现在可以使用 barplot()
打印图表,其中 y 轴表示具有 V 形引擎的 mpg_group
的比例。
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: Cars with V Engines by MPG range")
...以及输出:
要打印一个条形图,其中百分比的分母是配备 V 型发动机的汽车总数,我们调整代码如下。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
plot_df <- df[as.numeric(df$vs)==1,]
plot_df$proportion <- plot_df$count / sum(plot_df$count)
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: Cars with V Engines by MPG range")
...以及输出:
最后,根据 MPG 范围内的汽车数量计算比例有点复杂,但可以结合使用 aggregate()
和 `merge()。
df <- as.data.frame(table(mtcars$vs,mtcars$mpg_group))
names(df) <- c("vs","mpg_group","count") # V engines
totals <- aggregate(count ~ mpg_group,data = df,FUN="sum")
names(totals)[2] <- "total"
plot_df <- merge(df,totals)
plot_df <- plot_df[as.numeric(df$vs)==1,]
plot_df$proportion <- plot_df$count / plot_df$total
barplot(proportion ~ mpg_group,data = plot_df,ylim=c(0,1),
main="mtcars: V Engine cars within MPG range")
...以及输出:
解读情节
第一个图表可以解释如下:46% 的汽车的 MPG 在 10 到 20 之间,并且采用 V 型发动机。
第二张图表可以解释为:在18辆V型发动机的汽车中,83%的汽车MPG在10到20之间。
第三张图表可以解读为:MPG在10到20之间的18辆汽车中,83%的车是V型发动机。