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#控制台实现post网站登录
如题,首先我写了一个web页面来实现post登陆,只做演示,代码如下 public void ProcessRequest(HttpContext context) { context.Respons ...
- Android -- 从源码带你从EventBus2.0飚到EventBus3.0(一)
1,最近看了不少的面试题,不管是百度.网易.阿里的面试题,都会问到EventBus源码和RxJava源码,而自己只是在项目中使用过,却没有去用心的了解它底层是怎么实现的,所以今天就和大家一起来学习学习 ...
- kindeditor扩展粘贴图片功能&修改图片上传路径并通过webapi上传图片到图片服务器
前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...
- 《Python自然语言处理》第一章-练习17
问题描述: 使用text9.index()查找词sunset的索引值.你需要将这个词作为一个参数插入到圆括号之间.通过尝试和出错的过程中,找到完整的句子中包含这个词的切片. 解题思路: 用两个集合,一 ...
- superslide2插件
地址:http://www.superslide2.com/ 做自适应要注意该宽度和高度 等比缩放
- Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)
一.先摆需求: 1.中文搜索.英文搜索.中英混搜 如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜 如 ...
- 【转载】 stm32之PWM
发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...
- 【小瑕疵】表单中的button会自动提交?
在表单中使用button标签的时候会发现,即使什么类型都没有设置,但是在点击的时候会发现,表单会自动提交 比如: 我在一个表单的button中添加一个函数,当点击这个按钮时会增加一行内容: 但是当我实 ...
- SELECT中的多表连接
MySQL多表连接查询 连接(join):将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程. 根据连接查询返回的结果,分3类: 内连接(inner join) 外连接( ...
- [编织消息框架][传输协议]stcp简单开发
测试代码 public class ServerSTCP { static int SERVER_PORT = 3456; static int US_STREAM = 0; static int F ...