R 基于刻面图中的数据计算轴记号位置
我有一个问题,我想用R 基于刻面图中的数据计算轴记号位置,r,ggplot2,facet-grid,R,Ggplot2,Facet Grid,我有一个问题,我想用facet\u grid()计算大型绘图中y轴标签的位置。让我向您展示我使用mpg数据集的意思 require(tidyverse) ggplot(mpg, aes(x = displ)) + geom_point(aes(y = hwy)) + facet_grid(drv ~ class, scales = "free") 您将注意到,两个轴都使用不同数量的标签。忽略x轴的问题,我只想在y轴上标记三个值:0、最大值的一半和最大值。这在我的
facet\u grid()
计算大型绘图中y轴标签的位置。让我向您展示我使用mpg
数据集的意思
require(tidyverse)
ggplot(mpg, aes(x = displ)) +
geom_point(aes(y = hwy)) +
facet_grid(drv ~ class, scales = "free")
您将注意到,两个轴都使用不同数量的标签。忽略x轴的问题,我只想在y轴上标记三个值:0、最大值的一半和最大值。这在我的用例中是有意义的,所以下面是我尝试过的
ggplot(mpg, aes(x = displ)) +
geom_point(aes(y = hwy)) +
facet_grid(drv ~ class, scales = "free") +
geom_blank(aes(y = 0)) + # extends y-axis to 0
scale_y_continuous(expand = expansion(mult = c(0, 0.1)), # prevents ggplot2 from extending beyond y = 0
n.breaks = 3) # Three axis labels, please.
绘图从y=0开始,并正确标记。但是,剩余的标签分配不好,出于某种原因,标签是n=2
和n=4
而不是n=3
如果我能直接计算标签的位置就好了
ggplot(mpg, aes(x = displ)) +
geom_point(aes(y = hwy)) +
facet_grid(drv ~ class, scales = "free") +
geom_blank(aes(y = 0)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1)),
n.breaks = 3,
breaks = c(0, 0.5*max(hwy), 1*max(hwy))) # Maybe these formulas works?
我相信通过这种方式提供断点应该是可行的,但我的语法不好。如何访问和使用绘图基础数据?或者,如果这不起作用,我可以为每行面板手动指定y轴标签吗
我真的需要一些帮助。你可以删除
免费的秤。
:你得到你想要的吗
require(tidyverse)
ggplot(mpg, aes(x = displ)) +
geom_point(aes(y = hwy)) +
facet_grid(drv ~ class)
您可以移除免费的
秤:那么您能得到您想要的吗
require(tidyverse)
ggplot(mpg, aes(x = displ)) +
geom_point(aes(y = hwy)) +
facet_grid(drv ~ class)
如果需要自定义中断规则,最简单的方法是在给定(面板)限制的情况下使用函数实现这些规则
下面是标记0、最大值和半最大值的示例
库(ggplot2)
ggplot(mpg,aes(x=显示))+
几何点(aes(y=hwy))+
平面网格(drv~class,scales=“free”)+
连续缩放(扩展=扩展(mult=c(0,0.1)),
limits=c(0,NA),#如果需要自定义中断规则,最简单的方法是使用函数实现给定(面板)限制的规则
下面是标记0、最大值和半最大值的示例
库(ggplot2)
ggplot(mpg,aes(x=显示))+
几何点(aes(y=hwy))+
平面网格(drv~class,scales=“free”)+
连续缩放(扩展=扩展(mult=c(0,0.1)),
limits=c(0,NA),#很好的解决方案teunbrand。问题是第一行的最大值与第二行的最小值重叠。您看到克服这种重叠的解决方案了吗?您可以使用主题(panel.spating.y=unit(10,“pt”))将面板进一步分开
。这是一个很好的建议,但它似乎对x轴最大值有效,而不是对数据最大值有效。我通过将值调整为1.1的展开形式来解决它:breaks=function(x){c(x[1]/1.1,mean(x)/1.1,x[2]/1.1})
。这会将标签正确定位在最大值的一半和最大值,并与expansion()结合使用还可以避免与下一个面板重叠。很好的解决方案是teunbrand。问题是第一行的最大值与第二行的最小值重叠。您看到克服这种重叠的解决方案了吗?您可以使用主题(panel.spating.y=单位(10,“pt”))将面板进一步分开
。这是一个很好的建议,但它似乎在x轴最大值上工作,而不是在数据最大值上。我通过将值调整为1.1的展开形式来解决它:breaks=function(x){c(x[1]/1.1,mean(x)/1.1,x[2]/1.1)}
。这会将标签正确定位在最大值的一半和最大值,这与expansion()结合使用还可以避免与下一个面板重叠。