Trouble Rotating Coordinate System

First post here: hello, hi, howdy!

I have a script which is designed to give the coordinates for solar system objects, but it outputs based on a coordinate system which has the Z-axis running parallel to Earth’s tilt and I’d like to use the ecliptic coordinate system. Now I programmed in a function to rotate the coordinates, but I’m assuming there’s a functionality similar to this built into Astropy and I may have missed it. Here is my code:

# Import
from astropy.coordinates import solar_system_ephemeris, get_body_barycentric, ICRS, PrecessedGeocentric
from astropy.time import Time
import astropy.units as u
import numpy as np

# Set Variables
start_date = '2023-12-25 00:00:00'
target_body = 'earth'
target_step_unit = 'day'
target_duration = 72
target_step_size = 6
cap = True

# Get Positions Function
def get_positions(body, start, duration, step_size, step_unit, if_cap):

    # Reformat Start Time
    start_time = Time(start, scale='tdb')

    # Time Mapping
    unit_mapping = {
        'second': u.second,
        'minute': u.minute,
        'hour': u.hour,
        'week': u.week,
        'year': u.year,
        'year_sidereal': 365.25636 *

    # Set Steps and Duration
    step_duration = step_size * unit_mapping[step_unit]
    total_duration = duration * unit_mapping[step_unit]
    num_steps = int(total_duration / step_duration) + (1 if if_cap else 0)

    # Initialize Array
    positions = []

    # Set the Ephemeris to Heliocentric
    with solar_system_ephemeris.set('builtin'):
        for step in range(num_steps):

            # Calculate Current Step Time
            current_time = start_time + step * step_duration

            # Get Body Position - Heliocentric Frame
            body_position = get_body_barycentric(body, current_time)

            # Extract the XYZ Coordinates
            xyz_km = np.array([,

            # Rotate the Coordinate System (Earth Tilt)
            xyz_rotated = rotate_coordinates(xyz_km, -23.4393)
            x_rotated, y_rotated, z_rotated = [u.Quantity(coord, for coord in xyz_rotated]

            # Append the rotated position as a tuple
            positions.append((current_time, (x_rotated, y_rotated, z_rotated)))

    return positions

# Rotate System Function
def rotate_coordinates(coords, angle_deg):

    # Convert Degrees to Radians
    angle_rad = np.radians(angle_deg)

    # Rotation Matrix Around the X-axis
    rotation_matrix = np.array([
        [1, 0, 0],
        [0, np.cos(angle_rad), -np.sin(angle_rad)],
        [0, np.sin(angle_rad), np.cos(angle_rad)]

    # Apply the Rotation
    return, coords)

# Run: Retrieve Positions
target_positions = get_positions(

# Rounding and Display
for time, pos in target_positions:
    x = f"{pos[0].value:.2f}"
    y = f"{pos[1].value:.2f}"
    z = f"{pos[2].value:.2f}"

    print(f"Time: {time.iso}, X: {x} km, Y: {y} km, Z: {z} km")

Thank you!