R语言lattice绘图中轴数值超出绘图区域的解决咨询
解决Lattice绘图中X轴标签超出区域的问题(不缩小字号)
以下几种方法可在保留字号的前提下,解决X轴100000标签超出绘图区域的问题:
方法1:调整绘图边距
通过增大右侧边距,给长标签留出足够显示空间,可在par.settings中修改plot.margin参数:
bwplot(dfmh2$Period~dfmh2$Intensity|dfmh2$microhabitat, par.settings = modifyList(my_settings, list(plot.margin = unit(c(1, 4, 1, 1), "lines"))), # 边距顺序为上、右、下、左,增大右侧边距 par.strip.text = list(cex =1.7), scales = list(x = list(font=1,cex=2),y = list(cex = 1.8)), ylab= list(label = "Period of Day", fontsize = 25), xlab= list(label = "Light intensity", fontsize = 25), main= list(label = "B) Light intenstiy (lux)", cex= 2))
方法2:修改X轴刻度标签格式
把长数值标签改成更紧凑的形式,比如换行、科学计数法:
示例1:标签换行
将100000拆分为两行显示,减少横向长度:
# 获取X轴原始刻度值 x_ticks <- pretty(dfmh2$Intensity) # 替换100000的标签为换行形式 x_labels <- ifelse(x_ticks == 100000, "100\n000", as.character(x_ticks)) bwplot(dfmh2$Period~dfmh2$Intensity|dfmh2$microhabitat, par.settings = my_settings, par.strip.text = list(cex =1.7), scales = list(x = list(font=1,cex=2, at = x_ticks, labels = x_labels)), ylab= list(label = "Period of Day", fontsize = 25), xlab= list(label = "Light intensity", fontsize = 25), main= list(label = "B) Light intenstiy (lux)", cex= 2))
示例2:科学计数法显示
将数值转为科学计数法,缩短标签长度:
bwplot(dfmh2$Period~dfmh2$Intensity|dfmh2$microhabitat, par.settings = my_settings, par.strip.text = list(cex =1.7), scales = list(x = list(font=1,cex=2, labels = function(x) format(x, scientific = TRUE))), ylab= list(label = "Period of Day", fontsize = 25), xlab= list(label = "Light intensity", fontsize = 25), main= list(label = "B) Light intenstiy (lux)", cex= 2))
方法3:扩大X轴范围
稍微增大X轴上限,让刻度标签不紧贴绘图区域边缘:
bwplot(dfmh2$Period~dfmh2$Intensity|dfmh2$microhabitat, par.settings = my_settings, par.strip.text = list(cex =1.7), scales = list(x = list(font=1,cex=2, limits = c(0, 110000))), # 将X轴上限从100000调整为110000 ylab= list(label = "Period of Day", fontsize = 25), xlab= list(label = "Light intensity", fontsize = 25), main= list(label = "B) Light intenstiy (lux)", cex= 2))
方法4:旋转X轴标签
将标签旋转一定角度(比如45度),缩短横向占用空间,同时调整底部边距避免标签被截断:
bwplot(dfmh2$Period~dfmh2$Intensity|dfmh2$microhabitat, par.settings = modifyList(my_settings, list(plot.margin = unit(c(1, 1, 3, 1), "lines"))), # 增大底部边距 par.strip.text = list(cex =1.7), scales = list(x = list(font=1,cex=2, rot = 45)), # 旋转标签45度 ylab= list(label = "Period of Day", fontsize = 25), xlab= list(label = "Light intensity", fontsize = 25), main= list(label = "B) Light intenstiy (lux)", cex= 2))
内容的提问来源于stack exchange,提问作者Laura Schefold
相关产品推荐
相关产品推荐

