开头的一些解释事实: 我通过以下方式在SPSS中构建了数据。 我有20个变量(case_number,a_1,b_1,c_1,a_2,b_2,c_2,....) 变量以这种方式命名,因为我采用不同的设备(名为a,b和c)重复测量(在不同的时间点,这里命名为1和2)。所有设备都应该测量相同的。
我想做什么现在为所有设备创建散点图和所有时间点,例如我想在x轴上设备a,在y轴上设备b和c然后绘制 (a_1,b_1) (a_1,c_1) (a_2,b_2) (a_2,c_2) 等等。
我希望使用y轴上的设备b 的所有点具有相同的颜色(例如绿色),p 使用设备c < / strong>应该有另一种颜色(例如红色)。 我不想在不同的时间点使用不同的颜色,因此(a_1,b_1)和(a_2,b_2)都应该是绿色。
答案 0 :(得分:1)
如果您使用长格式而不是宽格式数据,则您的特定示例更容易构建。以下是一个例子。
*Make some fake data.
SET SEED 10.
INPUT PROGRAM.
LOOP ID = 1 TO 50.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
DATASET NAME Sim.
VECTOR a_(3).
VECTOR b_(3).
VECTOR c_(3).
DO REPEAT v = a_1 TO c_3.
COMPUTE v = RV.NORMAL(0,1).
END REPEAT.
EXECUTE.
*Reshape from wide to long.
VARSTOCASES
/MAKE a FROM a_1 TO a_3
/MAKE b FROM b_1 TO b_3
/MAKE c FROM c_1 TO c_3
/INDEX Time.
FORMATS a b c Time (F2.0).
*Now make scatterplot.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=a b c
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: a=col(source(s), name("a"))
DATA: b=col(source(s), name("b"))
DATA: c=col(source(s), name("c"))
GUIDE: axis(dim(1), label("a"))
GUIDE: axis(dim(2), label("b and c"))
ELEMENT: point(position(a*b), color.interior(color.green))
ELEMENT: point(position(a*c), color.interior(color.red))
END GPL.
这产生了我认为你要求的情节:
在长格式中,您还有其他几个简单的选项,例如为每个时间段构建小的倍数或为每个时间段使用不同的符号。
*Small multiple graphs.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: a=col(source(s), name("a"))
DATA: b=col(source(s), name("b"))
DATA: c=col(source(s), name("c"))
DATA: Time=col(source(s), name("Time"), unit.category())
COORD: rect(dim(1,2))
GUIDE: axis(dim(1), label("a"))
GUIDE: axis(dim(2), label("b and c"))
GUIDE: axis(dim(3), opposite())
ELEMENT: point(position(a*b*Time), color.interior(color.green))
ELEMENT: point(position(a*c*Time), color.interior(color.red))
END GPL.
*Different shapes for different time periods.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time ID
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: a=col(source(s), name("a"))
DATA: b=col(source(s), name("b"))
DATA: c=col(source(s), name("c"))
DATA: Time=col(source(s), name("Time"), unit.category())
DATA: ID=col(source(s), name("ID"), unit.category())
COORD: rect(dim(1,2))
GUIDE: axis(dim(1), label("a"))
GUIDE: axis(dim(2), label("b and c"))
GUIDE: axis(dim(3), opposite())
ELEMENT: point(position(a*b), color.interior(color.green), shape(Time))
ELEMENT: point(position(a*c), color.interior(color.red), shape(Time))
END GPL.
另一种选择是绘制每个人的痕迹。在此示例中,由于数据非常混乱,因此不适合,但大多数时间序列数据将显示更平滑的趋势。对于此示例数据,下面是前5个观测值在其自身的小倍数中的小数倍示例。 (有关这些图表和漂亮示例的一些讨论,请参阅here。)
*Path traces.
TEMPORARY.
SELECT IF ID <= 5.
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time ID
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: a=col(source(s), name("a"))
DATA: b=col(source(s), name("b"))
DATA: c=col(source(s), name("c"))
DATA: Time=col(source(s), name("Time"), unit.category())
DATA: ID=col(source(s), name("ID"), unit.category())
COORD: rect(dim(1,2), wrap())
GUIDE: axis(dim(1), label("a"))
GUIDE: axis(dim(2), label("b and c"))
GUIDE: axis(dim(3), opposite())
ELEMENT: point(position(a*b*ID), color.interior(color.green), shape(Time))
ELEMENT: point(position(a*c*ID), color.interior(color.red), shape(Time))
ELEMENT: path(position(a*b*ID))
ELEMENT: path(position(a*c*ID))
END GPL.
EXECUTE.
评论中用于生成图例的更新代码对我来说很好,但内联模板除外(可能与我的个人图表模板冲突)。如果要在图表中添加回归线,请参阅GPL reference guide中的smooth.linear
函数。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=a b c
/GRAPHSPEC SOURCE=INLINE INLINETEMPLATE=["<addFitline type='linear' target='pair'/>"].
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: a=col(source(s), name("a"))
DATA: b=col(source(s), name("b"))
DATA: c=col(source(s), name("c"))
GUIDE: axis(dim(1), label("a"))
GUIDE: axis(dim(2), label("b and c"))
SCALE: cat(aesthetic(aesthetic.color.interior), map(("b", color.green), ("c", color.blue)))
ELEMENT: point(position(a*b), color.interior("b"))
ELEMENT: point(position(a*c), color.interior("c"))
END GPL.