我尝试在一个多面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。
3条答案
按热度按时间b09cbbtk1#
当你想在tick-labels中实现这个功能时,在一个faceted plot中使用
scales = "free_x"
很难实现自动化。但是,通过一些修改和其他几个包的帮助,你也可以使用以下方法:**1)**总结数据,以便了解您需要在x轴上标记哪些标记/断点:
字符串
其给出:
型
**2)**为每个面创建断裂向量:
型
**3)**创建面:
型
**4)**将图例提取到一个单独的对象中:
型
**5)**创建最终图:
型
其结果是:
x1c 0d1x的数据
一个可能的替代解决方案来自动做到这一点,要么使用
geom_text
或geom_label
。一个例子来展示如何实现这一点:型
其给出:
的
您还可以在
ggplot
中动态获取最小值和最大值(感谢@eipi10)。另一个使用geom_label
的示例:其给出:
的
vof42yt12#
编辑更新到ggplot2 3.0.0版
这种方法修改了ggplot构建数据中的标签(即
ggplot_build(plot)
)。我已经删除了x轴扩展,以便最大值和最小值落在面板边界上。字符串
的数据
hfsqlsce3#
我想分享这个,因为我需要类似的东西。这里是一个更简单的方法来打印每个方面的最小值和最大值。我不确定,然而,如何改变最小/最大轴文本值的颜色。也许这不是所有应用程序都需要的。
字符串
x1c 0d1x的数据
创建日期:2023年10月31日,使用reprex v2.0.2