Buongiorno a tutti
sono nuova e soprattutto da poco tempo sto usando python per creare grafici.
Ho la necessità di creare due plot sovrapposti di dati (dati che leggo da due differenti files di testo) e fare un fit lineare su entrambi, con una legenda che riporti i valori del fit medesimo.

I dati sono stati scritti in due files diversi semplicemente perché un set ha più dati dell'altro e, sebbene li plottasse, dava problemi col fit.

Ho dunque creato due set anche per il fit lineare. Vorrei scrivere nella legenda sia l'indicazione delle linee e dei punti (set 1, set 2, fit 1, fit 2) ma anche i valori del fit (che ottengo con
codice:
print(fit)
, ma solo in terminale).

I file di dati sono
grafico_data1.csv ---> 2 colonne 10 righe
grafico_data2.csv ---> 2 colonne 13 righe

Copio il codice: considerate che è una bozza, che ho fatto mille prove (quindi ci sono rimasugli di import che forse non servono), che sono alle prime armi per cui non è ottimizzato (e quindi faccio tesoro di ogni consiglio)

Grazie a chi potrà aiutarmi


codice:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook
import matplotlib.ticker as ticker
import pylab

from pylab import polyfit, poly1d
from numpy import *
from scipy import stats

# lettura dei dati dai due files
data = np.genfromtxt('/home/serena/Desktop/grafico1_data.csv', delimiter=',', names=['x', 'y'])
def read_datafile(file_name):
    data = np.loadtxt(file_name, delimiter=',', skiprows=10)
    return data

data2 = np.genfromtxt('/home/serena/Desktop/grafico1_data2.csv', delimiter=',', names=['z', 'w'])
def read_datafile(file_name):
    data2 = np.loadtxt(file_name, delimiter=',', skiprows=10)
    return data2

# definizione del plot
fig = plt.figure()
ax1 = fig.add_subplot(111)

# setting degli assi
ax1.set_title("titolo")    
ax1.set_xlabel('dati x')
ax1.set_ylabel('dati y')
ax1.plot(data['x'], data['y'], 'bs', label='simulation')
ax1.plot(data2['z'], data2['w'], 'y^', label='measured')

# setting della griglia
plt.grid(True)
tick_spacing_x= 0.1
tick_spacing_y= 0.2

ax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing_x))
ax1.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing_y))

# valori min e max degli assi
plt.xlim(0.2, 1)
plt.ylim(4.4, 6.4)

# linear fit dei due set
fit1 = polyfit(data['x'], data['y'], 1)
fit1_fn = poly1d(fit1)
plt.plot(data['x'],data['y'], ' ', data['x'], fit1_fn(data['x']), 'r-', label='lin fit simulation')

fit2 = polyfit(data2['z'], data2['w'], 1)
fit2_fn = poly1d(fit2)
plt.plot(data2['z'],data2['w'], ' ', data2['z'], fit2_fn(data2['z']), 'k-', label='lin fit measured')

# stampa in terminale dei parametri di fit
print(fit1, fit2)

# legenda (???)
pylab.legend(['simulation', 'measured', 'lin fit simulation', 'lin fit measured'])

# salvataggio dell'immagine del plot
plt.savefig('grafico1.png')

# visualizzazione del plot
plt.show()

ciao a tutti!

:: shmoo ::