如何在ggplot中按指定顺序绘制值向量?

Posted

技术标签:

【中文标题】如何在ggplot中按指定顺序绘制值向量?【英文标题】:How do I plot a vector of values in the specified order in ggplot? 【发布时间】:2019-09-06 10:35:50 【问题描述】:

我有一个值向量(列表示),它们都属于某个问题。我正在尝试在 y 轴上绘制值,在 x 轴上绘制问题名称。我的数据框如下所示:

> colMeansDf
    colMeans Question
Q2  3.468240       Q2
Q3  3.677858       Q3
Q4  3.147913       Q4
Q5  3.072595       Q5
Q6  2.382940       Q6
Q7  2.556261       Q7
Q8  2.852087       Q8
Q9  2.663339       Q9
Q10 2.816697      Q10
Q11 4.735027      Q11
Q12 3.820327      Q12
Q13 3.000000      Q13
Q14 3.114338      Q14
Q15 2.806715      Q15
Q16 2.238657      Q16
Q17 3.228675      Q17
Q18 2.023593      Q18
Q19 3.986388      Q19
Q20 2.913793      Q20
Q21 2.611615      Q21
Q22 2.446461      Q22

现在,当我尝试使用 ggplot 可视化此数据时,ggplot 似乎出于某种原因更改了数据框的顺序,而不是从 Q2 开始并在 Q22 结束,我得到一个 x 轴从 Q10 到 Q19、Q2、Q20、Q21、Q22、Q23 以及从 Q3 到 Q9。

到目前为止我的代码是这样的:

ggplot(colMeansDf, aes(x = Questions, y = colMeans)) +
    geom_point(alpha = .6) +
    labs(x = "Question", y = "Average Reponse") +
    geom_hline(yintercept = mean(colMeansDf$colMeans), color = "red") +
    scale_y_continuous(limits = c(1, 7), breaks = 1:7)

先谢谢了!

【问题讨论】:

【参考方案1】:

嗨,它正在将问题名称排序为字符串。您可以添加一个索引(仅包含问题编号)并使用此索引以数字方式重新排列问题名称。

colMeansDf <- colMeansDf %>% 
  mutate(index = as.numeric(substr(Questions,2,nchar(as.character(Questions)))),
         Questions = factor(Questions, levels=((colMeansDf %>% arrange(index))$Questions)))

ggplot(colMeansDf, aes(x = Questions, y = colMeans)) +
  geom_point(alpha = .6) +
  labs(x = "Question", y = "Average Reponse") +
  geom_hline(yintercept = mean(colMeansDf$colMeans), color = "red") +
  scale_y_continuous(limits = c(1, 7), breaks = 1:7)

【讨论】:

以上是关于如何在ggplot中按指定顺序绘制值向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中按递增顺序绘制球体网格?

使用 ggplot 在折线图中仅绘制 x 轴上的日期向量的值

使用 ggsubplot 指定绘图顺序

R:如何在 ggplot2 中绘制 svm 的超平面和边距?

ggplot如何在绘制栅格时设置不存在的整数的填充值[复制]

如何在 ggplot2 直方图中指定 x 轴?