4 votos

¿La función ArcPy Graph crea una salida gráfica vacía?

Antecedentes: Tengo un código de python que necesito ayuda con el paso de parámetros a la función de arcpy MakeGraph_management. Me gustaría crear un gráfico de líneas verticales de dos series para cada par de clases de características de puntos de entrada utilizando la función 'zip' (es decir, input fgdb1/fc1 y fgdb2/fc1 >> MakeGraph >> graph1.png; input fgdb1/fc2 y fgdb2/fc2 >> MakeGraph >> graph2.png, ...).

Mi problema: Ahora estoy tratando de crear gráficos en lote utilizando ArcPy /python 2.7.3, pero han estado luchando con la forma en que estas funciones ArcPy trabajan alrededor del archivo de plantilla. He creado una plantilla de gráfico en ArcGIS 10.2 con todo configurado (etiquetas de los ejes, títulos, pies de página, nombres de las leyendas, etc.) Sólo necesito conseguir que la entrada de datos funcione para que se corresponda con Series1 y Series2.

El código que se muestra a continuación itera con éxito y crea gráficos para cada par de conjuntos de datos de entrada según lo previsto. Sin embargo, los gráficos no contienen datos trazados. Pensé que podría utilizar simplemente MakeGraph_management y SaveGraph_management ya que tengo una plantilla en lugar de trabajar también con la clase ArcGIS Graph.

mock transect graph, no data

Mi código:

# Import system modules
import arcpy
from arcpy import env

# enable overwrite outputs
arcpy.env.overwriteOutput = True

# input feature directory: yr0_transects
dir_yr0_transects = r"W:\Working\abcdefg_working\PointDistance\data\point_distance\year0\output\output_year0.gdb"

# input feature directory: yr1_transects
dir_yr1_transects = r"W:\Working\abcdefg_working\PointDistance\data\point_distance\year1\output\output_year1.gdb"

# output directory
outWorkspace = r"W:\Working\abcdefg_working\Profiles"

# Create list of year 0 Transect features
arcpy.env.workspace = dir_yr0_transects
yr0_transects_list = sorted(arcpy.ListFeatureClasses())

# Create list of year 1 Transect features
arcpy.env.workspace = dir_yr1_transects
yr1_transects_list = sorted(arcpy.ListFeatureClasses())

# Set workspace
arcpy.env.workspace = r"W:\Working\abcdefg_working\Profiles"

# Set local variables
graph_tee = r"W:\Working\abcdefg_working\Profiles\Profile_graph_template.tee"

for yr0_transect, yr1_transect in zip(yr0_transects_list, yr1_transects_list):
    try:
        #Cast to string because ListFC() returns unicode.
        string_yr0_transect = str(yr0_transect)
        string_yr1_transect = str(yr1_transect)

        # create title for graph
        graph_title = "Profiles, B.F.E." + string_yr0_transect[0:17] + string_yr0_transect[47:]

        # Create the graph object
        graph = arcpy.Graph()

        # Add a vertical bar series to the graph
        graph.addSeriesLineVertical(yr0_transect)
        graph.addSeriesLineVertical(yr1_transect)

        # Specify the title of the Graph
        graph.graphPropsGeneral.title = graph_title

        # Create graph output name
        output_graph_name = string_yr0_transect[0:17] + string_yr0_transect[47:] + "_profile" + ".png"

        # Output a vertical line graph, which is created in-memory
        arcpy.MakeGraph_management(graph_tee, graph, "temp_graph")

        #Execute SaveGraph
        mygraph = arcpy.SaveGraph_management("temp_graph", output_graph_name, "MAINTAIN_ASPECT_RATIO", "1024", "768")

        del mygraph

    except:
        print arcpy.GetMessages()

4voto

user7085 Puntos 11

Después de una enorme cantidad de tiempo depurando, resolví el problema. Los fc's almacenados en cada lista de arcpy.ListFeatureClass() deben convertirse primero en una capa de características (arcpy.MakeFeatureLayer) en memoria antes de ser pasados a las funciones arcpy.Graph(), arcpy.MakeGraph, y finalmente arcpy.SaveGraph.

Palabra de sabiduría: Otra nota relacionada para crear un gráfico con múltiples series. Esto debería ser algo de sentido común, pero el orden importa cuando se agregan series usando la clase arcpy.graph(). Dependiendo del orden en que agregues los datos a una plantilla de gráfico de ArcGIS, si reordenas las series de datos con fines de visualización antes de guardar la plantilla, todas las series deben agregarse en el mismo orden en tu código o de lo contrario la configuración del gráfico se aplicará a otras series. Una forma fácil de comprobarlo es abrir su archivo de plantilla *.tee y buscar la sección inferior donde se enumeran los parámetros de las series. El archivo *.tee se leerá de arriba a abajo, por lo que la primera entrada de la serie encontrada (no necesariamente la serie#1 si se reordenó en la plantilla antes de guardar) debe ser la primera serie que se añade a la clase graph(), luego la siguiente encontrada, y así sucesivamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X