我的数据类型是字符串,所以我想知道如何为此目的使用Google动态图表或Google散点图之一?我希望我的y轴显示其中一个水果和x轴以显示时间戳。我收到了这个错误:
> motion
dd.rosbagTimestamp dd.data
1 1438293900729698553 strawberry
2 1438293901681590725 avocado
3 1438293904496769068 avocado
4 1438293943211221553 blueberry
5 1438293963216807017 kiwi
> gvisScatterChart(motion)
Error in gvis(type = type, checked.data, options = options, chartid = chartid, :
Only the following data types are allowed: number
However, dd.rosbagTimestamp, dd.data is of type string, string
答案 0 :(得分:2)
在进入解决方案之前,我想指出一些事情:
gvisScatterChart
或gvisMotionChart
,但两者都不适合此数据集IMO。我选择了后两者;我不确定是否可以用前者表示您的数据。无论如何,您应该记住, 您提供的数据至少对于您所呈现的 至关重要。 googleVis
提供了一些有时非常有用的简洁工具,但我个人认为界面有点过于严格(可能是由于Google Charts API,而不一定是软件包开发人员的错误)。在这种情况下,gvisMotionChart
似乎不允许你绘制比每日观察更少原子的东西,所以我不得不将1秒间隙转换为1天间隙。 无论如何,鉴于上述问题,这里有一种可能的方法:
library(data.table)
library(googleVis)
##
mdt <- data.table(motion)
gdt <- mdt[
,.(frequency = .N),
keyby = "tstamp,fruit"]
gdt[
,time_value := as.numeric(
tstamp - min(gdt$tstamp))]
gdt[
,scaled_date := min(
as.Date(gdt$tstamp)) + time_value]
##
plot_data <- data.frame(
idvar = gdt$fruit,
timevar = gdt$scaled_date,
frequency = gdt$frequency,
fruit = gdt$fruit)
##
gmc <- gvisMotionChart(
data = plot_data,
idvar = "idvar",
timevar = "timevar",
yvar = "frequency",
colorvar = "fruit",
date.format = "%Y-%m-%d")
##
R> plot(gmc)
原始数据,从您链接中的CSV文件中读取:
Df <- read.csv(
file = "~/tmp/gazedata.csv.txt",
sep = ",", header = TRUE,
colClasses = "character",
stringsAsFactors = FALSE
)
##
motion <- data.frame(
tstamp = as.POSIXct(
as.numeric(substr(Df[,1], 1, 10)),
tz = "UTC",
origin = "1970-01-01 00:00:00"),
fruit = Df$data
)