【问题标题】:Reorder axis values to ascending values with ggplot2?使用ggplot2将轴值重新排序为升序值?
【发布时间】:2011-11-15 03:53:31
【问题描述】:

我正在尝试在 R 中生成一个简单的 ggplot2 抖动图。对于 x 值,我有 1 到 100 之间的整数。当我绘制此数据时,我的 x 轴从值 1 开始,然后转到 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, etc. 如何我可以重新排列我的 x 轴以创建升序值(例如 1、2、3、4、5 等)吗?

这是我的代码:

data = read.csv('my_data_file', sep"\t")
x_values = data[,1]
y_values = data[,2]  
qplot(rank, score, geom="jitter")  

编辑:我应该指出我也有一些 non-integer x 值。理想情况下,我希望 x 轴按数字上升,然后将 non-integer 值附加到 x 轴的末尾。 non-integer 值的任何顺序都可以。

【问题讨论】:

标签: r ggplot2


【解决方案1】:

正如@gsk3 所说,您必须转换为数字,但正如this 回答指出的那样,存在一些困难,您应该使用:

x_values <- as.numeric(levels(x_values))[x_values]

【讨论】:

  • 谢谢,这几乎成功了。我应该在我原来的问题中提到我也有两个“非整数”x 值。当我尝试此解决方案时,我收到一条警告消息:NAs introduced by coercion。解决此问题的最佳方法是什么?
  • 您需要事先摆脱这些。假设您想为它们分配一个数字 x 值,您可以像这样使用 car::recode:x_values &lt;- recode(x_values,recodes="'non-integer x1'='10';'non-integer x2'='11'")(尽管我不确定这是最有效的方法)
  • @ROLO 感谢您指出错误。我不应该在出门的时候回答问题! :-)
  • @gsk3 不客气(我很惊讶不得不使用您已经回复过自己的答案来纠正您,但这解释了它;)。
【解决方案2】:

您的 x 变量在 CSV 文件中有引号(Excel 对此很臭名昭著),这意味着 R 将其作为一个因素读入,默认情况下它按字母顺序排列级别。修复级别,您将修复排序。或者更好的是,因为x 似乎很自然地想要成为一个整数,所以修正你的数据类型:

x_values <- as.integer(as.character(x_values))

尝试str(data) 查看列的数据类型。如果您的数据很大,则可以使用更有效的方法进行转换。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多