2017-08-29 3 views
0

Je souhaite afficher un jeu de données de 1000 float, j'ai décidé de le faire avec intrigue, et je veux le faire hors ligne, je suis dans un problème que je peux vraiment Je ne comprends pas - je ne sais tout simplement pas ce que je fais de mal du tout.plotly, ne montrant pas les coordonnées avec le jeu de données np.array

Passons au code. D'abord je vais montrer que le code devrait fonctionner, avec une petite np.array

import numpy as np 
import plotly as py 
import plotly.graph_objs as go 

list = [1.2,2.3,3.3,4.4,5.4,6.4] 
x_data = np.array(list) 
y_data = np.array(list) 

#x_data = np.array(graph_test_q()) 
#y_data = np.array(graph_test_h()) 

trace = go.Scatter(
    x = x_data, 
    y = y_data, 
) 

data = [trace] 
fig = dict(data=data) 
py.offline.plot(fig, filename='hejsa.html') 
print data 

La sortie du code ci-dessus: Output of small np.array semble fonctionner très bien, mais: est sous le code, où je l'utilise un np.array créé à partir d'une fonction, qui l'extrait d'une base de données postgrSQL. J'ai vérifié, et il imprime les données dans le terminal.

def graph_test_q(): 
    conn = psycopg2.connect("dbname='database1' user='postgres'  password='FFgg1905560' host='localhost' port='5432'") 
    cur = conn.cursor() 
    cur.execute("SELECT q FROM pump_data_test WHERE pump_id = 1229") 
    rows = cur.fetchall() 
    conn.commit() 
    conn.close() 
    return rows 

def graph_test_h(): 
    conn = psycopg2.connect("dbname='database1' user='postgres' password='FFgg1905560' host='localhost' port='5432'") 
    cur = conn.cursor() 
    cur.execute("SELECT h FROM pump_data_test WHERE pump_id = 1229") 
    rows = cur.fetchall() 
    conn.commit() 
    conn.close() 
    return rows 

#list = [1.2,2.3,3.3,4.4,5.4,6.4] 
#x_data = np.array(list) 
#y_data = np.array(list) 

x_data = np.array(graph_test_q()) 
y_data = np.array(graph_test_h()) 

trace = go.Scatter(
    x = x_data, 
    y = y_data, 
) 

data = [trace] 
fig = dict(data=data) 
py.offline.plot(fig, filename='hejsa.html') 
print data 

Maintenant, voici ce que je trouve étrange, la sortie de ces nouveaux np.arrays est vide ce graphique: enter image description here

Lorsque je clique sur le lien dans le coin inférieur droit - « exportation à tracer .ly "ceci est maintenant la sortie que je reçois: enter image description here Ici, je peux voir voir le graphique sur la gauche, tout comme il est censé être. Je serais très apprécié si quelqu'un peut m'aider à découvrir ce que je fais mal.

EDIT: D'après les commentaires: Code pour montrer dtypes de x_data & y_data (x_data = np.array (graph_test_q()) & y_data = np.array (graph_test_h())):

print(x_data.dtype) 
print(y_data.dtype) 

sortie :

float64

float64

0:96: erreur d'exécution: "file: //hejsa.html" ne comprend pas le message "open location". (-1708) 70:78: erreur d'exécution: Impossible d'obtenir l'application "firefox". (-1728) * Fonctionnant sur http://127.0.0.1:5000/ (Appuyez sur CTRL + C pour quitter)

+0

Pouvez-vous ajouter la sortie de 'impression (x_data.dtype)'? Je soupçonne que vous récupérez un tableau de chaînes et de chiffres qui confond Plotly. –

+0

oui ofc. modifier inc – Rook

+0

Il semble que ce soit le même type – Rook

Répondre

0

fetchall retourne tuples, si vous vous retrouvez avec un tableau Numpy qui a une forme de (n, 1) où n est le nombre de résultats. Vous pouvez obtenir les données dans le format correct pour Plotly en utilisant l'index suivant:

np.array(graph_test_q())[:,0] 

Voir ci-dessous pour une démonstration complète.

import plotly 
import numpy as np 
import random 
import sqlite3 

def graph_test_q(): 
    cur = conn.cursor() 
    cur.execute("SELECT q FROM pump_data_test WHERE pump_id = 1229") 
    rows = cur.fetchall() 
    return rows 

def graph_test_h(): 
    cur = conn.cursor() 
    cur.execute("SELECT h FROM pump_data_test WHERE pump_id = 1229") 
    rows = cur.fetchall() 
    return rows 

plotly.offline.init_notebook_mode() 

# Create some mockup data 
conn = sqlite3.connect(':memory:') 
c = conn.cursor() 
c.execute("CREATE TABLE pump_data_test (h, q, pump_id)") 
for i in range(10): 
    c.execute("INSERT INTO pump_data_test VALUES ('{}','{}',1229)".format(i, i + random.random())) 
conn.commit() 

trace1 = plotly.graph_objs.Scatter(
    name='works', 
    x=np.array(graph_test_q())[:,0], 
    y=np.array(graph_test_h())[:,0], 
) 
trace2 = plotly.graph_objs.Scatter(
    name='does not work', 
    x=np.array(graph_test_q()), 
    y=np.array(graph_test_h()), 
) 

data = [trace1, trace2] 
fig = dict(data=data) 
plotly.offline.iplot(fig) 

enter image description here

+0

Génial, ça marche. Donc, le [:, 0] découpe le tableau? – Rook

+0

Il donne l'index '0': https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html –