In the pbox.e example for the old PQG graphics, one of the available styles is Edward Tufte's "Minimum Ink" style, which just reduces the width of the central box to zero.
Is there a way to recreate this style with plotBox() ?
3 Answers
0
I believe there are two variants of box plots proposed by Tufte. The current implementation of plotBox does not allow either of these styles, but you could make either of them with plotXY and plotScatter. Here is some code to produce one of the styles.
rndseed 345345; x = rndn(100, 4); plotTufteBox(x); proc (0) = plotTufteBox(x); //Line settings struct plotControl myPlot; myPlot = plotGetDefaults("xy"); plotSetLineColor(&myPlot, "black"); plotSetLegend(&myPlot, "off"); //Get data to create box y = zeros(5, cols(x)) .* error(0); y[1,.] = minc(x)'; y[2 4,.] = quantile(x, 0.25|0.75); y[5,.] = maxc(x)'; x1 = reshape(seqa(1, 1, cols(y)), rows(y), cols(y)); plotXY(myPlot, x1, y); //Set myPlot = plotGetDefaults("scatter"); plotSetLineColor(&myPlot, "black"); plotAddScatter(seqa(1, 1, cols(q)), median(x)); endp;
0
Thanks for your help.....but the code doesn't compile.
Did you forget to declare y and x1 as local?
I'm also not sure what q is supposed to be in the plotAddScatter line. Should that be a y?
0
Sorry...that is an example of why it can be good to have a "new" at the top of a program. You are, of course, correct about the local declarations. q was the variable that originally held the return from quantile. This version should work!
new; rndseed 345345; x = rndn(100, 4); plotTufteBox(x); proc (0) = plotTufteBox(x); local y, x1; struct plotControl myPlot; myPlot = plotGetDefaults("xy"); plotSetLineColor(&myPlot, "black"); plotSetLegend(&myPlot, "off"); y = zeros(5, cols(x)) .* error(0); y[1,.] = minc(x)'; y[2 4,.] = quantile(x, 0.25|0.75); y[5,.] = maxc(x)'; x1 = reshape(seqa(1, 1, cols(y)), rows(y), cols(y)); plotXY(myPlot, x1, y); myPlot = plotGetDefaults("scatter"); plotSetLineColor(&myPlot, "black"); plotAddScatter(seqa(1, 1, cols(y)), median(x)); endp;
Your Answer
3 Answers
I believe there are two variants of box plots proposed by Tufte. The current implementation of plotBox does not allow either of these styles, but you could make either of them with plotXY and plotScatter. Here is some code to produce one of the styles.
rndseed 345345; x = rndn(100, 4); plotTufteBox(x); proc (0) = plotTufteBox(x); //Line settings struct plotControl myPlot; myPlot = plotGetDefaults("xy"); plotSetLineColor(&myPlot, "black"); plotSetLegend(&myPlot, "off"); //Get data to create box y = zeros(5, cols(x)) .* error(0); y[1,.] = minc(x)'; y[2 4,.] = quantile(x, 0.25|0.75); y[5,.] = maxc(x)'; x1 = reshape(seqa(1, 1, cols(y)), rows(y), cols(y)); plotXY(myPlot, x1, y); //Set myPlot = plotGetDefaults("scatter"); plotSetLineColor(&myPlot, "black"); plotAddScatter(seqa(1, 1, cols(q)), median(x)); endp;
Thanks for your help.....but the code doesn't compile.
Did you forget to declare y and x1 as local?
I'm also not sure what q is supposed to be in the plotAddScatter line. Should that be a y?
Sorry...that is an example of why it can be good to have a "new" at the top of a program. You are, of course, correct about the local declarations. q was the variable that originally held the return from quantile. This version should work!
new; rndseed 345345; x = rndn(100, 4); plotTufteBox(x); proc (0) = plotTufteBox(x); local y, x1; struct plotControl myPlot; myPlot = plotGetDefaults("xy"); plotSetLineColor(&myPlot, "black"); plotSetLegend(&myPlot, "off"); y = zeros(5, cols(x)) .* error(0); y[1,.] = minc(x)'; y[2 4,.] = quantile(x, 0.25|0.75); y[5,.] = maxc(x)'; x1 = reshape(seqa(1, 1, cols(y)), rows(y), cols(y)); plotXY(myPlot, x1, y); myPlot = plotGetDefaults("scatter"); plotSetLineColor(&myPlot, "black"); plotAddScatter(seqa(1, 1, cols(y)), median(x)); endp;