I am trying to plot bar graphs + SE that also incorporates all the individual values for each bar/category. Here is an example: https://www.researchgate.net/figure/271219084_fig6_Figure-9-Differential-expression-of-HCN-subunits-between-the-SOC-nuclei-underlies
=====================
To manage your subscription to SPSSX-L, send a message to
[hidden email] (not to SPSSX-L), with no body text except the
command. To leave the list, send the command
SIGNOFF SPSSX-L
For a list of commands to manage subscriptions, send the command
INFO REFCARD
Is this possible to do in SPSS? I have a sample syntax that plots the bar graphs below. I have not been able to add the individual values or find a source that discusses how to do that. The syntax is based on the Wide data format, but I can also transform it into a Long format, if absolutely necessary. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES= MEANSE(VAR1, 1) MEANSE(VAR2, 1) MEANSE(VAR3, 1) VarCateg MISSING=LISTWISE REPORTMISSING=NO TRANSFORM=VARSTOCASES(SUMMARY="#SUMMARY" INDEX="#INDEX" LOW="#LOW" HIGH="#HIGH") /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: SUMMARY=col(source(s), name("#SUMMARY")) DATA: INDEX=col(source(s), name("#INDEX"), unit.category()) DATA: VarCateg=col(source(s), name("VarCateg"), unit.category()) DATA: LOW=col(source(s), name("#LOW")) DATA: HIGH=col(source(s), name("#HIGH")) COORD: rect(dim(1,2), cluster(3,0)) GUIDE: axis(dim(2), label("Mean")) GUIDE: text.subfootnote(label("Error Bars: +/- 1 SE")) GUIDE: legend(aesthetic(aesthetic.color.interior), label("Treatment")) SCALE: cat(dim(3), include("0", "1", "2", "3")) SCALE: linear(dim(2), include(0)) SCALE: cat(aesthetic(aesthetic.color.interior), include("1", "2", "3")) SCALE: cat(dim(1), include("1", "2", "3")) ELEMENT: interval(position(VarCateg*SUMMARY*INDEX), color.interior(VarCateg), shape.interior(shape.square)) ELEMENT: interval(position(region.spread.range(VarCateg*(LOW+HIGH)*INDEX)), shape.interior(shape.ibeam)) END GPL. Thank you. |
See
https://andrewpwheeler.wordpress.com/2012/02/20/avoid-dynamite-plots-visualizing-dot-plots-with-super-imposed-confidence-intervals-in-spss-and-r/. If you post an example of your data I can show an example on your variables. ----- Andy W [hidden email] http://andrewpwheeler.wordpress.com/ -- Sent from: http://spssx-discussion.1045642.n5.nabble.com/ ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Thanks Andy. My data is below - it has an additional level of grouping than the example in your blog. Also, I had trouble with SEMs with your code: in SPSS 25, the error bars are invisible and I couldn't find a way to change their color. In SPSS 23 they appear as very light gold color, and again, I couldn't change that. Here is the structure of my data, along with the bar graphs where I want to add the scatter dots: DATA LIST LIST / Treatment(A7) IFL GRP NMD GLU. BEGIN DATA Start 32.96 404.5 574.09 125.31 Start 27 386.36 429.34 70.88 Start 43.7 763.11 490.21 74.5 Start 22.25 787 101.83 51.1 Start 14.87 563.34 146.14 59.2 Middle 40.18 423.11 432.26 72.85 Middle 47.99 766 457.65 78.3 Middle 26.04 232.59 38.43 49.69 Middle 26.36 390.02 143.08 60.65 Middle 24.6 486.07 90.29 55.21 Middle 28.63 513.72 105.81 55.13 End 37.4 395.91 362.45 68.1 End 37.74 868.85 392.57 88.31 End 29.95 355.62 172.46 60.65 End 14.73 245.57 90.29 40.23 End 16.86 656.03 45.65 48.29 END DATA. DATASET NAME BarsValues. * Chart Builder. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=MEANSE(IFL, 1) MEANSE(GRP, 1) MEANSE(NMD, 1) MEANSE(GLU, 1) Treatment MISSING=LISTWISE REPORTMISSING=NO TRANSFORM=VARSTOCASES(SUMMARY="#SUMMARY" INDEX="#INDEX" LOW="#LOW" HIGH="#HIGH") /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: SUMMARY=col(source(s), name("#SUMMARY")) DATA: INDEX=col(source(s), name("#INDEX"), unit.category()) DATA: Treatment=col(source(s), name("Treatment"), unit.category()) DATA: LOW=col(source(s), name("#LOW")) DATA: HIGH=col(source(s), name("#HIGH")) COORD: rect(dim(1,2), cluster(3,0)) GUIDE: axis(dim(2), label("Mean")) GUIDE: legend(aesthetic(aesthetic.color.interior), label("Treatment")) GUIDE: text.subfootnote(label("Error Bars: +/- 1 SE")) SCALE: cat(dim(3), include("0", "1", "2", "3")) SCALE: linear(dim(2), include(0)) ELEMENT: interval(position(Treatment*SUMMARY*INDEX), color.interior(Treatment), shape.interior(shape.square)) ELEMENT: interval(position(region.spread.range(Treatment*(LOW+HIGH)*INDEX)), shape.interior(shape.ibeam)) END GPL. VARSTOCASES /ID=id /MAKE scores FROM IFL GRP NMD GLU /INDEX=VarType(scores) /KEEP=Treatment /NULL=KEEP. On Fri, Oct 6, 2017 at 11:51 AM, Andy W <[hidden email]> wrote: See |
Using clustering seems to mess up the dodged dot plot, so I recreated the
same effect using small multiple panels. It is a bit busy, and in the figure caption you would want to put something like the circles are the original datapoints, the square is the mean, and the bars and plus/minus two standard errors. But it gets the point across. ***************************************************************. *Adding the mean and standard error into the dataset. AGGREGATE OUTFILE=* MODE=ADDVARIABLES /BREAK Treatment VarType /MeanScore = MEAN(Scores) /SDScore = SD(Scores) /NGroup = N. *Now calculating the standard error of the mean. COMPUTE StandErr = SDScore/SQRT(NGroup). COMPUTE LowS = MeanScore - 2*StandErr. COMPUTE HighS = MeanScore + 2*StandErr. FORMATS scores LowS HighS MeanScore (F4.0). EXECUTE. *Now make a chart of the points and +- 2 standard errors. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=VarType scores Treatment MeanScore LowS HighS MISSING=VARIABLEWISE REPORTMISSING=NO /GRAPHSPEC SOURCE=INLINE. BEGIN GPL PAGE: begin(scale(900px,500px)) SOURCE: s=userSource(id("graphdataset")) DATA: VarType=col(source(s), name("VarType"), unit.category()) DATA: scores=col(source(s), name("scores")) DATA: Treatment=col(source(s), name("Treatment"), unit.category()) DATA: LowS=col(source(s), name("LowS")) DATA: HighS=col(source(s), name("HighS")) DATA: MeanScore=col(source(s), name("MeanScore")) COORD: rect(dim(1,2)) GUIDE: axis(dim(2), label("Scores"), delta(100)) GUIDE: axis(dim(1)) GUIDE: axis(dim(3), opposite()) SCALE: cat(dim(1), reverse()) SCALE: linear(dim(2), min(0), max(900)) GUIDE: legend(aesthetic(aesthetic.color.interior), null()) GUIDE: legend(aesthetic(aesthetic.color.exterior), null()) ELEMENT: point.dodge.symmetric(position(bin.dot(Treatment*scores*VarType, dim(2))), color.interior(Treatment), color.exterior(Treatment), size(size."9"), transparency.interior(transparency."0.8")) ELEMENT: edge(position(region.spread.range(Treatment*(LowS+HighS)*VarType)), color.interior(Treatment), size(size."0.9")) ELEMENT: point(position(Treatment*MeanScore*VarType), color.interior(Treatment), color.exterior(Treatment), shape(shape.square), size(size."16"), transparency.interior(transparency."1")) PAGE: end() END GPL. *No color version. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=VarType scores Treatment MeanScore LowS HighS MISSING=VARIABLEWISE REPORTMISSING=NO /GRAPHSPEC SOURCE=INLINE. BEGIN GPL PAGE: begin(scale(900px,500px)) SOURCE: s=userSource(id("graphdataset")) DATA: VarType=col(source(s), name("VarType"), unit.category()) DATA: scores=col(source(s), name("scores")) DATA: Treatment=col(source(s), name("Treatment"), unit.category()) DATA: LowS=col(source(s), name("LowS")) DATA: HighS=col(source(s), name("HighS")) DATA: MeanScore=col(source(s), name("MeanScore")) COORD: rect(dim(1,2)) GUIDE: axis(dim(2), label("Scores"), delta(100)) GUIDE: axis(dim(1)) GUIDE: axis(dim(3), opposite()) SCALE: cat(dim(1), reverse()) SCALE: linear(dim(2), min(0), max(900)) GUIDE: legend(aesthetic(aesthetic.color.interior), null()) GUIDE: legend(aesthetic(aesthetic.color.exterior), null()) ELEMENT: point.dodge.symmetric(position(bin.dot(Treatment*scores*VarType, dim(2))), color.interior(color.black), color.exterior(color.black), size(size."9"), transparency.interior(transparency."0.8")) ELEMENT: edge(position(region.spread.range(Treatment*(LowS+HighS)*VarType)), color.interior(color.black), size(size."0.9")) ELEMENT: point(position(Treatment*MeanScore*VarType), color.interior(color.darkgrey), color.exterior(color.black), shape(shape.square), size(size."16"), transparency.interior(transparency."1")) PAGE: end() END GPL. ***************************************************************. <http://spssx-discussion.1045642.n5.nabble.com/file/t329824/DotPlot.png> The way this is set up there is no intrinsic need for color, although aesthetically I do not mind the color. Your problem you describe with the color previously has to do with SPSS's defaults, you could map whatever category to receive whatever color you want. ----- Andy W [hidden email] http://andrewpwheeler.wordpress.com/ -- Sent from: http://spssx-discussion.1045642.n5.nabble.com/ ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Excellent. Thanks a lot. Your blog is very helpful for visualizations
with SPSS, so I've been trying to learn some of the GPL syntax by trial
and error. I especially liked your heatmaps and corrgrams. Are you aware
of any good books that teach the syntax for graphing? I consulted the
Command Syntax Reference in SPSS, but didn't find much/any information
about graphing details. For example, I was trying to figure out how to
replace the squares with a line for the mean, as is usually done, and I
couldn't find it. Doing "shape.line" didn't work. Closest I can come is
"shape.ibeam," but that removes the symbols for the mean altogether. The
same issue concerns changing the colors of each category so it matches
the rest of the color coded graphs I have, but when I alter the "black"
in the colorless version's syntax, the colors change for all groups. In
the color graph syntax, I don't see a place where I can modify the
color: dim(2))), color.interior(Treatment), color.exterior(Treatment), size(size."9"), transparency.interior( On Wed, Oct 11, 2017 at 7:45 AM, Andy W <[hidden email]> wrote: Using clustering seems to mess up the dodged dot plot, so I recreated the |
For colors you need to map the colors in a separate line. See the "SCALE:
cat" lines in the following examples. You can either choose color constants or specify the color in hexadecimal. For the changing the mean symbol part, the squares I originally showed have an outer color/transparency and an inner fill color/transparency. Not all symbols have that though, and so switching to shape.line it would be drawn entirely transparent. So the option transparency.interior(transparency."1") would need to be changed to: transparency.interior(transparency."0") or just deleted altogether. Unfortunately the shape.line does not run horizontal in this example, but goes vertical, which is not what you want. As an alternative you can consider a plus sign, although I like my original squares better, as I think they are more salient. For GPL references you can check out the GPL reference guide, ftp://public.dhe.ibm.com/software/analytics/spss/documentation/statistics/25.0/en/client/Manuals/GPL_Reference_Guide_for_IBM_SPSS_Statistics.pdf. Start with the examples in the back. ***********************************************************. GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=VarType scores Treatment MeanScore LowS HighS MISSING=VARIABLEWISE REPORTMISSING=NO /GRAPHSPEC SOURCE=INLINE. BEGIN GPL PAGE: begin(scale(900px,500px)) SOURCE: s=userSource(id("graphdataset")) DATA: VarType=col(source(s), name("VarType"), unit.category()) DATA: scores=col(source(s), name("scores")) DATA: Treatment=col(source(s), name("Treatment"), unit.category()) DATA: LowS=col(source(s), name("LowS")) DATA: HighS=col(source(s), name("HighS")) DATA: MeanScore=col(source(s), name("MeanScore")) TRANS: ML = eval(MeanScore - 10) TRANS: MH = eval(MeanScore + 10) COORD: rect(dim(1,2)) GUIDE: axis(dim(2), label("Scores"), delta(100)) GUIDE: axis(dim(1)) GUIDE: axis(dim(3), opposite()) SCALE: cat(dim(1), reverse()) SCALE: linear(dim(2), min(0), max(900)) SCALE: cat(aesthetic(aesthetic.color.interior), map(("Start",color.red),("Middle",color.blue),("End",color."31a354"))) SCALE: cat(aesthetic(aesthetic.color.exterior), map(("Start",color.red),("Middle",color.blue),("End",color."31a354"))) GUIDE: legend(aesthetic(aesthetic.color.interior), null()) GUIDE: legend(aesthetic(aesthetic.color.exterior), null()) ELEMENT: point.dodge.symmetric(position(bin.dot(Treatment*scores*VarType,dim(2))), color.interior(Treatment), color.exterior(Treatment), size(size."9"), transparency.interior(transparency."0.95")) ELEMENT: point(position(Treatment*MeanScore*VarType)), color.interior(Treatment), color.exterior(Treatment), shape(shape.plus), size(size."12"), transparency.interior(transparency."0")) ELEMENT: edge(position(region.spread.range(Treatment*(LowS+HighS)*VarType)), color.interior(Treatment), size(size."1")) PAGE: end() END GPL. ***********************************************************. <http://spssx-discussion.1045642.n5.nabble.com/file/t329824/DotPlot.png> ----- Andy W [hidden email] http://andrewpwheeler.wordpress.com/ -- Sent from: http://spssx-discussion.1045642.n5.nabble.com/ ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Free forum by Nabble | Edit this page |