通常在图中,Y轴值标签会在绘制的最大值以下被切掉。
For example:
library(tidyverse)
mtcars %>% ggplot(aes(x=mpg, y = hp))+geom_point()
我知道scale_y_continous-但我不知道执行此操作的明智方法。也许我只是在想什么。我不想弄乱自动生成的“智能”中断。
我可能会尝试手动进行操作...
mtcars %>% ggplot(aes(x=mpg, y=hp, color=as.factor(carb)))+geom_point() + scale_y_continuous(limits = c(0,375))
但是,由于“智能中断”,因此无法像我上面提到的那样工作。无论如何,我是否需要将默认的中断间隔延长至1,因此在这种情况下将是400?当然,我希望它对于我正在使用的任何数据集都具有灵活性。
答案 0 :(得分:4)
您可以使用expand_limits()
来增加最大y轴值。您还可以确保将最大y轴值四舍五入到数据范围内的下一个最大值,例如,下一个最高的十个值,下一个最高的数百个值等,具体取决于是否为数据在数十,数百之内。
例如,下面的函数查找最大y值的以10为底的对数,并将其四舍五入。这为我们提供了最大y值的十进制刻度(例如,数十,数百,数千等)。然后将最大y轴值四舍五入到最接近最大十个值的十,一百等。
expandy = function(vec, ymin=NULL) {
max.val = max(vec, na.rm=TRUE)
min.log = floor(log10(max.val))
expand_limits(y=c(ymin, ceiling(max.val/10^min.log)*10^min.log))
}
p = mtcars %>% ggplot(aes(x=mpg, y = hp)) +
geom_point()
p + expandy(mtcars$hp)
p + expandy(mtcars$hp, 0)
或者,为使操作更简单,您可以设置函数,以便直接从绘图中收集y范围数据:
library(gridExtra)
expandy = function(plot, ymin=0) {
max.y = max(layer_data(plot)$y, na.rm=TRUE)
min.log = floor(log10(max.y))
expand_limits(y=c(ymin, ceiling(max.y/10^min.log)*10^min.log))
}
p = mtcars %>% ggplot(aes(x=mpg, y = hp)) +
geom_point()
grid.arrange(p, p + expandy(p), ncol=2)
p = iris %>% ggplot(aes(x=Sepal.Width, y=Petal.Width)) +
geom_point()
grid.arrange(p, p + expandy(p), ncol=2)
答案 1 :(得分:0)
选择断开y轴的步骤,您可以使用ceiling()
函数
library(gridExtra)
p1 <- mtcars %>% ggplot(aes(x=mpg, y = hp)) + geom_point()
p2 <- p1 +
scale_y_continuous(
limits = c(0, ceiling(max(mtcars$hp)/50)*50),
breaks = seq(0, ceiling(max(mtcars$hp)/50)*50, 50)
)
p3 <- p1 + scale_y_continuous(
limits = c(0, ceiling(max(mtcars$hp)/100)*100),
breaks = seq(0, ceiling(max(mtcars$hp)/100)*100, 100)
)
grid.arrange(p1, p2, p3, ncol=3)
对于p2,Ste是50,而对于p3,步是100
答案 2 :(得分:0)
以下是允许使用任何数字刻度的解决方案:
@model BSS_IT_Education.Models.FormationFormViewModel
@{
ViewBag.Title = "Formation";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Save", "Formations"))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.FormationDTO.Id)
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.FormationDTO.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-4">
@Html.EditorFor(model => model.FormationDTO.Name, new { htmlAttributes = new { @class = "form-control", @placeholder = "Entrez le nom de la formation..." } })
@Html.ValidationMessageFor(model => model.FormationDTO.Name, "", new { @class = "text-danger" })
</div>
</div>
// BUNCH OF OTHERS FORM-GROUPS
<div class="form-group">
<div class="col-md-offset-2 col-md-8">
<button type="submit" class="btn btn-success">@((Model.FormationDTO.Id == 0) ? "Sauvegarder " : "Modifier")</button>
</div>
</div>
</div>
}