Using the GP tools and python it is possible to dynamically create a graph in ArcMap but how can I display the graph to the user?
Regardless of how the graph is made, either manually or via a script, I think you still have to open the graph in ArcMap.
View / Graph and then pick it.
If you are creating the graph using arcpy / python, is this happening within an open ArcMap mxd?
Yes it is possible. It's probably not as straight-forward as you might be expecting though. For our implementation(s), we employ the matplotlib library to generate our graphs, save as .png and then populate File Geodatabase(s) as attachments to their related FeatureClasses.
I couldn't really begin to post up any code examples unless you have something specific in mind. Post up an example of your data.
Workflow would be as follows. User has an ArcMap document open in which a NetCDF Raster layer is visible. The user clicks on a location to view how a variable changes over time or levels. All the steps can be scripted using python, GP tools and a graph template except for the final step of displaying the graph to the user. Am I missing something?
Here's a short example using matplotlib (although there are probably far better examples found with a quick Google search or on Stack Overflow).
Sample data:
H:\GraphData.csv
Month Values
0 1 2.0228
1 2 2.0229
2 3 2.0231
3 4 2.0232
4 5 2.0233
5 6 2.0234
6 7 2.0235
7 8 2.0236
8 9 2.0237
9 10 2.0237
10 11 2.0238
11 12 2.0239
12 13 2.0240
13 14 2.0241
14 15 2.0243
15 16 2.0244
16 17 2.0247
17 18 2.0247
18 19 2.0248
19 20 2.0249
20 21 2.0250
21 22 2.0250
22 23 2.0252
23 24 2.0253
py Code:
import pandas as pd from pandas import * import matplotlib.pyplot as plt data = r'H:\GraphData.csv' df = pd.io.parsers.read_table(data, sep=',') xs = df.Month ys = df['Values'] min = df['Month'].min() max = df['Month'].max() fig = plt.figure() ax = "ax" + str(211) ax = fig.add_subplot(211, axisbg='white') ax.plot(xs, ys, linestyle='-', marker='', linewidth=1, color='blue', label=str('Graph Test')) plt.savefig(r'H:\GraphData.png', dpi=600) plt.close() del fig
I posted a document a while ago with an example of creating a profile graph with matplotlib:
Using Python and matplotlib to create profile graphs
Dan Patterson has some valuable posts on this topic too:
Collections in numpy: producing frequency distributions and graphingand X-Y graphing demo using pyplot (matplotlib)...an introduction