避免在ggplot中沿轴剪裁点
Posted
技术标签:
【中文标题】避免在ggplot中沿轴剪裁点【英文标题】:Avoid clipping of points along axis in ggplot 【发布时间】:2012-03-30 05:51:53 【问题描述】:我正在绘制一个时间序列,其中响应变量的平均值按月(x 轴)作为点(y 轴)。
位于 x 轴上的值(即 0 值)被剪裁。我可以更改 y 轴的限制以包含一些低于 0 的填充,但我不想这样做。
有没有办法在 x 轴的前面或顶部绘制这些 0 点?
【问题讨论】:
【参考方案1】:试试这个,
q <- qplot(1:10,1:10,size=I(10)) + scale_y_continuous(expand=c(0,0))
gt <- ggplot_gtable(ggplot_build(q))
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid.draw(gt)
【讨论】:
会做,然后再试一次。谢谢! 在以下代码中的Subbing会在分面时关闭剪辑:gt$layout$clip[grep("panel",gt$layout$name)] <- "off"
如何将gt
转回 ggplot/gg 对象?
我怀疑你能做到,这就像把烤蛋糕变成面粉和鸡蛋
当绘图包含轴时,此解决方案不起作用;尝试将 color = "red" 添加到美学 和 + theme_bw() 到代码的第一行。轴出现在红点的顶部。 (我还没有找到解决方案。)【参考方案2】:
随着ggplot2 3.0.0版本的发布,您可以简单地使用coord_cartesian(clip = 'off')
。
library(ggplot2)
qplot(x = 1:10, y = 1:10, size=I(10)) +
scale_y_continuous(expand=c(0,0)) +
coord_cartesian(clip = 'off') +
labs(title = "coord_cartesian(clip = 'off')")
如果您使用的是不太常用的coord_*
系统或函数之一(例如coord_polar
或coord_flip
),那么您也可以在那里使用clip = 'off'
参数。
my_plot +
coord_flip(clip = 'off')
【讨论】:
感谢您指出这一点!您的观点现已纳入答案。 当绘图包含轴时,此解决方案不起作用;尝试添加 color = "red" 到美学和 + theme_bw() 到代码的末尾。轴出现在红点的顶部。 (我还没有找到解决方案。) 这很好。我建议提出一个新问题来解决这个问题,因为这是一个单独的问题,而且是一个很好的问题。【参考方案3】:您可以在 scale_y 上使用属性 expand() y 比例每边 10% 的示例:
ggplot(mydata, aes(y = value, x = mydate)) +
geom_point() +
scale_y_continuous(expand = c(0.1,0.1))
【讨论】:
谢谢。这是通过扩展 y 轴的范围来实现的。它工作得很好,但我更喜欢上面 baptiste 建议的东西。即,x 轴从 0 开始,但 0 点绘制在它的顶部。不过,感谢您的帮助。 我认为应该是+ scale_y_continuous(expand = c(0.1,0.1))
。【参考方案4】:
如果您使用的是基本图形,您可以使用 clip()。
plot(1:4)
clip(-0.5, 4.1, -0.5, 4.1)
points(0.85, 1, col = 'red', cex = 2)
【讨论】:
我不知道如何在 ggplot 脚本中完成这项工作。我还尝试绘制图形,然后在顶部剪裁并添加一个点。但这也不起作用。谢谢。以上是关于避免在ggplot中沿轴剪裁点的主要内容,如果未能解决你的问题,请参考以下文章
获取 3D numpy 数组中沿轴的连续非 nans 值总和的最大值
R语言ggplot2可视化箱图配置抖动数据点(jitter points)避免数据点互相覆盖并使用线条(line)连接两个箱图中不同分组成对的数据点(jitter on Boxplots)
R语言ggplot2可视化箱图配置position_dodge参数避免数据点互相覆盖实现抖动数据点(jitter points)并使用线条(line)连接两个箱图中不同分组成对的数据点
R语言ggplot2可视化箱图配置position_dodge参数避免数据点互相覆盖实现抖动数据点并使用线条(line)连接两个箱图中不同分组成对的数据点自定义配置箱图和数据点的颜色