首页 理论教育 自动调整文字大小-基于ggplot的政经可视化

自动调整文字大小-基于ggplot的政经可视化

时间:2023-11-19 理论教育 版权反馈
【摘要】:当使用geom_text和geom_label时,我们难以控制文字的大小。设定文字位置的第二种方式是用x和y给出中心点以及文字框的宽和高,此时width和height代表坐标系中的数值。指定位置的第三种方法是用x和y给出中心点,并用unit函数设定width和height,这种方法不能保证靠近图表边缘的文字能够显示完整。

自动调整文字大小-基于ggplot的政经可视化

当使用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中的参数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