sdRplot<-function(nx,sl,ny,x){
#
# R function that can be used for creating Semantic Differential
# (SD) inventory plots. The input arguments for the function are:
# nx - number of levels in scale, e.g., 5
# sl - scale labels as a list, e.g. c("SA","A","N","A","SA")
# ny - number of descriptor items in the inventory
# x - data matrix:
# col1: low-end descriptors
# col2: high-end descriptors
# col3-onwards: mean scale values for each group
# The names of the columns (col 3 and above) of the data matrix
# (e.g., dimnames(x[[2]][3:ncol(x)])) are used for labelling
# the groups in the legend.
# Author: Justine Leon A. Uro (justineuro@gmail.com)
# Date: 19 October 2011 orig.
# 06 January 2021 rev. to allow plotting for data on only one group (l. 60)
# 29 July 2021 rev. moved drawing of axis() before legend();
# added white opaque background (bg="white");
# cex.lab=1.0 for xlab and ylab size
#
# Example:
# low<-c("Serious","Slow","Useless","Tiring","Old","Hard","Long")
# high<-c("Fun","Fast","Useful","Light","New","Easy","Short")
# scale<-c("SA","A","N","A","SA")
# grp1means<-c(4.2,4.6,4.3,4.1,4.5,4.5,4.0)
# grp2means<-c(3.8,3.9,3.7,4.5,4.4,4.3,4.4)
# grp3means<-c(4.5,4.7,4.4,4.2,4.6,4.4,3.9)
# data<-matrix(
# cbind(low,high,grp1means,grp2means,grp3means),
# nrow=7,ncol=5,byrow=FALSE,
# dimnames=list(c("I1","I2","I3","I4","I5","I6","I7"),
# c("Low","High","Grp1","Grp2","Grp3"))
# )
# sdRplot(5,scale,7,data)
#
NSCALE<-nx
NLAB<-ny
NRW<-nrow(x)
NCL<-ncol(x)
NGRP<-ncol(x)-2
GRPNMS<-dimnames(x)[[2]][3:NCL]
yval<-NLAB:1
labvaln<-x[,1]
labvalp<-x[,2]
# plot means of first group (only points)
plot(x[,3],yval,axes=F,pch=1,col=1,type="b",
xlab="Mean SD Scale Value",ylab="Descriptor",
cex.lab=1.0, # size of xlab, ylab
xlim=c(0.30,NSCALE+0.95),
lab=c(NSCALE,NLAB+2,1),mgp=c(3,1,0),xaxs="r",
mar=c(7,7,1,1)
)
# add title
title(main="SD Response Profiles",
sub="",
cex.sub=0.50
)
# draw vertical axes
axis(1,tck=1,at=c(1:NSCALE),labels=sl,cex.axis=0.60)
# draw legend with opaque white background
legend(1.25,NLAB-0.5,title="Legend:",GRPNMS,
title.col="black",
text.col=1:NGRP,
pch=1:NGRP,lty=1:NGRP,
col=1:NGRP,cex=0.60,
bg="white"
)
# skip this if there is only 1 group
if(NGRP>1){
for(i in 2:NGRP){
points(x[,i+2],yval,pch=i,col=i)
lines(x[,i+2],yval,pch=i,col=i,lty=i)
}
}
# draw the labels for the tick marks on the axes
for (i in 1:NLAB)
{
text(0.90,yval[i],label=labvaln[i],adj=1,cex=0.70) # cex = size of marks
text(NSCALE+0.10,yval[i],label=labvalp[i],adj=0,cex=0.70)
}
}
#
##
###
# Example 1
###
low<-c("Serious","Slow","Useless","Tiring","Old","Hard","Long")
high<-c("Fun","Fast","Useful","Light","New","Easy","Short")
scale<-c("SA","A","N","A","SA")
grp1means<-c(4.2,4.6,4.3,4.1,4.5,4.5,4.0)
grp2means<-c(3.8,3.9,3.7,4.5,4.4,4.3,4.4)
grp3means<-c(4.5,4.7,4.4,4.2,4.6,4.4,3.9)
data<-matrix(
cbind(low,high,grp1means,grp2means,grp3means),
nrow=7,ncol=5,byrow=FALSE,
dimnames=list(c("I1","I2","I3","I4","I5","I6","I7"),
c("Low","High","Grp1","Grp2","Grp3"))
)
sdRplot(5,scale,7,data)
###
# Example 2 (for grp1means only)
###
data1grp<-matrix(
cbind(low,high,grp1means),
nrow=7,ncol=3,byrow=FALSE,
dimnames=list(c("I1","I2","I3","I4","I5","I6","I7"),
c("Low","High","Grp1"))
)
sdRplot(5,scale,7,data1grp)
#