Example scatter plot with R-square in Python with matplotlib & numpy

After a LOT of searching and testing, I’m going to settle once and for all with one software option to do my (sparse) statistical analysis: matplotlib.

I have a text file with two columns with numeric values I wish to plot and find a correlation coeficient (ie. R-Square). The following script does that and saves the plot to a PNG file.

The script reads columns from the file and stores them in two variables: x,y. Then, it calculates the R-square value. Then it plots the graph and places the R-square value somewhere in there, along with a textbox. Pretty easy and self-explanatory :)

import sys, numpy
from pylab import scatter, title, show , legend, text, savefig, xlim, ylim

# Data
data = open(sys.argv[1]).readlines()[1:] # first line is header

x, y = [], []

for line in data:
 x.append(float(line.split()[1])) # My file has 3 columns, I want to plot 2,3
 y.append(float(line.split()[2]))

# R-Square

correlation = numpy.corrcoef(x, y)[0,1]
rsq = correlation**2

# matplotlib plotting
title('cRMS Correlation')

scatter(x,y, marker='o', c='b',) # plot my data points

plot(x,x) # to add a x=y line

text(0.5, 2.0, r'$R^2$'+'Value = %0.4f' %rsq,
 horizontalalignment='center',
 verticalalignment='center')

xlim(xmin=0)
ylim(ymin=0)

#savefig('%s.png' %sys.argv[1].split('.')[0])
show() # Shows in the screen as well

4 thoughts on “Example scatter plot with R-square in Python with matplotlib & numpy

  1. mais ou menos.

    essa cena do python do “import soul” ainda me faz um bocado de confusão.

    Seja como for, disseste-me para reproduzir isso em gnuplot. Actualmente não tenho a informação na cabeça pois já se perdeu pelo caminho da minha aprendizagem :D

    Mas encontrei agora um link bastante poderoso sobre tutoriais em GNU Plot trabalhando com PNG terminal. Isto é, os gráficos são guardados em .png.

    Não sei se terá compatibilidade com post script. Eu na altura que trabalhei com o GNU Plot usei post script porque como é vectorial podes meter depois do tamanho que quiseres sem stresses.

  2. Hum… Uma coisa. Importa o show como parte do pylab e nao como matplotlib.pyplot.show.

    Aqui funcionou trocar o x pelo y! Se apagares as linhas a e b, estas a apagar 2 histogramas :D

    Tu quando fazes o hist(x, 100) ja estas a gerar o grafico pa (acho eu). Dai fazeres scatter(a), nao deve funcionar :x

    Percebeste?

  3. descobri agora cenas ali no script que fiz que não percebo :D

    nomeadamente porque é que se trocarmos x,y no scatter não funciona mais. e se apagarmos as linhas a = e b = dá uma cena diferente :D não consigo perceber porque é que aplicando a = hist(x,100) faz com que scatter(x) dê diferente. não deveria ser scatter(a)?

  4. Dude Altamente!!! Topa-me aqui só o script que lancei olhando para o teu post e para a página do matplotlib!!

    Isto foi aqui um improviso depois do almoço!!

    # -*- coding: iso-8859-15 -*-
    from pylab import scatter, randn, hist
    import matplotlib.pyplot as plt
    x = randn(10000)
    y = randn(10000)
    a = hist(x,100)
    b = hist(y,100)
    scatter(x,y, marker=’s’)
    plt.show()

    corre lá isso para veres o que te aparece!! Ehehe, epa, fiquei bués contente agora por tão pouco! :D foi o meu primeiro pyscript gráfico :D

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s