2016-08-24 13 views
0

Ich versucheFor-Schleife auf Plotly Python

fig.append_trace(trace1, 1, 1) 
fig.append_trace(trace2, 2, 1) 

mit der for-Schleife

totalPlot = 2 
x = ['trace%s'%(item + 1) for item in range(totalPlot)] 
y = [(item + 1) for item in range(totalPlot)] 
z = totalPlot * [1] 

for i, j, k in zip(x, y, z): 
    fig.append_trace(i, j, k) 

Code zu ersetzen, so dass sie besser skalierbar sein wird, wie ich mehr Zahlen addieren. Der Schleifencode wird jedoch immer zurückgegeben. 'TypeError:' str '-Objekt unterstützt keine Elementzuweisung'. Was habe ich falsch gemacht? Hier

ist der Code, ähnlich dem einer von Plotly:

from plotly import tools 
import plotly.plotly as py 
import plotly.graph_objs as go 

trace1 = go.Scatter(
    x=[1, 2, 3], 
    y=[4, 5, 6] 
) 
trace2 = go.Scatter(
    x=[20, 30, 40], 
    y=[50, 60, 70], 
) 

fig = tools.make_subplots(rows=2, cols=1) 


# ----- Loop here ------- START 
fig.append_trace(trace1, 1, 1) 
fig.append_trace(trace2, 2, 1) 
# ----- Loop here ------- END 

fig['layout'].update(height=600, width=600, title='i <3 subplots') 
py.iplot(fig, filename='make-subplots') 
+0

Genau welche Zeile gibt Ihnen einen Fehler? Der Fehler ''TypeError:' str '-Objekt unterstützt keine Elementzuweisung'' tritt auf, wenn Sie versuchen, ein Zeichenfolgenobjekt an Ort und Stelle zu ändern (z. B. ein Zeichen ändern). Zeichenfolgen sind unveränderlich, so dass Sie nicht "ändern" können eine, aber Sie können eine geänderte Kopie machen. –

+0

@ Maschine Sehnsucht: Diese Zeile gibt mir die TypeError: 'fig.append_trace (i, j, k)' – Fxs7576

Antwort

1

In diesem Code es wie trace1 aussieht ist eine Art von Array-ähnliche Datenstruktur:

trace1 = go.Scatter(
    x=[1, 2, 3], 
    y=[4, 5, 6] 
) 

Also ich mir vorstellen, dass Wenn Sie fig.append_trace(trace1, 1, 1) aufrufen, wird dieser Array-ähnlichen Struktur ein Element hinzugefügt, der erste Parameter.

jedoch in Ihrer Neuimplementierung, haben Sie die Trace-Daten in einen String gedreht:

x = ['trace%s'%(item + 1) for item in range(totalPlot)] 
... 
for i, j, k in zip(x, y, z): 
    fig.append_trace(i, j, k) 

Hier i ist ein Element der x, die eine Zeichenfolge wie 'trace%s'%(item + 1) wiederum ist. Sie können jedoch kein Element an eine Zeichenfolge anhängen. Python-Strings sind unveränderbar. Wenn Sie also append_trace aufrufen, erhalten Sie natürlich einen Fehler, weil Sie nicht in der Lage sind, mit Strings das zu tun, was Sie wollen.

+0

Ich sehe. Ich werde das x fixieren und es zu einem Array machen. Vielen Dank für die Erklärung. :) – Fxs7576

+0

Oder, 'x' ist schon ein Array. Was Sie wahrscheinlich tun müssen, ist sicherzustellen, dass jedes Element von 'x' ein' go.Scatter'-Objekt ist, anstelle einer Zeichenkette. –