Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • parplot: different color for byvars when using by() option

    Dear Stata users,

    I have a question about -parplot- command (SSC). This command can produce parallel coordinates plot. Using the classical "iris data", I have produced a parplot. Everything goes well, however, I want to take a step further. That is to say, I want to assign different colors to each speicies, for example, blue color for setosa, red color for versicolor, and yellow color for virginica, and what's more, I want these assignments can be copied in the last "total" plot. It seems that the parplot only allow one color for all species (i.e. the byvars of by() option). I wonder is there any way to work around this problem? I dismiss the over() option because I want to display each sepecies separately. Thank you.

    Code:
    * Example generated by -dataex-. To install: ssc install dataex
    clear
    input float(species sepallen sepalwid petallen petalwid)
    1 5.1 3.5 1.4  .2
    1 4.9   3 1.4  .2
    1 4.7 3.2 1.3  .2
    1 4.6 3.1 1.5  .2
    1   5 3.6 1.4  .2
    1 5.4 3.9 1.7  .4
    1 4.6 3.4 1.4  .3
    1   5 3.4 1.5  .2
    1 4.4 2.9 1.4  .2
    1 4.9 3.1 1.5  .1
    1 5.4 3.7 1.5  .2
    1 4.8 3.4 1.6  .2
    1 4.8   3 1.4  .1
    1 4.3   3 1.1  .1
    1 5.8   4 1.2  .2
    1 5.7 4.4 1.5  .4
    1 5.4 3.9 1.3  .4
    1 5.1 3.5 1.4  .3
    1 5.7 3.8 1.7  .3
    1 5.1 3.8 1.5  .3
    1 5.4 3.4 1.7  .2
    1 5.1 3.7 1.5  .4
    1 4.6 3.6   1  .2
    1 5.1 3.3 1.7  .5
    1 4.8 3.4 1.9  .2
    1   5   3 1.6  .2
    1   5 3.4 1.6  .4
    1 5.2 3.5 1.5  .2
    1 5.2 3.4 1.4  .2
    1 4.7 3.2 1.6  .2
    1 4.8 3.1 1.6  .2
    1 5.4 3.4 1.5  .4
    1 5.2 4.1 1.5  .1
    1 5.5 4.2 1.4  .2
    1 4.9 3.1 1.5  .2
    1   5 3.2 1.2  .2
    1 5.5 3.5 1.3  .2
    1 4.9 3.6 1.4  .1
    1 4.4   3 1.3  .2
    1 5.1 3.4 1.5  .2
    1   5 3.5 1.3  .3
    1 4.5 2.3 1.3  .3
    1 4.4 3.2 1.3  .2
    1   5 3.5 1.6  .6
    1 5.1 3.8 1.9  .4
    1 4.8   3 1.4  .3
    1 5.1 3.8 1.6  .2
    1 4.6 3.2 1.4  .2
    1 5.3 3.7 1.5  .2
    1   5 3.3 1.4  .2
    2   7 3.2 4.7 1.4
    2 6.4 3.2 4.5 1.5
    2 6.9 3.1 4.9 1.5
    2 5.5 2.3   4 1.3
    2 6.5 2.8 4.6 1.5
    2 5.7 2.8 4.5 1.3
    2 6.3 3.3 4.7 1.6
    2 4.9 2.4 3.3   1
    2 6.6 2.9 4.6 1.3
    2 5.2 2.7 3.9 1.4
    2   5   2 3.5   1
    2 5.9   3 4.2 1.5
    2   6 2.2   4   1
    2 6.1 2.9 4.7 1.4
    2 5.6 2.9 3.6 1.3
    2 6.7 3.1 4.4 1.4
    2 5.6   3 4.5 1.5
    2 5.8 2.7 4.1   1
    2 6.2 2.2 4.5 1.5
    2 5.6 2.5 3.9 1.1
    2 5.9 3.2 4.8 1.8
    2 6.1 2.8   4 1.3
    2 6.3 2.5 4.9 1.5
    2 6.1 2.8 4.7 1.2
    2 6.4 2.9 4.3 1.3
    2 6.6   3 4.4 1.4
    2 6.8 2.8 4.8 1.4
    2 6.7   3   5 1.7
    2   6 2.9 4.5 1.5
    2 5.7 2.6 3.5   1
    2 5.5 2.4 3.8 1.1
    2 5.5 2.4 3.7   1
    2 5.8 2.7 3.9 1.2
    2   6 2.7 5.1 1.6
    2 5.4   3 4.5 1.5
    2   6 3.4 4.5 1.6
    2 6.7 3.1 4.7 1.5
    2 6.3 2.3 4.4 1.3
    2 5.6   3 4.1 1.3
    2 5.5 2.5   4 1.3
    2 5.5 2.6 4.4 1.2
    2 6.1   3 4.6 1.4
    2 5.8 2.6   4 1.2
    2   5 2.3 3.3   1
    2 5.6 2.7 4.2 1.3
    2 5.7   3 4.2 1.2
    2 5.7 2.9 4.2 1.3
    2 6.2 2.9 4.3 1.3
    2 5.1 2.5   3 1.1
    2 5.7 2.8 4.1 1.3
    3 6.3 3.3   6 2.5
    3 5.8 2.7 5.1 1.9
    3 7.1   3 5.9 2.1
    3 6.3 2.9 5.6 1.8
    3 6.5   3 5.8 2.2
    3 7.6   3 6.6 2.1
    3 4.9 2.5 4.5 1.7
    3 7.3 2.9 6.3 1.8
    3 6.7 2.5 5.8 1.8
    3 7.2 3.6 6.1 2.5
    3 6.5 3.2 5.1   2
    3 6.4 2.7 5.3 1.9
    3 6.8   3 5.5 2.1
    3 5.7 2.5   5   2
    3 5.8 2.8 5.1 2.4
    3 6.4 3.2 5.3 2.3
    3 6.5   3 5.5 1.8
    3 7.7 3.8 6.7 2.2
    3 7.7 2.6 6.9 2.3
    3   6 2.2   5 1.5
    3 6.9 3.2 5.7 2.3
    3 5.6 2.8 4.9   2
    3 7.7 2.8 6.7   2
    3 6.3 2.7 4.9 1.8
    3 6.7 3.3 5.7 2.1
    3 7.2 3.2   6 1.8
    3 6.2 2.8 4.8 1.8
    3 6.1   3 4.9 1.8
    3 6.4 2.8 5.6 2.1
    3 7.2   3 5.8 1.6
    3 7.4 2.8 6.1 1.9
    3 7.9 3.8 6.4   2
    3 6.4 2.8 5.6 2.2
    3 6.3 2.8 5.1 1.5
    3 6.1 2.6 5.6 1.4
    3 7.7   3 6.1 2.3
    3 6.3 3.4 5.6 2.4
    3 6.4 3.1 5.5 1.8
    3   6   3 4.8 1.8
    3 6.9 3.1 5.4 2.1
    3 6.7 3.1 5.6 2.4
    3 6.9 3.1 5.1 2.3
    3 5.8 2.7 5.1 1.9
    3 6.8 3.2 5.9 2.3
    3 6.7 3.3 5.7 2.5
    3 6.7   3 5.2 2.3
    3 6.3 2.5   5 1.9
    3 6.5   3 5.2   2
    3 6.2 3.4 5.4 2.3
    3 5.9   3 5.1 1.8
    end
    label values species species
    label def species 1 "setosa", modify
    label def species 2 "versicolor", modify
    label def species 3 "virginica", modify
    Code:
    parplot sepallen sepalwid petallen petalwid, by(species, total note("") compact) plotregion(margin(large))
    Click image for larger version

