Subscribe Bookmark RSS Feed

Refresh Graph in Dialog Box

pmroz

Super User

Joined:

Jun 23, 2011

I'm displaying a radio box and a graph in a "new window".  If the user selects a different graph in the radio box I want the old graph deleted and the new graph displayed, all in the same window.  Not sure how exactly to do this.  Here's a simple example that displays the first chart. 

dt = open("$sample_data\Big Class.jmp");

my_1_script = expr(

    my_gb = Graph Builder(

        Show Control Panel( 0 ),

        Variables( X( :weight ), Y( :height ) ),

        Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 3 ) ) )

    );

);

my_2_script = expr(

    my_gb = Graph Builder(

        Show Control Panel( 0 ),

        Variables( X( :sex ), Y( :age ) ),

        Elements( Histogram( X, Y, Legend( 5 ) ) )

    );

);

my_3_script = expr(

    my_gb = Graph Builder(

        Show Control Panel( 0 ),

        Variables( X( :age ), Y( :age ) ),

        Elements(

            Pie( X, Y, Legend( 2 ), Pie Style( "Pie" ),

                Summary Statistic( "Mean" ), Label( "No Labels" )

            )

        )

    );

);

chart_list = {"Chart 1", "Chart 2", "Chart 3"};

//------------------------------------------------------------------------------

my_win = new window("Chart Display",

    panelbox("Graph Options",

        hlistbox(

            panelbox("Select Chart",

                chart_rb = radiobox(chart_list,

                    selected_chart = chart_rb << get selected;

                    if (selected_chart == "Chart 1",

                        my_1_script,   

                        selected_chart == "Chart 2",

                        my_2_script,

                        selected_chart == "Chart 3",

                        my_3_script

                    )

                )

            ),

        )

    ),

// Default is chart 1

    my_1_script

);

1 ACCEPTED SOLUTION

Accepted Solutions
Solution

If given a variable name, the graph can easily be deleted before appending the graph to the window.

This seems to work:

my_win = New Window( "Chart Display",

      Panel Box( "Graph Options",

            H List Box(

                  Panel Box( "Select Chart",

                        chart_rb = Radio Box(

                              chart_list,

                              selected_chart = chart_rb << get selected;

                              If(selected_chart == "Chart 1",

                                          gb << delete;

                                          my_win << append( gb = my_1_script ),

                                    selected_chart == "Chart 2",

                                          gb << delete;

                                          my_win << append( gb = my_2_script ),

                                    selected_chart == "Chart 3",

                                          gb << delete;

                                          my_win << append( gb = my_3_script ),

                              );

                        )

                  ),

            )

      ),

// Default is chart 1

      gb = my_1_script

);

3 REPLIES
Solution

If given a variable name, the graph can easily be deleted before appending the graph to the window.

This seems to work:

my_win = New Window( "Chart Display",

      Panel Box( "Graph Options",

            H List Box(

                  Panel Box( "Select Chart",

                        chart_rb = Radio Box(

                              chart_list,

                              selected_chart = chart_rb << get selected;

                              If(selected_chart == "Chart 1",

                                          gb << delete;

                                          my_win << append( gb = my_1_script ),

                                    selected_chart == "Chart 2",

                                          gb << delete;

                                          my_win << append( gb = my_2_script ),

                                    selected_chart == "Chart 3",

                                          gb << delete;

                                          my_win << append( gb = my_3_script ),

                              );

                        )

                  ),

            )

      ),

// Default is chart 1

      gb = my_1_script

);

pmroz

Super User

Joined:

Jun 23, 2011

Truly awesome MS.  I knew it was relatively simple but couldn't quite get the syntax right.  Thanks!

ms

Super User

Joined:

Jun 23, 2011

This is a simpler version using the same approach that may be easier to generalize:

chart_list = {"Chart 1", "Chart 2", "Chart 3"};

script_list = {my_1_script, my_2_script, my_3_script};

my_win = New Window( "Chart Display",

      Panel Box( "Graph Options",

            H List Box(

                  Panel Box( "Select Chart",

                        chart_rb = Radio Box(

                              chart_list,

                              gb << delete;

                              my_win << append( gb = Eval( script_list[chart_rb << get] ) )

                        ),

                  )

            )

      ),

// Default is chart 1

      gb = eval(script_list[1])

);