Sample data:
data = {
{{2013, 1, 1}, 24.13, 167.67, 231.82},
{{2013, 1, 2}, 32.15, 170.92, 225.99},
{{2013, 1, 3}, 35.43, 172.68, 221.67},
{{2013, 1, 4}, 36.73, 173.05, 218.32},
{{2013, 1, 5}, 58.19, 165.96, 197.05},
{{2013, 1, 6}, 69.99, 163.50, 187.52},
{{2013, 1, 7}, 71.37, 154.21, 175.58},
{{2013, 1, 8}, 72.51, 149.66, 163.25}};
I want a DateListPlot
with three graphs, so for a matrix formed by columns 1 and 2, one for columns 1 and 3, and 1 for columns 1 and 4. At the moment I'm using this code:
data2 = Transpose[{data[[All, 1]], data[[All, 2]]}];
data3 = Transpose[{data[[All, 1]], data[[All, 3]]}];
data4 = Transpose[{data[[All, 1]], data[[All, 4]]}];
DateListPlot[{data2, data3, data4}, Joined -> True, Filling -> {3 -> {1}}]
but I have a hunch that this can be done more efficiently. I don't like the Transpose
s in particular. Any ideas?
edit (for extra credit)
What if I need to multiply the second column by 2, which in my solution is simply
data2 = Transpose[{data[[All, 1]], 2 * data[[All, 2]]}];
Answer
This method allows you to define arbitrary column indexes, not necessarily that orderly as you have. Just put them in the list:
iNeed = {{1, 2}, {1, 3}, {1, 4}};
then this will do the job and make a plot identical to yours:
DateListPlot[data[[All, #]] & /@ iNeed, Joined -> True, Filling -> {3 -> {1}}]
basically it does this but in a shorter way:
DateListPlot[{
data[[All, {1, 2}]],
data[[All, {1, 3}]],
data[[All, {1, 4}]]
}, Joined -> True, Filling -> {3 -> {1}}]
Comments
Post a Comment