我试图在刻面的ggplot中标记每个x轴的最大值和最小值 . 我有几个具有不同x刻度和相同y刻度的刻面,x轴刻度标签相互重叠 . 我不是必须手动确定每个方面x轴的限制和中断,而是寻找一种方法来标记每个方面的最小值和最大值 .
使用 CO2
数据集的示例数据的代码(请参阅 ?CO2
):
CO2$num <- 1:nrow(CO2)
library(reshape2)
CO2.melt <- melt(CO2,
id.var=c("Type",
"Plant",
"Treatment",
"num"))
CO2.melt <- CO2.melt[order(CO2.melt$num),]
library(ggplot2)
ggplot(CO2.melt,
aes(x = value,
y = num)) +
geom_path(aes(color = Treatment)) +
facet_wrap( ~ variable, scales = "free_x",nrow=1)
目的是复制井日志显示,例如this one .
2 回答
当你想为tick标签实现这个时,在分面图中使用
scales = "free_x"
会使这很难自动化 . 但是,通过一些修补和其他几个包的帮助,您还可以使用以下方法:1) 汇总数据以便了解在x轴上需要哪些标签/符号:
这使:
2) 为每个方面创建休息时间:
3) 创建构面:
4) 将图例解压缩到单独的对象中:
5) 创建最终图:
这导致:
自动执行此操作的可能替代解决方案是使用
geom_text
或geom_label
. 举例说明如何实现这一目标:这使:
您还可以在
ggplot
内动态获取最小值和最大值(信用额度为@eipi10) . 另一个使用geom_label
的例子:这使:
Edit 正在更新到ggplot2 ver 3.0.0
此方法修改ggplot构建数据中的标签(即
ggplot_build(plot)
) . 我已经删除了x轴扩展,以便最大值和最小值落在面板边界上 .