I have a large dataset that I am trying to present in 3D, hoping to discover a pattern. I spent quite a lot of time reading, researching and coding, but then I realized that the main problem is not programming, but actually choosing a way to visualize the data .
Matplotlib mplot3d offers many options (wireframe, outline, filled outline, etc.), as well as MayaVi. But there are so many options (and each with its own learning curve) that Iโm almost lost and donโt know where to start! So my question is, which charting method would you use if you had to deal with this data?
My data is based on date. For each point in time, I draw a value (list "Actual").
But for each point in time I also have an upper limit, a lower limit and a mid-range point. These limits and midpoints are based on seeds in different planes.
I want to define a point or define a pattern when, or before, serious changes have occurred in my "Actual" reading. This is when there are upper limits on all planes? Or approach each other? This is when the actual value relates to the upper / middle / lower limit? Is this when the Uppers in one plan touch the Lowers of another plane?
In the code I embed, I reduced the data set to a few elements. I just use simple scatter and line graphs, but due to the size of the dataset (and possibly the limitations of mplot3d?) I cannot use it to identify the trends I'm looking for.
dates = [20110101,20110104,20110105,20110106,20110107,20110108,20110111,20110112] zAxis0= [ 0, 0, 0, 0, 0, 0, 0, 0] Actual= [ 1132, 1184, 1177, 950, 1066, 1098, 1116, 1211] zAxis1= [ 1, 1, 1, 1, 1, 1, 1, 1] Tops1 = [ 1156, 1250, 1156, 1187, 1187, 1187, 1156, 1156] Mids1 = [ 1125, 1187, 1125, 1156, 1156, 1156, 1140, 1140] Lows1 = [ 1093, 1125, 1093, 1125, 1125, 1125, 1125, 1125] zAxis2= [ 2, 2, 2, 2, 2, 2, 2, 2] Tops2 = [ 1125, 1125, 1125, 1125, 1125, 1250, 1062, 1250] Mids2 = [ 1062, 1062, 1062, 1062, 1062, 1125, 1000, 1125] Lows2 = [ 1000, 1000, 1000, 1000, 1000, 1000, 937, 1000] zAxis3= [ 3, 3, 3, 3, 3, 3, 3, 3] Tops3 = [ 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250] Mids3 = [ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187] Lows3 = [ 1125, 1125, 1000, 1125, 1125, 1093, 1093, 1000] import matplotlib.pyplot from mpl_toolkits.mplot3d import Axes3D fig = matplotlib.pyplot.figure() ax = fig.add_subplot(111, projection = '3d') #actual values ax.scatter(dates, zAxis0, Actual, color = 'c', marker = 'o') #Upper limits, Lower limts, and Mid-range for the FIRST plane ax.plot(dates, zAxis1, Tops1, color = 'r') ax.plot(dates, zAxis1, Mids1, color = 'y') ax.plot(dates, zAxis1, Lows1, color = 'b') #Upper limits, Lower limts, and Mid-range for the SECOND plane ax.plot(dates, zAxis2, Tops2, color = 'r') ax.plot(dates, zAxis2, Mids2, color = 'y') ax.plot(dates, zAxis2, Lows2, color = 'b') #Upper limits, Lower limts, and Mid-range for the THIRD plane ax.plot(dates, zAxis3, Tops3, color = 'r') ax.plot(dates, zAxis3, Mids3, color = 'y') ax.plot(dates, zAxis3, Lows3, color = 'b') #These two lines are just dummy data that plots transparent circles that #occpuy the "wall" behind my actual plots, so that the last plane appears #floating in 3D rather than being pasted to the plot background zAxis4= [ 4, 4, 4, 4, 4, 4, 4, 4] ax.scatter(dates, zAxis4, Actual, color = 'w', marker = 'o', alpha=0) matplotlib.pyplot.show()
I get this plot, but it just doesn't help me see any relationship.
I'm not a mathematician or scientist, so I really need help choosing FORMAT to visualize my data. Is there an efficient way to show this in mplot3d? Or would you use MayaVis? In any case, which library and classes are you using?
Thanks in advance.