2014-09-13 14 views
9

Di seguito è riportato lo script python per generare un grafico utilizzando matplotlib.Generazione di un grafico a linee morbide mediante matplotlib

#!/usr/bin/python 

import matplotlib.pyplot as plt 
import time 
import numpy as np 
from scipy.interpolate import spline 

# Local variables 
x = [] 
y = [] 

# Open the data file for reading lines 
datafile = open('testdata1.txt', 'r') 
sepfile = datafile.read().split('\n') 
datafile.close() 

# Create a canvas to place the subgraphs 
canvas = plt.figure() 
rect = canvas.patch 
rect.set_facecolor('white') 

# Iterate through the lines and parse them 
for datapair in sepfile: 
    if datapair: 
     xypair = datapair.split(' ') 
     x.append(int(xypair[1])) 
     y.append(int(xypair[3])) 

# Define the matrix of 1x1 to place subplots 
# Placing the plot1 on 1x1 matrix, at pos 1 
sp1 = canvas.add_subplot(1,1,1, axisbg='w') 
sp1.plot(x, y, 'red', linewidth=2) 

# Colorcode the tick tabs 
sp1.tick_params(axis='x', colors='red') 
sp1.tick_params(axis='y', colors='red') 

# Colorcode the spine of the graph 
sp1.spines['bottom'].set_color('r') 
sp1.spines['top'].set_color('r') 
sp1.spines['left'].set_color('r') 
sp1.spines['right'].set_color('r') 

# Put the title and labels 
sp1.set_title('matplotlib example 1', color='red') 
sp1.set_xlabel('matplot x label', color='red') 
sp1.set_ylabel('matplot y label', color='red') 

# Show the plot/image 
plt.tight_layout() 
plt.grid(alpha=0.8) 
plt.savefig("example6.eps") 
plt.show() 

genera la trama come enter image description here

Sto cercando di generare un grafico LISCIO invece di linee, ma non è riuscito a raggiungere il risultato. Stavo cercando di seguire questo video: https://www.youtube.com/watch?v=uSB8UBrbMfk

Qualcuno può suggerirmi modifiche?

+1

Non hai fatto le cose che suggerisce il video. Ad esempio, guarda la parte che inizia intorno alle 3:20, dove crea versioni uniformi dei dati. – BrenBarn

+0

(a) non si definiscono x_smooth e y_smooth (b) quando si sta tentando di implementare un metodo numerico, astenersi dall'abbellire la trama nella prima implementazione iniziale, ovvero mantenere la grafica semplice o predefinita – Jagte

+0

Correlazione dell'esempio, i miei array x [] e y [] sono di natura dinamica (sto leggendo i dati dal file). Non so come usare np.array nello stesso modo. Nell'esempio video vengono utilizzati staticamente. – AnilJ

risposta

23

Ho ottenuto questo funzionamento! Grazie per i commenti. Ecco il codice aggiornato.

#!/usr/bin/python 

import matplotlib.pyplot as plt 
import time 
import numpy as np 
from scipy.interpolate import spline 

# Local variables 
x = [] 
y = [] 

# Open the data file for reading lines 
datafile = open('testdata1.txt', 'r') 
sepfile = datafile.read().split('\n') 
datafile.close() 

# Create a canvas to place the subgraphs 
canvas = plt.figure() 
rect = canvas.patch 
rect.set_facecolor('white') 

# Iterate through the lines and parse them 
for datapair in sepfile: 
    if datapair: 
     xypair = datapair.split(' ') 
     x.append(int(xypair[1])) 
     y.append(int(xypair[3])) 

x_sm = np.array(x) 
y_sm = np.array(y) 

x_smooth = np.linspace(x_sm.min(), x_sm.max(), 200) 
y_smooth = spline(x, y, x_smooth) 

# Define the matrix of 1x1 to place subplots 
# Placing the plot1 on 1x1 matrix, at pos 1 
sp1 = canvas.add_subplot(1,1,1, axisbg='w') 
#sp1.plot(x, y, 'red', linewidth=2) 
sp1.plot(x_smooth, y_smooth, 'red', linewidth=1) 

# Colorcode the tick tabs 
sp1.tick_params(axis='x', colors='red') 
sp1.tick_params(axis='y', colors='red') 

# Colorcode the spine of the graph 
sp1.spines['bottom'].set_color('r') 
sp1.spines['top'].set_color('r') 
sp1.spines['left'].set_color('r') 
sp1.spines['right'].set_color('r') 

# Put the title and labels 
sp1.set_title('matplotlib example 1', color='red') 
sp1.set_xlabel('matplot x label', color='red') 
sp1.set_ylabel('matplot y label', color='red') 

# Show the plot/image 
plt.tight_layout() 
plt.grid(alpha=0.8) 
plt.savefig("example6.eps") 
plt.show() 

La nuova trama ha questo aspetto.

enter image description here

Problemi correlati