Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a 4d plot using Python with matplotlib

Tags:

I am looking for a way to create four-dimensional plots (surface plus a color scale) using Python and matplotlib. I am able to generate the surface using the first three variables, but I am not having success adding the color scale for the fourth variable. Here is a small subset of my data below. Any help would be greatly appreciated. Thanks

Data Subset

var1    var2    var3    var4
10.39   73.32   2.02    28.26
11.13   68.71   1.86    27.83
12.71   74.27   1.89    28.26
11.46   91.06   1.63    28.26
11.72   85.38   1.51    28.26
13.39   78.68   1.89    28.26
13.02   68.02   2.01    28.26
12.08   64.37   2.18    28.26
11.58   60.71   2.28    28.26
8.94    65.67   1.92    27.04
11.61   59.57   2.32    27.52
19.06   74.49   1.69    63.35
17.52   73.62   1.73    63.51
19.52   71.52   1.79    63.51
18.76   67.55   1.86    63.51
19.84   53.34   2.3     63.51
20.19   59.82   1.97    63.51
17.43   57.89   2.05    63.38
17.9    59.95   1.89    63.51
18.97   57.84   2       63.51
19.22   57.74   2.05    63.51
17.55   55.66   1.99    63.51
19.22   101.31  6.76    94.29
19.41   99.47   6.07    94.15
18.99   94.01   7.32    94.08
19.88   103.57  6.98    94.58
19.08   95.38   5.66    94.14
20.36   100.43  6.13    94.47
20.13   98.78   7.37    94.47
20.36   89.36   8.79    94.71
20.96   84.48   8.33    94.01
21.02   83.97   6.78    94.72
19.6    95.64   6.56    94.57
like image 307
Chris Avatar asked Oct 21 '11 20:10

Chris


People also ask

Can matplotlib do 3D graphs?

In order to plot 3D figures use matplotlib, we need to import the mplot3d toolkit, which adds the simple 3D plotting capabilities to matplotlib. Once we imported the mplot3d toolkit, we could create 3D axes and add data to the axes. Let's first create a 3D axes.

How do you visualize 4 dimensional data?

Visualize 4-D Data with Multiple Plots You can use the plotmatrix function to create an n by n matrix of plots to see the pair-wise relationships between the variables. The plotmatrix function returns two outputs. The first output is a matrix of the line objects used in the scatter plots.


1 Answers

To create the plot you want, we need to use matplotlib's plot_surface to plot Z vs (X,Y) surface, and then use the keyword argument facecolors to pass in a new color for each patch.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

# create some fake data
x = y = np.arange(-4.0, 4.0, 0.02)
# here are the x,y and respective z values
X, Y = np.meshgrid(x, y)
Z = np.sinc(np.sqrt(X*X+Y*Y))
# this is the value to use for the color
V = np.sin(Y)

# create the figure, add a 3d axis, set the viewing angle
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(45,60)

# here we create the surface plot, but pass V through a colormap
# to create a different color for each patch
ax.plot_surface(X, Y, Z, facecolors=cm.Oranges(V))

enter image description here

like image 200
James Avatar answered Oct 12 '22 23:10

James