I'm trying to track down a function/recipe for generating a multivariate
scatter plot. I'm thinking of something similar to what you get in R if
you call plot on a multivariate data frame:
http://mt11.quickshareit.com/share/rplotb1a70.pdf
Is there anything obvious here? It seems like something that would get a
lot of use, for exploring large datasets, etc.
Thanks,
cf
Chris Fonnesbeck wrote:
I'm trying to track down a function/recipe for generating a multivariate scatter plot. I'm thinking of something similar to what you get in R if you call plot on a multivariate data frame:
http://mt11.quickshareit.com/share/rplotb1a70.pdf
Yes, that would be really useful. I started something
in PyX awhile back (below, MIT license). Not beautiful, but
functions. Please post if you develop something nice.
Alan
import numpy as np
from pyx import canvas, graph
data = np.random.random((3,10))
def scatter_plot_matrix(group,figwidth=18,hsep=1,vsep=1):
g_len = len(group)
subplot_size = (figwidth - (g_len-1)*hsep)/g_len
c = canvas.canvas()
g_id = range(g_len)
xlinks = []
for yi in g_id[::-1]:
for xi in g_id:
xseries = group[xi]
yseries = group[yi]
if xi == 0:
ylinkaxis = None
else:
ylinkaxis = graph.axis.linkedaxis(ylink.axes["y"])
if yi == g_len-1:
xlinkaxis = None
else:
xlinkaxis = graph.axis.linkedaxis(xlinks[xi].axes["x"])
newgraph = c.insert(graph.graphxy(width=subplot_size, height=subplot_size,
xpos=(subplot_size+hsep)*xi,
ypos=(subplot_size+vsep)*(g_len-1-yi),
x = (xlinkaxis or graph.axis.linear()),
y = (ylinkaxis or graph.axis.linear()),
)
newgraph.plot(graph.data.list(zip(xseries,yseries), x=1, y=2))
if xi == 0:
ylink = newgraph
if yi == g_len -1:
xlinks.append( newgraph )
return c
test1 = scatter_plot_matrix(data)
test1.writeEPSfile("c:/temp/temp.eps")