title: Plotting projected data in other projectons using cartopy
body: <p>This question is in regards to plotting some data I have that uses the Lambert Conformal (LCC) CRS. While these questions specifically pertain to plotting LCC data in multiple projections, it also applies to the use of cartopy in general in that I would like to better understand the logic/process of plotting using cartopy.</p>
  
  <p>Below are some code examples of what I am trying to do. The first example is simply plotting some LCC data. The data I used are available in the link <a href="https://1drv.ms/u/s!Als9AH3QEmzgbQJ6CXn4URdMbCo" rel="noreferrer">here</a>.</p>
  
  <pre><code>import cartopy.crs as ccrs
  import cartopy.feature as cf
  import matplotlib.pyplot as plt
  import numpy as np
  
  proj = ccrs.LambertConformal(central_latitude = 25, 
                               central_longitude = 265, 
                               standard_parallels = (25, 25))
  
  # Data and coordinates (from download link above)
  with np.load('nam_218_20120414_1200_006.npz') as nam:
     dat = nam['dpc']
     lat = nam['lat']
     lon = nam['lon']
  
  ax = plt.axes(projection = proj)
  ax.pcolormesh(lon, lat, dat, transform = ccrs.PlateCarree())
  ax.add_feature(cf.NaturalEarthFeature(
                 category='cultural',
                 name='admin_1_states_provinces_lines',
                 scale='50m',
                 facecolor='none'))
  ax.coastlines('50m')
  ax.add_feature(cf.BORDERS)
  plt.show()
  </code></pre>
  
  <p>The plot produced can be seen here:</p>
  
  <p><strong>US Dewpoints on LCC Map</strong></p>
  
  <p><img src="https://i.stack.imgur.com/HVIyo.png" alt=""></p>
  
  <p>My first confusion when using cartopy was why I always have to transform to <code>PlateCarree</code> when plotting? My initial thought was the <code>transform</code> keyword of the <code>pcolormesh</code> call needed the LCC projection information and not <code>PlateCarree</code>.</p>
  
  <p>Next, if I want to plot my LCC data in another projection, e.g. Orthographic, would I go about doing so like below?</p>
  
  <pre><code># First, transform from LCC to Orthographic
  transform = proj.transform_points(ccrs.Orthographic(265,25), lon, lat)
  x = transform[..., 0]
  y = transform[..., 1]
  
  ax = plt.axes(projection = ccrs.Orthographic(265,25))
  ax.pcolormesh(x, y, dat, transform = ccrs.PlateCarree())
  ax.add_feature(cf.NaturalEarthFeature(
                 category='cultural',
                 name='admin_1_states_provinces_lines',
                 scale='50m',
                 facecolor='none'))
  ax.coastlines('50m')
  ax.add_feature(cf.BORDERS)
  ax.set_global()
  </code></pre>
  
  <p>The plot produced can be seen here:</p>
  
  <p><strong>US Dewpoints on Orthographic Map</strong></p>
  
  <p><img src="https://i.stack.imgur.com/VK2uP.png" alt=""></p>
  
  <p>I think the Orthographic map looks right, but I'd like to be sure that I understand the process of re-projection with cartopy correctly.</p>
  
  <p>In summary, I would like to know the following things:</p>
  
  <ol>
  <li>Do you always have to <code>transform</code> to <code>PlateCarree</code> when plotting? Why or why not?</li>
  <li>Does re-projecting simply require a call to the <code>transform_points</code> method or are there other steps involved?</li>
  </ol>
  
  <p><strong>Update 1</strong></p>
  
  <p>Based on the answer from <a href="https://stackoverflow.com/users/2177413/swatchai">@swatchai</a>, it seems as though the answer to my Question 2 is that <code>transform_points</code> is not required. One can simply use the <code>transform</code> keyword argument in many matplotlib plotting methods. This is what I thought originally. However, skipping the <code>transform_points</code> has not worked for me. See example below:</p>
  
  <pre><code>ax = plt.axes(projection = ccrs.Orthographic(265,25))
  ax.pcolormesh(lon, lat, dat, transform = proj)
  ax.add_feature(cf.NaturalEarthFeature(
                 category='cultural',
                 name='admin_1_states_provinces_lines',
                 scale='50m',
                 facecolor='none'))
  ax.coastlines('50m')
  ax.add_feature(cf.BORDERS)
  ax.set_global()
  </code></pre>
  
  <p>Which produces this plot: </p>
  
  <p><strong>Orthographic Plot Without transform_points Step</strong></p>
  
  <p><img src="https://i.stack.imgur.com/hnBZ0.png" alt=""></p>
  
  <p>The problem appears to be that the lat and lon input does not get transformed into the grid coordinates so they only get plotted in an extremely small area of the plot. So, to expand upon Question 2, if you are supposed to skip <code>transform_points</code> is there a bug in cartopy's plotting methods based on my above example? Or am I still missing a step?</p>