ggplot 从过滤后的长格式数据中绘制出一团糟

ggplot plots a mess from filtered long-form data

使用下面的代码,我生成了 CO2 数据系列的三个图。两个情节看起来不错,最后一个看起来很奇怪。我不明白 ggplot 是如何想出这个情节的。有什么想法吗?

data = read.csv('data4.csv', header = TRUE, comment.char = '#')
data = mutate(data,
    time = as.character(time),
    date = as.character(date),
    timec = chron(times = time))

dataLong = melt(data, id.vars = c('date', 'time', 'timec'))
dataLong = filter(dataLong, variable == 'co2')

ggplot(data,     aes(x = timec, y = co2))   + geom_point() + scale_x_chron(format = '%H:%M:%S')
plot(dataLong$timec, dataLong$value)
ggplot(dataLong, aes(x = timec, y = value)) + geom_point() + scale_x_chron(format = '%H:%M:%S')

问题是:dataLongvalue 列属于 class character。因此,第三个图的y标度不是数字标度而是字符串标度,并按词法顺序排序('a' < 'b')。

> class(dataLong$value)
[1] "character"

从数字到字符的转换来自melt函数。并非所有变量都是数字;其中一些是因素。所以结果是性格。

谢谢@RichardTelford!