Late answer, but better than never...
First of all I think you need one graduated style that matches all of your columns, i.e. if an attribute value ranges from 0 to 30 at the beginning and from 20 to 50 some periods later your style should cover values from 0 to 50 to make things comparable (and otherwise my approach does not work).
I have created a small table structured as follows:
As you can see values range from 5 to 35, so I create a style ranging from 0 to 40 in intervalls of 5:
Now in the layer properties where you select the column an expression is needed, that selects a different column e.g. each second:
(klick on the ε right to the column combo box)
Here is the expression in plain text:
when to_int(epoch(now()) / 1000) % 3 = 0 then "1970"
when to_int(epoch(now()) / 1000) % 3 = 1 then "1990"
when to_int(epoch(now()) / 1000) % 3 = 2 then "2010"
This counts the seconds (integer) since 1970, devides it by 3 and selects a column according to rest of the division. In other words, toggles the column every second. You may simply replace the
1000 for other time intervalls an the
3 according to your column count.
Note that the style does not refresh automatically, this can be achieved by a neat little python script that initializes a timer and calls a funtion that refreshes the layers every 1000 ms (you can directly type this in the editor of the python console):
timer = QTimer()
If you start this script (press play button in the editor) your animation will immediatly start.
The result can be seen here: https://www.youtube.com/watch?v=mMgiwJlEOxs