当使用geom_text和geom_label时,我们难以控制文字的大小。文字大小的单位是毫米,不随像素数变化,因此被保存图表上的文字效果可能不同于在R中绘制出来的图表。另外,文字本身有宽和高,但是ggplot并不会为容纳文字而扩展坐标系,这时常导致文字显示不完整。在这种情况下,我们可以用ggfittext包中的geom_fit_text函数划定固定的文字区域,并确保文字刚好填满该区域。
我们用于示范的数据集auction house.csv,记录了2017至2018年当代艺术领域交易额排在前列的拍卖机构的名称。这些名称长短不一,因此我们希望在添加Y轴标签时让文字自动缩放。(图5-2-1)
# install.packages("ggfittex")
library(ggfittext)
library(ggplot2)
dat=read.csv("auction house.csv", row.names=1) # 课件中的文件
N=nrow(dat)
dat=dat[order(dat$Turnover), ] # 为方便作图,调整一下各行排列顺序
max_value=max(dat$Turnover) # 最大值
width=max_value/2 # 把文字左边缘到条形的距离,设为代表最大值的条形的1/2
height=1 # 文字高度
xmin=-width; xmax=-width/20
ymin=(1: N)-height/2; ymax=(1: N)+height/2
# 绘制线段,用geom_fit_text添加Y轴标签和图表标题
p=ggplot()+
geom_segment(aes(x=0, xend=dat$Turnover, y=1: N, yend=1: N), color="orchid1", size=2, lineend="round")+
geom_fit_text(aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, label=dat$House), min.size=0.1, grow=TRUE, reflow=FALSE, place="right", padding.x=unit(0.5, "mm"), padding.y=unit(0.5, "mm"), color="grey95")+
geom_fit_text(aes(xmin=max_value/3, xmax=Inf, ymin=0.5, ymax=N/2, label="Top 20\nof\n Auction Houses\nby\n Contemporary Art\n Turnover\n(million $)\n2017/18"), grow=TRUE, fontface=2, place="right", color="grey95")
# 添加其他元素
xpos=pretty(dat$Turnover) # 手动生成X轴标签
xlab=xpos/1000000
turnover_lab=paste(" ", round(dat$Turnover/1000000, 2), sep="") #将数值作为文字添加上去(www.xing528.com)
p+geom_text(aes(x=dat$Turnover, y=1: N, label=turnover_lab), fontface=3, hjust="left", color="darkorange1")+
scale_x_continuous(breaks=xpos, labels=xlab, limits=c(NA, max_value*1.1))+
scale_y_continuous(limits=c(0.5, NA))+
theme(panel.background=element_blank(),
plot.background=element_rect(fill="grey15", color=NA),
panel.grid.major.y=element_blank(), panel.grid.minor. y=element_blank(), panel.grid.minor.x=element_blank(),
panel.grid.major.x=element_line(color="grey80", linetype=3),
axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
axis.title=element_blank(), axis.text.x=element_text(size= 12, color="grey95"), axis.ticks.x=element_blank()
)
图5-2-1 用geom_fit_text添加Y轴标签
geom_fit_text的重要参数有:
●xmin、xmax、ymin、ymax:文字框。设定文字位置的第一种方式是用这四个参数设定文字框的四个边界。
●x、y、width、height:文字框的中心、宽和高。设定文字位置的第二种方式是用x和y给出中心点以及文字框的宽和高,此时width和height代表坐标系中的数值。指定位置的第三种方法是用x和y给出中心点,并用unit函数设定width和height,这种方法不能保证靠近图表边缘的文字能够显示完整。
●label:待添加的文字。
●minsize:文字尺寸的最小值(默认值为4)。如果文字尺寸比这个数值小,那么文字将不被显示。当你发现文字未正常显示时,请调低这个阈值。
●grow:是否允许自动调整文字尺寸以便充满整个文字框。默认值为FALSE,但事实上我们总是要把它修改为TRUE。
●reflow:是否允许自动换行(默认值为FALSE)。注意:自动换行只对单词间有空格的英文有效,对中文无效。我们亦可通过在文字中添加"\n"来换行。
●padding.x、padding.y:文字与文字框之间的空间。默认值为unit(1, "mm"),需用unit函数修改。
●place:对齐方式。默认值为"centre"(等同于"center"或"middle"),可修改为"topleft"、"top"、"topright"、"right"、"bottomright"、"bottom"、"bottomleft"、"left"。
●color、alpha、lineheight、family、fontface:相当于geom_text中的参数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。