Using negative counts for the disagreeing responses and half the neutrals works OK.
Another method just occurred to me that avoids the negative scale values: combine two graphs back-to-back, one with the agreeing items and another with the disagreeing items but reverse the scale of the latter:
After splitting the neutral responses in half, I made a graph with two X axes. One axis had the 3 disagreeing responses and one had the 3 agreeing responses. I also made the graph spacing equal to 0 to remove the middle seam. Full script:
Graph Builder(
Size( 532, 454 ),
Show Control Panel( 0 ),
Graph Spacing( 0 ),
Variables(
X( :strongly disagree ),
X( :disagree, Position( 1 ) ),
X( :neutral, Position( 1 ) ),
X( :agree ),
X( :strongly agree, Position( 2 ) ),
X( :neutral, Position( 2 ) ),
Y( :Question )
),
Elements(
Position( 1, 1 ),
Bar( X( 3 ), X( 2 ), X( 1 ), Y, Legend( 6 ), Bar Style( "Stacked" ) )
),
Elements(
Position( 2, 1 ),
Bar( X( 3 ), X( 1 ), X( 2 ), Y, Legend( 7 ), Bar Style( "Stacked" ) )
),
SendToReport(
Dispatch( {}, "strongly disagree", ScaleBox, {Reversed Scale} ),
Dispatch( {}, "Question", ScaleBox, {Reversed Scale} ),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
6,
Properties( 0, {Fill Color( 32 )} ),
Properties( 1, {Fill Color( 35 )} ),
Properties( 2, {Fill Color( 3 )} )
), Legend Model(
7,
Base( 0, 0, 0 ),
Properties( 0, {Fill Color( 32 )} ),
Properties( 1, {Fill Color( 37 )} ),
Properties( 2, {Fill Color( 5 )} )
)}
),
Dispatch( {}, "400", LegendBox, {Position( {2, 1, 0, 3, 4, 5} )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "disagreement" )} ),
Dispatch( {}, "X 1 title", TextEditBox, {Set Text( "agreement" )} )
)
)