在 R / ggplot2 中可视化相对频率
Visualizing relative frequency in R / ggplot2
我试图围绕如何以一种易于查看它们相互比较情况的方式可视化一堆相对频率的问题。就分布而言,差异并不大,当然,我也认为这是值得展示的东西。我设法创建了一个相对简单的点图,但是,我认为它看起来不够好。
代码很简单(尽管就视觉调整而言尚未完成),我猜:
library(ggplot2)
copuladeletion <- read.table(text = "Type Distribution Family
NP 0.39344 Austronesian
NP 0.30232 Mon-Khmer
NP 0.3125 Tai-Kadai
NP 0.29230 Sinitic
NP 0.26785 Other
AdjP 0.44262 Austronesian
AdjP 0.53488 Mon-Khmer
AdjP 0.625 Tai-Kadai
AdjP 0.55384 Sinitic
AdjP 0.58928 Other
AdvP 0.03278 Austronesian
AdvP 0.00000 Mon-Khmer
AdvP 0.00000 Tai-Kadai
AdvP 0.04615 Sinitic
AdvP 0.07142 Other
EX 0.01639 Austronesian
EX 0.02325 Mon-Khmer
EX 0.00000 Tai-Kadai
EX 0.03076 Sinitic
EX 0.01785 Other
Clause 0.08196 Austronesian
Clause 0.02325 Mon-Khmer
Clause 0.0625 Tai-Kadai
Clause 0.03076 Sinitic
Clause 0.05357 Other
Other 0.01639 Austronesian
Other 0.11627 Mon-Khmer
Other 0.00000 Tai-Kadai
Other 0.04615 Sinitic
Other 0.00000 Other", header = TRUE)
ggplot(copuladeletion) + geom_point(aes(Distribution, Type, colour=Family,size=1))
生成下图:
那么,我的问题是:
您认为这个可视化效果好吗?
对于这些数据,是否有比简单点图更好的选择?
非常感谢您!
据我了解,您正在绘制每个家庭中的相对频率,因此除了您的绘图之外,我们还可以使用 100% 堆叠直方图来可视化每个 Family
中 Type
的比例。
ggplot(copuladeletion, aes(x = Family, y = Distribution, fill = Type)) +
geom_bar(stat = "identity", position= "fill") +
scale_y_continuous("Proportion") +
scale_x_discrete("", expand = c(0, 0)) +
coord_flip()
也许只是对你的带状图表的另一种看法:
library(ggplot2)
copuladeletion <- read.table(text=txt, header=TRUE)
gg <- ggplot(copuladeletion)
gg <- gg + geom_point(aes(Distribution, Type, colour=Family),
shape="|", size=10)
gg <- gg + scale_x_continuous(breaks=seq(0, 0.7, 0.1))
gg <- gg + scale_y_discrete(expand=c(0,0))
gg <- gg + scale_colour_brewer(name="", palette="Set1")
gg <- gg + facet_wrap(~Type, ncol=1, scales="free_y")
gg <- gg + guides(colour=guide_legend(override.aes=list(shape=15, size=3)))
gg <- gg + labs(x=NULL, y=NULL, title="Family Distribution by Type")
gg <- gg + theme_bw()
gg <- gg + theme(panel.grid.major=element_blank())
gg <- gg + theme(panel.grid.minor=element_blank())
gg <- gg + theme(strip.background=element_blank())
gg <- gg + theme(strip.text=element_blank())
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(legend.key=element_blank())
gg <- gg + theme(legend.position="bottom")
gg
为了稍微补偿重叠(正如 Roman 指出的 cpl 次),您可以使用适当的线而不是 hack-y 点:
gg <- ggplot(copuladeletion)
gg <- gg + geom_segment(aes(x=Distribution, xend=Distribution,
y=0, yend=1, colour=Family), size=0.25)
gg <- gg + scale_x_continuous(breaks=seq(0, 0.7, 0.1))
gg <- gg + scale_y_discrete(expand=c(0,0))
gg <- gg + scale_colour_brewer(name="", palette="Set1")
gg <- gg + facet_wrap(~Type, ncol=1, scales="free_y", switch="y")
gg <- gg + labs(x=NULL, y=NULL, title="Family Distribution by Type")
gg <- gg + guides(colour=guide_legend(override.aes=list(shape=15, size=3)))
gg <- gg + theme_bw()
gg <- gg + theme(panel.border=element_rect(color="#2b2b2b", size=0.15))
gg <- gg + theme(panel.grid.major=element_blank())
gg <- gg + theme(panel.grid.minor=element_blank())
gg <- gg + theme(strip.background=element_blank())
gg <- gg + theme(strip.text.y=element_text(angle=180))
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(legend.key=element_blank())
gg <- gg + theme(legend.position="bottom")
gg
您也可以为地图 linetype
添加美感(以及 hjust
您喜欢的 y 标签)。这些细线有点难以阅读(所以也可以随意调整 size
),但我确实认为带状图非常适合这些数据。你可能想 "zoom out" EX
在一个单独的图中剥离 如果 你需要(我不知道这个数据到底想说什么 :-)
我试图围绕如何以一种易于查看它们相互比较情况的方式可视化一堆相对频率的问题。就分布而言,差异并不大,当然,我也认为这是值得展示的东西。我设法创建了一个相对简单的点图,但是,我认为它看起来不够好。
代码很简单(尽管就视觉调整而言尚未完成),我猜:
library(ggplot2)
copuladeletion <- read.table(text = "Type Distribution Family
NP 0.39344 Austronesian
NP 0.30232 Mon-Khmer
NP 0.3125 Tai-Kadai
NP 0.29230 Sinitic
NP 0.26785 Other
AdjP 0.44262 Austronesian
AdjP 0.53488 Mon-Khmer
AdjP 0.625 Tai-Kadai
AdjP 0.55384 Sinitic
AdjP 0.58928 Other
AdvP 0.03278 Austronesian
AdvP 0.00000 Mon-Khmer
AdvP 0.00000 Tai-Kadai
AdvP 0.04615 Sinitic
AdvP 0.07142 Other
EX 0.01639 Austronesian
EX 0.02325 Mon-Khmer
EX 0.00000 Tai-Kadai
EX 0.03076 Sinitic
EX 0.01785 Other
Clause 0.08196 Austronesian
Clause 0.02325 Mon-Khmer
Clause 0.0625 Tai-Kadai
Clause 0.03076 Sinitic
Clause 0.05357 Other
Other 0.01639 Austronesian
Other 0.11627 Mon-Khmer
Other 0.00000 Tai-Kadai
Other 0.04615 Sinitic
Other 0.00000 Other", header = TRUE)
ggplot(copuladeletion) + geom_point(aes(Distribution, Type, colour=Family,size=1))
生成下图:
那么,我的问题是:
您认为这个可视化效果好吗? 对于这些数据,是否有比简单点图更好的选择?
非常感谢您!
据我了解,您正在绘制每个家庭中的相对频率,因此除了您的绘图之外,我们还可以使用 100% 堆叠直方图来可视化每个 Family
中 Type
的比例。
ggplot(copuladeletion, aes(x = Family, y = Distribution, fill = Type)) +
geom_bar(stat = "identity", position= "fill") +
scale_y_continuous("Proportion") +
scale_x_discrete("", expand = c(0, 0)) +
coord_flip()
也许只是对你的带状图表的另一种看法:
library(ggplot2)
copuladeletion <- read.table(text=txt, header=TRUE)
gg <- ggplot(copuladeletion)
gg <- gg + geom_point(aes(Distribution, Type, colour=Family),
shape="|", size=10)
gg <- gg + scale_x_continuous(breaks=seq(0, 0.7, 0.1))
gg <- gg + scale_y_discrete(expand=c(0,0))
gg <- gg + scale_colour_brewer(name="", palette="Set1")
gg <- gg + facet_wrap(~Type, ncol=1, scales="free_y")
gg <- gg + guides(colour=guide_legend(override.aes=list(shape=15, size=3)))
gg <- gg + labs(x=NULL, y=NULL, title="Family Distribution by Type")
gg <- gg + theme_bw()
gg <- gg + theme(panel.grid.major=element_blank())
gg <- gg + theme(panel.grid.minor=element_blank())
gg <- gg + theme(strip.background=element_blank())
gg <- gg + theme(strip.text=element_blank())
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(legend.key=element_blank())
gg <- gg + theme(legend.position="bottom")
gg
为了稍微补偿重叠(正如 Roman 指出的 cpl 次),您可以使用适当的线而不是 hack-y 点:
gg <- ggplot(copuladeletion)
gg <- gg + geom_segment(aes(x=Distribution, xend=Distribution,
y=0, yend=1, colour=Family), size=0.25)
gg <- gg + scale_x_continuous(breaks=seq(0, 0.7, 0.1))
gg <- gg + scale_y_discrete(expand=c(0,0))
gg <- gg + scale_colour_brewer(name="", palette="Set1")
gg <- gg + facet_wrap(~Type, ncol=1, scales="free_y", switch="y")
gg <- gg + labs(x=NULL, y=NULL, title="Family Distribution by Type")
gg <- gg + guides(colour=guide_legend(override.aes=list(shape=15, size=3)))
gg <- gg + theme_bw()
gg <- gg + theme(panel.border=element_rect(color="#2b2b2b", size=0.15))
gg <- gg + theme(panel.grid.major=element_blank())
gg <- gg + theme(panel.grid.minor=element_blank())
gg <- gg + theme(strip.background=element_blank())
gg <- gg + theme(strip.text.y=element_text(angle=180))
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(legend.key=element_blank())
gg <- gg + theme(legend.position="bottom")
gg
您也可以为地图 linetype
添加美感(以及 hjust
您喜欢的 y 标签)。这些细线有点难以阅读(所以也可以随意调整 size
),但我确实认为带状图非常适合这些数据。你可能想 "zoom out" EX
在一个单独的图中剥离 如果 你需要(我不知道这个数据到底想说什么 :-)