Name:	irsh.png
Views:	1
Size:	114.6 KB
ID:	1487023

  • #2
    parplot doesn't support that directly at present, but consider

    Code:
    parplot sep* pet*, over(species) ms(Oh plus X)
    Incidentally a simple plot of petal measures

    Code:
    * ssc install sepscatter 
    sepscatter pet*, sep(species) aspect(1) legend(order(3 2 1) ring(0) col(1) pos(11))
    works better here. Examples like these lead me to think that parallel coordinates plot have been a little oversold.

    Click image for larger version

Name:	iris.png
Views:	1
Size:	28.1 KB
ID:	1487043

    Comment


    • #3
      Thank you very much Nick Cox. The iris data does show good cluster in scatter plot above. But parallel coordinate plot can transform high-dimension efficiently to 2D patterns, although every so often overplotting can make it impossible to see anything.

      Comment


      • #4
        I have hacked -parplot- command written by Nick Cox. The knack is replacing twoway connected with sepscatter (SSC), and setting default connect() to "L" (ascending). And I get the following parallel coordinate plot.
        Click image for larger version

Name:	parplot.png
Views:	1
Size:	133.0 KB
ID:	1487325

        Comment


        • #5
          Neat solution.

          Comment


          • #6
            Hi there,
            I'm also using the parplot command (SSC) and would like to change the color for each "by" variable as per Chen's graph in #4 - Chen Samulsion could you please share your code for your above graph in #4?

            At present, my code is:

            parplot meanop_pop_mg OpioidEML if OpioidEML!=. & meanop_pop_mg!=., ///
            graphregion(fcolor(white)) msize(small) ///
            by(Region2, total compact note(" ")) ///
            plotregion(margin(large)) ///
            xla(1 "mg/person" 2 "opioids on EMLs", ang(25))

            My output is:
            parplot_op_emls.tif

            I also want to:
            1) remove the blue background as per Chen's graph - I've tried using "graphregion(fcolor(white))" but this didn't work; and
            2) I want the y-axis to include values rather than "high" and "low" - is this possible?

            Thank you.

            Comment


            • #7
              1) There are many excellent graph schemes around which do this as one of many style choices. I always

              Code:
              set scheme s1color
              which is one of StataCorp's own schemes. Several other schemes have similar effects.

              2) The option tr(raw) turns off the default scaling whereby values are scaled between low and high.

              I can't share Chen's code because I don't have a copy.

              Comment


              • #8
                Great, thanks Nick.
                Regarding 2) this is for the left-sided y-axis. Is there also an option for the right-sided y-axis?

                Comment


                • #9
                  I don't understand #8. Scaling applies to all axes. You can have a right-hand axis too but it must be consistent with the left-hand axis.

                  Comment

                  Working...
                  X