Skip to contents
library(ThinkingGrid)
library(gridExtra)

data_file <- system.file("extdata", "sample_data.csv", package = "ThinkingGrid")
tg_data <- read.csv(data_file)

knitr::kable(head(tg_data))
id condition probe dc ac valence
0 Negative 1 6 1 -1
0 Negative 2 4 3 -1
0 Negative 3 3 3 0
0 Negative 4 4 5 0
1 Negative 1 5 1 -2
1 Negative 2 5 1 -2

Overall Plots

The plot_tg function is used to visualize the results of a Thinking Grid analysis. To use this function, all you need is a dataframe containing one column that has deliberate constraints and another containing automatic constraints. In the dataset illustrated above, dc represents the deliberate constraints and ac represents the automatic constraints and need to be passed as characters to the dc_column and ac_column parameters respectively. When using default arguments, the type parameter is set to "depth".

simple_depth <- plot_tg(
  tg_data,
  dc_column = "dc",
  ac_column = "ac"
)

simple_depth$plot

The type parameter can be set to one of six parameters: "cells", "quadrants", "horizontal", "vertical", "constraints", and "depth" (default).

simple_constraints <- plot_tg(
  tg_data,
  type = "cells",
  dc_column = "dc",
  ac_column = "ac"
)

simple_constraints$plot

Condition plots

Separate Plots

The plot_tg function allows the user to plot separate plots using a condition column present within the dataset. To use this functionality, set the proportion_type argument to "condition" (default is "overall" and will plot the overall proportions as shown in examples above). The condition_column argument needs to be populated with character representing the column name. The number of plots created will be equal to the number of conditions present within this column.

condition_separate <- plot_tg(
  tg_data,
  type = "constraints",
  proportion_type = "condition",
  dc_column = "dc",
  ac_column = "ac",
  condition_column = "condition"
)

condition_separate$plot

If the number of conditions is exactly equal to two, the two plots will be plotted side by side similar to the example above. However, if the number of conditions is greater than two, separate plots will be returned for each condition. In the illustration below, the column valence has five possible values. The code will return five ggplot objects, one for each unique condition, which can be retrieved using the name of that condition. We have highlighted how to retrieve plots for valence == 0 and valence == -2.

condition_separate2 <- plot_tg(
  tg_data,
  type = "vertical",
  proportion_type = "condition",
  dc_column = "dc",
  ac_column = "ac",
  condition_column = "valence"
)

condition_separate2_val0 <- condition_separate2$plot$`0`
condition_separate2_val2 <- condition_separate2$plot$`-2`

grid.arrange(condition_separate2_val0, condition_separate2_val2, ncol = 1)

Difference Plots

Another way of visualizing the data is available when the number of conditions is exactly two. If the proportion_type is set to "condition", the comparison_type parameter could be indicated as "difference" (default is "separate" which generates the plots above). This visualization essentially depicts how much of a shift have people made across the two conditions.

condition_difference <- plot_tg(
  tg_data,
  proportion_type = "condition",
  comparison_type = "difference",
  dc_column = "dc",
  ac_column = "ac",
  condition_column = "condition"
)

condition_difference$plot

It can be the case that extreme values in the difference distributions are sparse. For example, maybe in the example above, a difference percentage of 4% only appears once; whereas most of the values lie between negative two to two. In such instances, the color palette overly emphasizes these extreme values, while compressing the majority of data points which could potentially be of more interest. Three parameters can be used to correct for this. First, the gradient_scaling argument must be set to "enhanced". The enhanced_threshold_pct controls what percentage of data must be enhanced in the color palette, default is 50. Essentially it’s telling the code what proportion of the data you have provided you’d like to enhance. The enhanced_expansion_factor is how much you’d like the selected area to be enhanced by (default=1.5). In simple terms, the function will compress the color palette in such a way that the bottom 50% of the data will get more colors (with a factor of 1.5) enhancing the variability of this region, making it easier for readers to pick up minute differences.

condition_difference2 <- plot_tg(
  tg_data,
  proportion_type = "condition",
  comparison_type = "difference",
  dc_column = "dc",
  ac_column = "ac",
  condition_column = "condition",
  gradient_scaling = "enhanced",
  enhanced_threshold_pct = 40,
  enhanced_expansion_factor = 2,
)

condition_difference$plot

Creating GIFs

There might be instances where users want to visualize the progression on the thinking grid based on a condition. In our dataframe, we want to visualize how reports on the thinking grid change across different levels of valence (-2 to 2). The create_tg_animation function can assist with this. Similar to the plot_tg function, it expects a dataframe, dc_column, ac_column, and condition_column. If condition column is numeric, it will output the GIF by first sorting on condition in an ascending manner. In our example, the output will start from negative two and end at two. The file will be saved and its name can be altered using filename parameter (default: tg_animation.gif).

create_tg_animation(
  tg_data,
  proportion_type = "condition",
  dc_column = "dc",
  ac_column = "ac",
  condition_column = "valence",
  filename = "example_gif.gif"
)