1

The following script has some strange problems. When I load it after starting gnuplot, I get the following error:

gnuplot> load "test_plot_data.gp"
         "test_plot_data.gp" line 46: warning: selected_columns is not a string variable
"lh_01":"rh_01"
         "test_plot_data.gp" line 62: undefined variable: with

gnuplot> 

When I load it again, it correctly selects the volumes from the specified columns “lh_01”:“rh_01” until it reaches “pause -1” in the loop. When it continues, the column names “lh_02”:“rh_02” are updated correctly, but it still outputs the values from the previous run (“lh_01”:“rh_01”).

When I load this script afterwards in the same Gnuplot session, I always get the values of “lh_02”:"rh_02", although the column names are always set correctly. Do I need to make some special settings to avoid this behaviour?

reset

set datafile missing "NaN"
set datafile columnheader

# Set up for subjects and column usage
$Data << EOD
# TP1
gp   HS   Age     lh_01    rh_01    lh_02  rh_02
2    0    37.74   7030.26  7353.44  70.26  73.44
2    0    26.42   7652.64  8566.62  76.64  85.62
2    0    30.20   6938.74  7489.41  69.74  74.41
2    0    27.68   6619.97  6224.74  66.97  62.74
2    1    18.87   7472.23  8635.48  74.23  86.48
2    0    34.56   6612.52  7347.70  66.52  73.70
2    0    33.54   7049.64  7137.09  70.64  71.09
3    1    21.47   8327.11  8745.67  83.11  87.67
1    0    22.00   7924.66  8694.33  79.66  86.33
1    0    24.96   7605.58  8072.01  76.58  80.01
3    1    12.10   8883.32  9230.87  88.32  92.87
2    0    24.72   8271.73  8465.82  82.73  84.82


# TP 2
gp   HS   Age     lh_01    rh_01    lh_02   rh_02
2    0    38.84   7069.54  7380.43  70.54   73.43
2    0    33.14   7705.56  8076.87  77.56   80.87
2    0    39.78   7346.33  7712.80  73.33   77.80
2    0    28.98   6963.54  7171.83  69.54   71.83
2    1    23.71   6830.13  8113.97  68.13   81.97
2    0    39.93   7438.96  7020.43  74.96   70.43
2    0    44.92   6943.02  7204.57  69.02   72.57
3    1    26.82   8245.33  8335.07  82.33   83.07
1    0    24.93   7396.14  7853.01  73.14   78.01
1    0    29.79   7421.25  7810.83  74.25   78.83
3    1    14.55   8672.95  8937.76  86.95   89.76
2    0    27.30   8668.1   8506.81  86.1    85.81
EOD

LABELS = "lh_01 rh_01 lh_02 rh_02"

# Search string for hemispheres (adjust based on your data)
search_string = 'lh'

# Loop through selected labels and group labels
do for [selected_label in LABELS] {
    if ( strstrt( selected_label, search_string ) > 0 ) {
        # Strip hemisphere label
        selected_label = substr( selected_label, strlen( search_string ) + 1, strlen( selected_label ) )

        # Set column names
        left = "lh".selected_label
        right = "rh".selected_label

        # Prepare selected columns for plotting
        selected_columns = sprintf("\"%s\":\"%s\"", left, right)
        print selected_columns

        # Store temporary table
        set table $Temp
            plot $Data using @selected_columns with table
        unset table

        print $Temp

        pause -1
    }
}

### End of script

1 Answer 1

1

It's not clear to me why you are taking a detour via sprintf() and @ macro. Simply take the string variables left and right into your plot command, which is plotting the columns with that headers.

plot $Data u left:right with table
Sign up to request clarification or add additional context in comments.

4 Comments

Thank you again for your helpful hint. I have obviously left out an important part. The column “PatientName” does not contain any numbers. I only get the column values via (stringcolumn('PatientName')). The solution seems to be a combination of macros and variables: base_column="(stringcolumn(‘PatientName’))” set table $Temp plot fs_pat_path using @base_column:left:right with table unset table
@magfan if the variable PatientName holds the column header of the column of interest then you can simply do: plot FILE u PatientName:left:right with table. I don't see why macros should be necessary. But maybe there is more behind which I don't see and you cannot show in a minimzed example. Glad you found a solution.
The title of the PatientName column contains a “:” and the column itself only contains strings. Without specifying a macro with “stringcolumn”, gnuplot will not read anything useful from this column.
@magfan if the variable PatientName, e.g. holds the string value "one:two" and you do plot FILE u PatientName:left:right w table I don't see why this shouldn't work if a columnheader one:two exists. But if you are using a macro you have to put this string between two extra ". Maybe you can give a minimized example in a new question where you show that something is not working as you would expect.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.