我怎样才能强制 'scatter.smooth' 用字符串而不是数字来标记 x 轴,按照我的意思排序?

How can I force 'scatter.smooth' to label the x-axis with strings rather than numbers, ordered the way I mean it?

我正在试验 Rscatter.plot 并编写了以下脚本:

d <- data.frame(
  weekday = rep(c('So', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'), 5),
  value   = nchar(c(
 '##'                 , # So
 '########'           , # Mo
 '#############'      , # Tu
 '######'             , # We
 '############'       , # Th
 '###############'    , # Fr
 '###'                , # Sa
# ---
 '####'               , # So
 '####'               , # Mo
 '########'           , # Tu
 '#####'              , # We
 '###########'        , # Th
 '#########'          , # Fr
 '#####'              , # Sa
# ---
 '####'               , # So
 '######'             , # Mo
 '############'       , # Tu
 '####'               , # We
 '#############'      , # Th
 '##########'         , # Fr
 '###'                , # Sa
# ---
 '#'                  , # So
 '####'               , # Mo
 '##############'     , # Tu
 '####'               , # We
 '############'       , # Th
 '##############'     , # Fr
 '#######'            , # Sa
# ---
 '###'                , # So
 '######'             , # Mo
 '###########'        , # Tu
 '######'             , # We
 '#############'      , # Th
 '###########'        , # Fr
 '####'                 # Sa
 ))
)

scatter.smooth(d$value ~ d$weekday, col=gray(0.7), bty='n')

这会产生以下情节:

我有两个问题:x 轴标有数字而不是 SoMoSa 并且数字似乎是按照字母顺序排列的它们代表的工作日的值(所以 1 是 Fr,7 是 We)。

如何让绘图按工作日的顺序显示工作日标签(SoSa)?

首先,您需要重新排序 weekday 的因子水平(您正确地注意到默认为字母顺序):

d$weekday = factor(d$weekday, levels= c('So', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'))

然后你会想要使用工作日数据的 levels 来替换 x 轴的数字:

scatter.smooth(d$value ~ d$weekday, col=gray(0.7), bty='n', xaxt="n")
axis(1, at=1:7, labels = levels(d$weekday))

添加 xaxt="n" 首先表示不使用 x 轴的默认数字方案,然后 axis 函数放置自定义标签。