数据可视化
一、基础图表制作
在 SPSS 中,制作基础图表是非常直观且易于操作的过程。以下是一些常见的基础图表类型及其在 SPSS 中的制作步骤和代码示例。涵盖条形图、折线图、饼图、直方图和散点图。
1. 条形图(Bar Chart)
条形图用于比较不同类别的数值大小。
* 条形图。
GRAPH
/BAR(SIMPLE)=COUNT BY gender
/TITLE='性别分布'.
2. 折线图(Line Chart)
折线图用于展示随时间变化的趋势。
* 折线图。
GRAPH
/LINE(SIMPLE)=VALUE BY year BY category
/TITLE='年度趋势'.
3. 饼图(Pie Chart)
饼图用于展示各部分占整体的比例。
* 饼图。
GRAPH
/PIE=COUNT BY category
/TITLE='类别分布'.
4. 直方图(Histogram)
直方图用于展示数据的分布情况。
* 直方图。
GRAPH
/HISTOGRAM=age
/TITLE='年龄分布'.
5. 散点图(Scatter Plot)
散点图用于展示两个连续变量之间的关系。
* 散点图。
GRAPH
/SCATTERPLOT(BIVAR)=height WITH weight
/TITLE='身高与体重的关系'.
详细示例
假设有一个数据集 survey_data.sav
,其中包含以下变量:
gender
:性别(男性、女性)year
:年份category
:类别age
:年龄height
:身高weight
:体重
1. 条形图
* 导入数据。
GET FILE='C:\path\to\your\file\survey_data.sav'.
* 条形图。
GRAPH
/BAR(SIMPLE)=COUNT BY gender
/TITLE='性别分布'.
2. 折线图
* 折线图。
GRAPH
/LINE(SIMPLE)=MEAN(age) BY year BY category
/TITLE='每年各类别平均年龄趋势'.
3. 饼图
* 饼图。
GRAPH
/PIE=COUNT BY category
/TITLE='类别分布'.
4. 直方图
* 直方图。
GRAPH
/HISTOGRAM=age
/TITLE='年龄分布'.
5. 散点图
* 散点图。
GRAPH
/SCATTERPLOT(BIVAR)=height WITH weight
/TITLE='身高与体重的关系'.
代码解释
GET FILE
:导入数据文件。GRAPH
:开始创建图表。/BAR(SIMPLE)=COUNT BY gender
:创建简单条形图,计数每个性别的频数。/LINE(SIMPLE)=MEAN(age) BY year BY category
:创建简单折线图,显示每年各类别的平均年龄。/PIE=COUNT BY category
:创建饼图,显示各类别的频数。/HISTOGRAM=age
:创建直方图,显示年龄的分布。/SCATTERPLOT(BIVAR)=height WITH weight
:创建散点图,显示身高与体重的关系。/TITLE='...'
:设置图表标题。
二、高级图表定制
在SPSS中,高级图表定制可以通过使用
GGRAPH
命令和图形生产语言(GPL, Graph Production Language)来实现。这允许用户创建更加复杂和美观的图表。
1. 自定义颜色
* 自定义颜色的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=gender COUNT()[name="COUNT"] MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: gender=col(source(s), name("gender"), unit.category())
DATA: COUNT=col(source(s), name("COUNT"))
GUIDE: axis(dim(1), label("性别"))
GUIDE: axis(dim(2), label("人数"))
SCALE: cat(dim(1), include("男", "女"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(gender*COUNT), color.interior(color.red), color.exterior(color.blue))
TITLE: "性别分布"
END GPL
2. 添加数据标签
* 添加数据标签的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=gender COUNT()[name="COUNT"] MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: gender=col(source(s), name("gender"), unit.category())
DATA: COUNT=col(source(s), name("COUNT"))
GUIDE: axis(dim(1), label("性别"))
GUIDE: axis(dim(2), label("人数"))
SCALE: cat(dim(1), include("男", "女"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(gender*COUNT), color.interior(color.red), color.exterior(color.blue))
ELEMENT: point(position(gender*COUNT), label(COUNT), color(color.black), size(size."12px"))
TITLE: "性别分布"
END GPL
3. 调整坐标轴
* 调整坐标轴的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=gender COUNT()[name="COUNT"] MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: gender=col(source(s), name("gender"), unit.category())
DATA: COUNT=col(source(s), name("COUNT"))
GUIDE: axis(dim(1), label("性别"))
GUIDE: axis(dim(2), label("人数"), start(0), end(100), delta(10))
SCALE: cat(dim(1), include("男", "女"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(gender*COUNT), color.interior(color.red), color.exterior(color.blue))
TITLE: "性别分布"
END GPL
4. 使用图表模板
* 使用模板的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=gender COUNT()[name="COUNT"] MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: gender=col(source(s), name("gender"), unit.category())
DATA: COUNT=col(source(s), name("COUNT"))
GUIDE: axis(dim(1), label("性别"))
GUIDE: axis(dim(2), label("人数"))
SCALE: cat(dim(1), include("男", "女"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(gender*COUNT), template("MyTemplate"))
TITLE: "性别分布"
END GPL
5. 多系列图表
* 多系列条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=gender category COUNT()[name="COUNT"] MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: gender=col(source(s), name("gender"), unit.category())
DATA: category=col(source(s), name("category"), unit.category())
DATA: COUNT=col(source(s), name("COUNT"))
GUIDE: axis(dim(1), label("性别"))
GUIDE: axis(dim(2), label("人数"))
SCALE: cat(dim(1), include("男", "女"))
SCALE: cat(dim(2), include("A", "B", "C"))
ELEMENT: interval(position(gender*COUNT*category), color.interior(category))
TITLE: "性别与类别的分布"
END GPL
6. 组合图表
* 条形图和折线图的组合。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=year sales profit MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: year=col(source(s), name("year"))
DATA: sales=col(source(s), name("sales"))
DATA: profit=col(source(s), name("profit"))
GUIDE: axis(dim(1), label("年份"))
GUIDE: axis(dim(2), label("金额"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(year*sales), color.interior(color.lightblue))
ELEMENT: line(position(smooth.linear(year*profit)), color(color.red), size(size."2px"))
TITLE: "年度销售与利润"
END GPL
代码解释
GGRAPH
和BEGIN GPL
开始定义一个图形。SOURCE: s=userSource(id("graphdataset"))
定义数据源。DATA: ...
定义使用的变量。GUIDE: axis(...)
定义坐标轴。SCALE: ...
定义坐标轴的尺度。ELEMENT: ...
定义图表中的元素,如条形、折线等。TITLE: ...
定义图表的标题。
具体例子
1. 准备数据
首先,确保数据已经正确导入 SPSS。假设有一个数据集 sales_data.sav
,包含以下变量:
year
:年份region
:地区sales
:销售额profit
:利润
2. 使用 GGRAPH
创建自定义图表
示例 1:自定义颜色的条形图
假设要创建一个条形图,显示不同地区的销售额,并自定义条形的颜色。
* 自定义颜色的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=region sales MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: region=col(source(s), name("region"), unit.category())
DATA: sales=col(source(s), name("sales"))
GUIDE: axis(dim(1), label("地区"))
GUIDE: axis(dim(2), label("销售额"))
SCALE: cat(dim(1), include("North", "South", "East", "West"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(region*sales), color.interior(color.red), color.exterior(color.blue))
TITLE: "不同地区的销售额"
END GPL
示例 2:添加数据标签的条形图
假设要在条形图上添加数据标签,显示具体的销售额。
* 添加数据标签的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=region sales MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: region=col(source(s), name("region"), unit.category())
DATA: sales=col(source(s), name("sales"))
GUIDE: axis(dim(1), label("地区"))
GUIDE: axis(dim(2), label("销售额"))
SCALE: cat(dim(1), include("North", "South", "East", "West"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(region*sales), color.interior(color.red), color.exterior(color.blue))
ELEMENT: point(position(region*sales), label(sales), color(color.black), size(size."12px"))
TITLE: "不同地区的销售额"
END GPL
示例 3:调整坐标轴的条形图
假设要调整 Y 轴的范围和刻度。
* 调整坐标轴的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=region sales MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: region=col(source(s), name("region"), unit.category())
DATA: sales=col(source(s), name("sales"))
GUIDE: axis(dim(1), label("地区"))
GUIDE: axis(dim(2), label("销售额"), start(0), end(100000), delta(8000))
SCALE: cat(dim(1), include("North", "South", "East", "West"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(region*sales), color.interior(color.red), color.exterior(color.blue))
TITLE: "不同地区的销售额"
END GPL
示例 4:组合图表(条形图和折线图)
假设要在一个图表中同时显示销售额和利润。
* 条形图和折线图的组合。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=year sales profit MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: year=col(source(s), name("year"))
DATA: sales=col(source(s), name("sales"))
DATA: profit=col(source(s), name("profit"))
GUIDE: axis(dim(1), label("年份"))
GUIDE: axis(dim(2), label("金额"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(year*sales), color.interior(color.lightblue))
ELEMENT: line(position(year*profit), color(color.red), size(size."2px"))
TITLE: "年度销售与利润"
END GPL
代码解释
GGRAPH
:启动图形命令。/GRAPHDATASET
:定义数据集和变量。/GRAPHSPEC SOURCE=INLINE
:使用内联GPL
代码定义图表。BEGIN GPL
和END GPL
:定义GPL
代码块。SOURCE: s=userSource(id("graphdataset"))
:定义数据源。DATA: ...
:定义使用的变量。GUIDE: axis(...)
:定义坐标轴。SCALE: ...
:定义坐标轴的尺度。ELEMENT: ...
:定义图表中的元素,如条形、折线等。TITLE: ...
:定义图表的标题。
其他自定义选项
- 颜色:可以使用
color.interior
和color.exterior
来定义条形的内部和外部颜色。 - 数据标签:可以使用
ELEMENT: point
来添加数据标签。 - 坐标轴调整:可以使用
GUIDE: axis
中的start
,end
, 和delta
来调整坐标轴的范围和刻度。 - 组合图表:可以使用多个
ELEMENT
语句来组合不同类型的图表元素。
三、动态图表和交互式图表
在SPSS中,创建动态图表和交互式图表的能力相对有限,因为
SPSS
主要是为静态数据分析和报告设计的。不过,SPSS Modeler
和IBM Cognos
等更高级的工具提供了更多的交互性和动态可视化能力。对于基本的SPSS
版本,可以通过导出数据到支持交互性的平台(如Tableau
、Power BI
或R Shiny
)来实现更高级的可视化效果。
然而,在
SPSS
中,可以通过一些方法来增加图表的灵活性,比如使用FILTER
命令或者TEMPORARY
命令来动态地改变图表所基于的数据子集,从而达到一定的“动态”效果。此外,通过编程方式(如Python
或R
插件)也可以在一定程度上创建更具交互性的图表。下面我会介绍一些在SPSS
中实现类似动态和交互式图表的方法。
1. 使用FILTER或TEMPORARY命令
示例:动态筛选数据
假设有一个销售数据集,想根据不同地区动态生成销售图表。
* 设置过滤器,只显示北区的数据。
FILTER BY region EQ 'North'.
EXECUTE.
* 创建北区的条形图。
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=year sales MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: year=col(source(s), name("year"))
DATA: sales=col(source(s), name("sales"))
GUIDE: axis(dim(1), label("年份"))
GUIDE: axis(dim(2), label("销售额"))
SCALE: linear(dim(2), include(0))
ELEMENT: interval(position(year*sales), color.interior(color.red))
TITLE: "北区的年度销售额"
END GPL
* 清除过滤器。
FILTER OFF.
EXECUTE.
2. 使用Python或R插件
如果安装了SPSS
的Python Essentials
或R Essentials
插件,可以利用Python
或R
的强大功能来创建交互式图表。这通常涉及将数据从SPSS
导出到Python
或R
环境中,然后在那里使用适当的库(如Plotly
, Bokeh
, Shiny
等)来创建图表。
示例:使用Python创建交互式图表
假设已经在SPSS
中安装了Python Essentials
插件,并且系统上安装了Plotly
库。
* 使用Python创建交互式条形图。
BEGIN PROGRAM Python.
import spss, spssdata
import plotly.express as px
# 从SPSS读取数据
data = spssdata.Spssdata().fetchall()
df = pd.DataFrame(data)
# 创建交互式条形图
fig = px.bar(df, x='year', y='sales', color='region', title='按区域划分的年度销售额')
fig.show()
END PROGRAM.
3. 导出数据到专门的可视化工具
对于更复杂的交互式图表,最好的方法可能是将数据导出到专门的可视化工具,如Tableau
或Power BI
。这些工具提供了强大的交互功能和丰富的图表类型。
示例:导出数据到CSV
* 将数据导出到CSV文件。
SAVE TRANSLATE OUTFILE='C:\path\to\your\file\sales_data.csv'
/TYPE=CSV
/FIELDNAMES
/CELLS=VALUES.
然后,可以在Tableau
或Power BI
中打开这个CSV
文件,并使用这些工具的功能来创建交互式图表。
虽然SPSS本身不是设计用来创建复杂的动态或交互式图表的工具,但通过一些技巧和辅助工具,仍然可以在一定程度上实现这些功能。