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')
问题是:dataLong
的 value
列属于 class character
。因此,第三个图的y标度不是数字标度而是字符串标度,并按词法顺序排序('a' < 'b'
)。
> class(dataLong$value)
[1] "character"
从数字到字符的转换来自melt
函数。并非所有变量都是数字;其中一些是因素。所以结果是性格。
谢谢@RichardTelford!
使用下面的代码,我生成了 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')
问题是:dataLong
的 value
列属于 class character
。因此,第三个图的y标度不是数字标度而是字符串标度,并按词法顺序排序('a' < 'b'
)。
> class(dataLong$value)
[1] "character"
从数字到字符的转换来自melt
函数。并非所有变量都是数字;其中一些是因素。所以结果是性格。
谢谢@RichardTelford!