2013-07-01 3 views
0

Мне нужно создать итоговую диаграмму одного параметра для каждой записи в моей базе данных. Используя приведенный ниже код, мне удалось создать подзадачу для каждой записи (5 в тестовой базе данных, базе геоданных ArcGIS 10.0, Python 2.6.5, Matplotlib 1.0.0), но каждый подзаголовок идентичен. В моей попытке идентифицировать правильный синтаксис я искал в форумах примеры итоговых графиков/отчетов, синтаксиса подзаголовков и циклов. Я ожидаю, что моя проблема не соответствует синтаксису цикла, так как я рисую все записи на сюжет, а не желаемую запись за каждый сюжет. После того, как я разрешу эти основные проблемы с построением, я планирую расширить сферу моего кода, чтобы включить 10-15 параметров на каждый сюжет, всего 3-4 сюжета и некоторую общую итоговую информацию, всего на одной странице pdf на запись. Я работаю с несколькими тысячами записей.matplotlib summary plot per record

Это мое первое сообщение о переполнении стека. Этот форум был чрезвычайно полезным для меня ресурсом в течение последнего года. Я новичок в python и совершенно новый для использования matplotlib, но я вижу огромный потенциал языка и этой библиотеки. Любая помощь или предложения очень ценятся!

import arcpy 
import os 
import matplotlib 
import matplotlib.pyplot as plt 

#Variables 
FC = arcpy.GetParameterAsText(0) #feature class 
P1_fld = arcpy.GetParameterAsText(1) #score field to chart 
P2_fld = arcpy.GetParameterAsText(2) #score field to chart 
plt.subplots_adjust(hspace=0.4) 
nsubp = int(arcpy.GetCount_management(FC).getOutput(0)) #pulls n subplots from FC 
last_val = object() 

#Sub-plot loop 
cur = arcpy.SearchCursor(FC, "", "", P1_fld) 
for row in cur: 
    x=1 
    y=row.getValue(P1_fld) 
    if row.OBJECTID != last_val: 
     for i,v in enumerate(xrange(nsubp)): 
      v = v+1 
      i = i+1 
      ax = plt.subplot(nsubp,1,v) # Create a subplot. 
      ax.scatter(x,y,s=5,color='blue'); # Generate the Scatter Plot. 
      oid = str(row.getValue('OBJECTID')) 
      figPDf = r"filepath.pdf" # Save the Scatter Plot to PDF. 
      plt.savefig(figPDf) 
del row, cur 
os.startfile("filepath.pdf") 
+0

Объединение для I, V в Перечислять (xrange (nsubp)): с V = + 1 и я = я + 1 кажется, что проблемы – doctorlove

+0

Это происходит потому, что вы используете двойной 'for' цикл: вы строят все параметры для каждой итерации (т. е. для каждого подзаголовка). – hooy

ответ

0

Это происходит потому, что у вас есть два вложенных for петли: первые итерации цикла по каждому row, в то время как второй цикл делает график рассеяния появляются на каждый сюжетные. Это, в свою очередь, означает, что каждый построенный параметр появится на каждом подзаголовке. Чтобы этого избежать, вам следует избегать двойного цикла for.

Я не уверен, что я точно понимаю, чего вы хотите достичь, но это должно по крайней мере помочь вам.

import arcpy 
import os 
import matplotlib 
import matplotlib.pyplot as plt 

#Variables 
FC = arcpy.GetParameterAsText(0) #feature class 
P1_fld = arcpy.GetParameterAsText(1) #score field to chart 
P2_fld = arcpy.GetParameterAsText(2) #score field to chart 
plt.subplots_adjust(hspace=0.4) 
nsubp = int(arcpy.GetCount_management(FC).getOutput(0)) #pulls n subplots from FC 
last_val = object() 

#Sub-plot loop 
cur = arcpy.SearchCursor(FC, "", "", P1_fld) 
i = 0 
x = 1 
for row in cur: 
    y = row.getValue(P1_fld) 
    if row.OBJECTID != last_val: 
     i += 1 
     ax = plt.subplot(nsubp, 1, i) # Create a subplot. 
     ax.scatter(x, y, s=5, color='blue'); # Generate the Scatter Plot. 
     oid = str(row.getValue('OBJECTID')) 
     figPDf = r"filepath.pdf" # Save the Scatter Plot to PDF. 
     plt.savefig(figPDf) 
del row, cur 
os.startfile("filepath.pdf") 
+0

Вы совершенно правы. Проблема с двойными циклами. Когда я удалил второй цикл и включил ваши изменения, 5 графиков отображали только одно значение записи. Чтобы получить каждое значение записи для построения самостоятельно, мне также нужно было удалить инструкцию if if.OBJECTID и выделить все ниже. Теперь скрипт дает мне уникальный сюжет для каждой записи, и это то, что мне нужно. Большое спасибо, нордев! – gamarra