2

我不知道如何将 x 轴的标签更改为 scale_x_reordered() 函数?代码 scale_x_reordered(breaks=surcharge$arret, labels=surcharge$arret_fr) 不起作用并出现错误消息。

reorder_within <- function(x, by, within, fun = mean, sep = "___", ...) {
  new_x <- paste(x, within, sep = sep)
  stats::reorder(new_x, by, FUN = fun)
}

scale_x_reordered <- function(..., sep = "___") {
  reg <- paste0(sep, ".+$")
  ggplot2::scale_x_discrete(labels = function(x) gsub(reg, "", x), ...)
}

ggplot(data=surcharge, aes(x=reorder_within(arret, sqcearr, dir), y=value)) +
geom_point() +
geom_line() +  
facet_wrap(~dir, scales = "free_x", ncol=1) +
scale_x_reordered(breaks=surcharge$arret, labels=surcharge$arret_fr)

离散尺度错误(c(“x”,“xmin”,“xmax”,“xend”),“position_d”,:由多个实际参数匹配的形式参数“标签”

谢谢您的帮助 !

4

1 回答 1

0

如果我正确阅读了您的代码,则调用scale_x_discrete

错误消息告诉您您labels在该行中定义了两次参数

ggplot2::scale_x_discrete(labels = function(x) gsub(reg, "", x), ...)

breaks由于您将 a和labels参数都传递给...of scale_x_reordered,因此该行变为

ggplot2::scale_x_discrete(labels = function(x) gsub(reg, "", x), 
  breaks=surcharge$arret, labels=surcharge$arret_fr)

所以你定义labels了两次。

我将完全摆脱该scale_x_reordered功能,并在您定义 ggplot 对象的标签上执行您想要的操作。

ggplot(data=surcharge, aes(x=reorder_within(arret, sqcearr, dir), y=value ) +
geom_point() +
geom_line() +  
facet_wrap(~dir, scales = "free_x", ncol=1) +
scale_x_discrete(labels = function(x) gsub("___.+$", "", surcharge$arret_fr), 
  breaks=surcharge$arret)

您也可以更改此行

scale_x_reordered(breaks=surcharge$arret, labels=surcharge$arret_fr)

scale_x_reordered(x=surcharge$arret_fr,breaks=surcharge$arret)

这条线

scale_x_reordered <- function(..., sep = "___") {

对此

scale_x_reordered <- function(x, sep = "___" , ...) {
于 2019-09-13T17:33:07.587 回答