I have happily been using Beach() from obspy.imaging to plot focal mechanisms for strike, dip, rake. A colleague of mine is now working with a mt inversion program and needs to plot beachballs using the moment tensor components. She actually looked at the documentation before using it (a fatal mistake!), and noticed that it says:
Beach(fm, linewidth=2, facecolor='b', bgcolor='w', edgecolor='k', alpha=1.0, xy=(0, 0), width=200, size=100, nofill=False, zorder=100)
Return a beach ball as a collection which can be connected to an
current matplotlib axes instance (ax.add_collection).
S1, D1, and R1, the strike, dip and rake of one of the focal planes, can
be vectors of multiple focal mechanisms.
:param fm: Focal mechanism that is either number of mechanisms (NM) by 3
(strike, dip, and rake) or NM x 6 (Mxx, Myy, Mzz, Mxy, Mxz, Myz - the
six independent components of the moment tensor, where the coordinate
system is x,y,z = Up,South,East).
Which implies that the Cartesian coordinate moment tensor is expected as input. However, we have noticed that the plot appears to be correct only when the spherical coordinate moment tensor is used. Just to check I plotted several moment tensors from the Global CMT catalog, which are in spherical coordinates, and Beach() produces exactly what I see on the Global CMT web page.
We just want to make sure we're correct that Beach is expecting the spherical coordinate moment tensor (M_rr, M_thetatheta, etc.) and not the Cartesian one as implied in the documentation. Can anyone please let me know whether they have also found this?