Creating beautiful charts in chinese with ggplot2
Before we start
My chinese skills are poor and biased. I did learn during my internship and I continue to study while I can translate "last year our exports were 19,000 USD million" but I don't know all the colors.
I will use this dataset and for the example and you can use any chinese font you want. In this example I'm using Adobe Heiti.
Initial setup
These are the necessary libraries and I did read directly from the xlsx file before defining levels, labels and colors.
library(XLConnect)
library(ggplot2)
library(RColorBrewer)
library(scales)
library(plyr)
library(forcats) file <- paste0(getwd(),"/ggplot2_chinese/trade_data_chile_china.xlsx") data <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A3:K13", header = TRUE)
data2 <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A17:F27", header = TRUE)
data3 <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A30:C35", header = TRUE)
data4 <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A39:E59", header = TRUE)
data5 <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A62:G72", header = TRUE)
data6 <- readWorksheetFromFile(file, sheet = "Sheet1", region = "A75:C125", header = TRUE) data <- as.data.frame(data)
data2 <- as.data.frame(data2)
data3 <- as.data.frame(data3)
data3$country <- factor(data3$country, levels = c("china","usa","eu","japan","korea"), labels = c("中国","美国","欧盟","日本","朝鲜"))
data4 <- as.data.frame(data4)
data4$product <- factor(data4$product, levels = c("copper","others"), labels = c("铜","木浆, 水果, 鱒屬和等产品"))
data4 <- ddply(data4, .(year), transform, pos = cumsum(percentage) - (0.5 * percentage))
data4 <- ddply(data4, .(year), transform, pos2 = cumsum(exports) - (0.5 * exports))
data5 <- as.data.frame(data5)
data6 <- as.data.frame(data6)
data6$product <- factor(data6$product, levels=c("fruits", "processedfoods", "bottledwine", "salmon", "forestryandfurniture"), labels=c("水果", "再制", "瓶装酒", "鱒屬", "林业和木家具")) brewer.pal(8, "Paired")
[1] "#A6CEE3" "#1F78B4" "#B2DF8A" "#33A02C" "#FB9A99" "#E31A1C" "#FDBF6F"
[8] "#FF7F00"
cbPalette <- c("#1F78B4", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#556b2f", "#D55E00", "#CC79A7")
cbPalette2 <- c("#4169e1", "#d68a59","#556b2f", "#FB9A99", "#33A02C")
cbPalette3 <- c("#F0E442", "#56B4E9")
The charts
Here are different charts that I did create during my internship. These charts are actually "updated" as we still don't have 2016 official trade reports.
I will show how to use the new subtitles functionality in ggplot2 v2.2.0.
g1 <- ggplot() +
geom_bar(aes(y = percentage, x = country, fill = country), data = data3, stat="identity") +
scale_fill_manual(values=cbPalette2) +
geom_text(data=data3, aes(x = country, y = (percentage + 2), label = paste0(percentage,"%")), colour="black", family="AdobeHeitiStd-Regular", size = 5) +
scale_y_continuous(breaks=seq(0,40,5), labels = dollar_format(suffix = "%", prefix = "")) + expand_limits(y=c(0,25)) +
labs(x="",y="百分数") +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
theme(legend.position="none", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("2015年领先的出口市场",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"),
text=element_text(size=18, family="AdobeHeitiStd-Regular"),
axis.text.x=element_text(colour="black"))
g1

g2 <- ggplot() +
geom_bar(aes(y = pcentexports, x = year, fill = "pcentexports"), data = data5, stat="identity") +
scale_fill_manual(values="#4169e1") +
geom_text(data=data5, aes(x = year, y = pcentexports +2, label = paste0(pcentexports,"%")), colour="black", family="AdobeHeitiStd-Regular", size = 5) +
scale_x_continuous(breaks=seq(2006,2015,1)) + scale_y_continuous(breaks=seq(0,25,5), labels = dollar_format(suffix = "%", prefix = "")) +
expand_limits(y=c(0,25)) + labs(x="年",y="百分数") +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
theme(legend.position="none", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("出口中国的产品的结构",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular"))
g2

g3 <- ggplot() +
geom_bar(aes(y = pcentimports, x = year, fill = "pcentimports"), data = data5, stat="identity") +
scale_fill_manual(values="#000080") +
geom_text(data=data5, aes(x = year, y = pcentimports +2, label = paste0(pcentimports,"%")), colour="black", family="AdobeHeitiStd-Regular", size = 5) +
scale_x_continuous(breaks=seq(2006,2015,1)) +
scale_y_continuous(breaks=seq(0,25,5), labels = dollar_format(suffix = "%", prefix = "")) +
expand_limits(y=c(0,25)) + labs(x="年",y="百分数") +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
theme(legend.position="none", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("进口中国的产品的结构",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular"))
g3

g4 <- ggplot() +
geom_bar(aes(y = percentage, x = year, fill = fct_rev(product)), data = data4, stat="identity") +
scale_fill_manual(values=cbPalette3) + geom_text(data=data4, aes(x = year, y = pos, label = paste0(percentage,"%")), colour="black", family="AdobeHeitiStd-Regular", size = 4) +
scale_x_continuous(breaks=seq(2006,2015,1)) +
scale_y_continuous(labels = dollar_format(suffix = "%", prefix = "")) +
labs(x="年", y="百分数") + theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("出口中国结构 (%)",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular"))
g4

g5 <- ggplot() +
geom_bar(aes(y = exports, x = year, fill = fct_rev(product)), data = data4, stat="identity") +
scale_fill_manual(values=cbPalette3) + geom_text(data=data4, aes(x = year, y = pos2, label = exports), colour="black", family="AdobeHeitiStd-Regular", size = 4) +
scale_x_continuous(breaks=seq(2006,2015,1)) +
labs(x="年", y="百万美元") +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("出口中国结构 ($)",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular"))
g5

g6 <- ggplot() +
geom_area(aes(y = exports, x = year, fill = fct_rev(product)), data = data6, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(0,1600,400)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_fill_brewer(palette="Paired") +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("无铜矿或造纸木材出口中国",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular"))
g6

g7 <- ggplot() +
geom_line(aes(y = exportscc, x = year, colour = "exportscc"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = importscc, x = year, colour = "importscc"), size=1.5, data = data, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(0,20000,5000)) +
expand_limits(y=c(5000,20000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("出口的产品", "进口产品"), values = c("#4169e1", "#000080")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("商业智利-中国",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) + guides(col = guide_legend(nrow = 2))
g7

g8 <- ggplot() +
geom_line(aes(y = exportscusa, x = year, colour = "exportscusa"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = importscusa, x = year, colour = "importscusa"), size=1.5, data = data, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(0,20000,5000)) +
expand_limits(y=c(5000,20000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("出口的产品", "进口产品"), values = c("#a0522d", "#E18942")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("商业智利-美国",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 2))
g8

g9 <- ggplot() +
geom_line(aes(y = exportsceu, x = year, colour = "exportsceu"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = importsceu, x = year, colour = "importsceu"), size=1.5, data = data, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(0,20000,5000)) +
expand_limits(y=c(5000,20000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("出口的产品", "进口产品"), values = c("#556b2f", "#2f556b")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("商业智利-欧盟",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 2))
g9

g10 <- ggplot() +
geom_line(aes(y = bccc, x = year, colour = "bccc"), size=1.5, data = data2, stat="identity") +
geom_line(aes(y = bccw, x = year, colour = "bccw"), size=1.5, data = data2, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("淨出口中国的产品", "淨出口人间的产品"), values = c("#4169e1", "#FF43A4")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("淨出口中国和人间",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) + guides(col = guide_legend(nrow = 2))
g10

g11 <- ggplot() +
geom_line(aes(y = bccusa, x = year, colour = "bccusa"), size=1.5, data = data2, stat="identity") +
geom_line(aes(y = bccw, x = year, colour = "bccw"), size=1.5, data = data2, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) + scale_y_continuous(breaks=seq(-10000,25000,5000)) +
expand_limits(y=c(-10000,25000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("淨出口美国的产品", "淨出口人间的产品"), values = c("#d68a59", "#FF43A4")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("淨出口美国和人间",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) + guides(col = guide_legend(nrow = 2))
g11

g12 <- ggplot() +
geom_line(aes(y = bcceu, x = year, colour = "bcceu"), size=1.5, data = data2, stat="identity") +
geom_line(aes(y = bccw, x = year, colour = "bccw"), size=1.5, data = data2, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("淨出口人间的产品", "淨出口欧盟的产品"), values = c("#FF43A4", "#556b2f"), guide = guide_legend(reverse=TRUE)) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("淨出口欧盟和人间",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 2))
g12

g13 <- ggplot() +
geom_line(aes(y = exportscc, x = year, colour = "exportscc"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = exportscusa, x = year, colour = "exportscusa"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = exportsceu, x = year, colour = "exportsceu"), size=1.5, data = data, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) + scale_y_continuous(breaks=seq(0,20000,5000)) + expand_limits(y=c(5000,20000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("中国(第一贸易合作伙伴)出口智利的产品", "美国(第二贸易合作伙伴)出口智利的产品", "欧盟(第三贸易合作伙伴)出口智利的产品"), values = c("#4169e1", "#d68a59","#556b2f")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("出口中国,美国和欧盟的产品",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 3))
g13

g14 <- ggplot() +
geom_line(aes(y = importscc, x = year, colour = "importscc"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = importscusa, x = year, colour = "importscusa"), size=1.5, data = data, stat="identity") +
geom_line(aes(y = importsceu, x = year, colour = "importsceu"), size=1.5, data = data, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(4000,20000,4000)) +
expand_limits(y=c(4000,20000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("中国(第一贸易合作伙伴)进口智利的产品", "美国(第二贸易合作伙伴)进口智利的产品", "欧盟(第三贸易合作伙伴)进口智利的产品"), values = c("#4169e1", "#d68a59","#556b2f")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("从中国,美国和欧盟进口产品",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 3))
g14

g15 <- ggplot() +
geom_line(aes(y = bccc, x = year, colour = "bccc"), size=1.5, data = data2, stat="identity") +
geom_line(aes(y = bccusa, x = year, colour = "bccusa"), size=1.5, data = data2, stat="identity") +
geom_line(aes(y = bcceu, x = year, colour = "bcceu"), size=1.5, data = data2, stat="identity") +
xlab("年") + ylab("百万美元") +
scale_x_continuous(breaks=seq(2000,2015,3)) +
scale_y_continuous(breaks=seq(-10000,15000,5000)) +
expand_limits(y=c(-10000,15000)) +
theme(panel.background = element_rect(fill="white"), panel.grid = element_line(colour="white")) +
scale_color_manual(labels = c("中国(第一贸易合作伙伴)淨出口智利的产品", "美国(第二贸易合作伙伴)淨出口智利的产品", "欧盟(第三贸易合作伙伴)淨出口智利的产品"), values = c("#4169e1", "#d68a59","#556b2f")) +
theme(legend.position="bottom", legend.direction="horizontal", legend.title = element_blank(), axis.line.x = element_line(size=1.0), axis.line.y = element_line(size=1.0)) +
ggtitle("淨出口中国,美国和欧盟进口产品",
subtitle = "消息灵通人士: 智利海关总署, 智利中央银行 & 商務處智利中國") +
theme(plot.title=element_text(size=20, family="AdobeHeitiStd-Regular"), text=element_text(size=18, family="AdobeHeitiStd-Regular")) +
guides(col = guide_legend(nrow = 3))
g15

转自: http://pacha.hk/ggplot2_chinese.html
Creating beautiful charts in chinese with ggplot2的更多相关文章
- R绘图 第九篇:绘制散点图和气泡图(ggplot2)
绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制.散点图潜在的最大问题是过度绘图:当一 ...
- Python框架、库以及软件资源汇总
转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...
- Awesome Python
Awesome Python A curated list of awesome Python frameworks, libraries, software and resources. Insp ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
- Python开源框架、库、软件和资源大集合
A curated list of awesome Python frameworks, libraries, software and resources. Inspired by awesome- ...
- 【python】Python框架、库和软件资源大全
很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世界各地的程序员们都能够贡献他们的代码与创新. Python就是这样一门受到全世界各地开源社区支持的语言. ...
- Python 库汇总英文版
Awesome Python A curated list of awesome Python frameworks, libraries, software and resources. Insp ...
- Python框架、库和软件资源大全(整理篇)
有少量修改,请访问原始链接.PythonWIn的exe安装包;http://www.lfd.uci.edu/~gohlke/pythonlibs/ 原文链接:codecloud.net/python- ...
- wesome-android
awesome-android Introduction android libs from github System requirements Android Notice If the lib ...
随机推荐
- 彻底搞定C语言指针(精华版)
1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 ...
- 将 JSP 中数组传递给 js
<% String[] name = { "w ", "a ", "n ", "g"}; % ...
- 在IntelliJ IDEA中添加repository模板
可以用于快速新建一个repository类,减少开发时间 在IntelliJ IDEA settings设置中(ctrl+alt+s)--Editor--File and Code Templates ...
- java 客户端发起http请求
package com.mall.core.utils.http; import org.apache.commons.lang.StringUtils; import org.apache.http ...
- 跟着刚哥梳理java知识点——HelloWorld和常见问题(一)
1.按照国际惯例,写一段输出HelloWorld的java语句: public class HelloWorld { //这是main方法,程序的主入口 public static void main ...
- 拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient)
作者:桂. 时间:2017-04-13 07:43:03 链接:http://www.cnblogs.com/xingshansi/p/6702188.html 声明:欢迎被转载,不过记得注明出处哦 ...
- myeclipse2015复制项目需要修改的地方
项目下 D:\Workspaces\MyEclipse 2015\angular001\.settings 的org.eclipse.wst.common.component文件,修改里面未原来的 ...
- Native App和Web App 的差异
开发者们都知道在高端智能手机系统中有两种应用程序:一种是基于本地(操作系统)运行的APP:一种是基于高端机的浏览器运行的WebApp,本文将主要讲解后者. WebApp与Native App有何区别呢 ...
- FrameBuffer系列 之 简单编程
一.Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.这种操作是抽象的 ...
- poj2594最小顶点覆盖+传递闭包
传递闭包最开始是在Floyd-Warshall算法里面出现的,当时这算法用的很少就被我忽视了.. 传递闭包是指如果i能到达k,并且k能到达j,那么i就能到达j Have you ever read a ...