Gyroscope - making sense out of the orientation numbers

I have successfully implemented the Gyroscope using the following:
let options: GyroscopeOptions = {
frequency: 1000
};

  this.gyroscope.getCurrent(options)
    .then((orientation: GyroscopeOrientation) => {
      console.log(orientation.x, orientation.y, orientation.z, orientation.timestamp);
      this.x = orientation.x;
      this.y = orientation.y;
      this.z = orientation.z;
    })
    .catch()


  this.gyroscope.watch(options)
    .subscribe((orientation: GyroscopeOrientation) => {
      console.log(orientation.x, orientation.y, orientation.z, orientation.timestamp);
      this.x1 = orientation.x;
      this.y1 = orientation.y;
      this.z1 = orientation.z;
    });

This generates the numbers that changes every second as expected. But I am not able to make sense out of these numbers. They change frequently even when I lay the phone on a stationary table. I am trying to calculate the phone orientation with respect to the North (True or Magnetic). I am using camera preview want to make sure it point in landscape mode directly at the face level (not facing up or down). I want to show data only at the face level. How do I make use of these Gyroscope numbers in determining the phone orientation with respect to the x, y or z axis or calculate roll, pitch and yaw?

Main question, what does x, y and z represent? Are they angular velocities or directions by radians or what? Why do they change when my phone is stationary?