flexible plot titles

Hey all,

I am new in using GAUSS.

I need to develop a loop that creates a histogram from existing data and the title of the respective histogram has to flexible. So my code was as follows:

for i(1,5,1);

    varnames = {"a", "b", "c", "d", "e"};

    //declare plot structure
    struct plotControl myplot;

    //Initialize plot structure
    myplot = plotGetDefaults("bar");

    //Change existing titles to personalized ones
    plotSetTitle(&myplot, varnames[1,i]);

    plotHistp(myplot, data[.,i], 10);

endfor;

The problem is that the plotSetTitle function apparently does not accept non-string values for the title. Do you have any recommendation about how I could possibly change this?

 

Many thanks!

1 Answer



0



accepted

The Problem

For historical reasons, this code:

varnames = {"a", "b", "c", "d", "e"};

Will create a matrix where each character is held inside data which is generally treated as numeric.

The Solution

To fix this, you need to make varnames to be a string array. You can do this by using the string concatenation operator to build the string array like this:

// Create a 5x1 string array
varnames = "a" $| "b" $| "c" $| "d" $| "e";

or you can use the string keyword to force varnames to be created as a string like this:

// Create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

However, if you use the string keyword, GAUSS assumes you want varnames to be a string and never anything else. So GAUSS will error if you do this:

// Create varnames as a matrix with character elements
varnames = {"a", "b", "c", "d", "e"};

// Try to create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

or this

// Create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

// Try to create varnames as a matrix, but cause error
// "redefinition of string 'varnames' being declared as matrix"
varnames = {"a", "b", "c", "d", "e"};

If you use the new command it will clear out varnames and let you redefine it to another type.

aptech

1,773

Your Answer

1 Answer

0
accepted

The Problem

For historical reasons, this code:

varnames = {"a", "b", "c", "d", "e"};

Will create a matrix where each character is held inside data which is generally treated as numeric.

The Solution

To fix this, you need to make varnames to be a string array. You can do this by using the string concatenation operator to build the string array like this:

// Create a 5x1 string array
varnames = "a" $| "b" $| "c" $| "d" $| "e";

or you can use the string keyword to force varnames to be created as a string like this:

// Create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

However, if you use the string keyword, GAUSS assumes you want varnames to be a string and never anything else. So GAUSS will error if you do this:

// Create varnames as a matrix with character elements
varnames = {"a", "b", "c", "d", "e"};

// Try to create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

or this

// Create a strongly typed 5x1 string array
string varnames = {"a", "b", "c", "d", "e"};

// Try to create varnames as a matrix, but cause error
// "redefinition of string 'varnames' being declared as matrix"
varnames = {"a", "b", "c", "d", "e"};

If you use the new command it will clear out varnames and let you redefine it to another type.


You must login to post answers.

Have a Specific Question?

Get a real answer from a real person

Need Support?

Get help from our friendly experts.