I would set all of the charts to load through AJAX. Not only will the initial page load be instant, but the loading of the charts will essentially be asynchronous because multiple AJAX calls will be occurring simultaneously (it's not like having the charts load one at a time).
If the data for all 18 charts could be retrieved in a single query I would have suggested that, but since that is not the case there is no reason to block the whole page waiting for 18 stored procedures to run. Having the page load incrementally will improve its perceived performance.
Furthermore, if you expose the chart data through 18 different action methods, there would be additional benefits. For example, you can apply output caching at the action method level, caching certain charts for 15 minutes, other charts for an hour, etc.