I was planning for the Solar Eclipse in April 8th 2024 and noticed that at the time of totality at my location in Western NY, all 7 planets will be above the horizon. Earlier in the day it's all of them plus Pluto.

My question is how common is it for all the solar system planets to be above the horizon at the same time?

I believe the answer will come easier if atmospheric effects are ignored.

  • $\begingroup$ When you consider the orbital periods of just Uranus and Neptune at 84 and 164 years. As they chase each other around the Sun, they will spend hundreds of years on the same side of the solar system, followed by hundreds of years on opposite sides. Since they can at most be separated by 180deg, there is still always a time they're both above the horizon from Earth. When you add in a third object, like Pluto, then they all have to occupy the same 180deg arc, which will happen 50% of the time, but with gaps of many hundreds of years. $\endgroup$ Aug 6 at 18:03
  • $\begingroup$ I see, by picking Neptune and Uranus , you can say, there's hundreds of years where it's impossible for them both to be above the horizon at the same time. But even when it's possible, such as right now, you still need to consider other planets. For instance today at 9:06am, all but Saturn were up -- Saturn had just set at around 7:40. At 7:40 Mars had not quite risen yet. (I don't count Pluto) $\endgroup$
    – scm
    Aug 6 at 20:19
  • $\begingroup$ Hi scm. Can you clarify whether you are asking about this possibility? The 7 planets may be above the horizon but not visible because it is daytime. Is counting those times acceptable for you question? The reason I ask is because the answer from @eshaya is based on the planets being visible; that is, only nighttime hours are considered. That reduces the probability. $\endgroup$
    – JohnHoltz
    Aug 7 at 16:54
  • $\begingroup$ @JohnHoltz Sorry, since the background to the question is I noticed this occurring during totality -- which is daytime, I thought that would be clear. Also above the horizon is above the horizon, no matter the time of day. So my question has nothing to do with visual visibility, but position. $\endgroup$
    – scm
    Aug 7 at 19:32
  • $\begingroup$ Do you mean geometrically above the horizon, or apparently above the horizon, including the effects of atmospheric refraction? $\endgroup$
    – notovny
    Aug 7 at 20:46

2 Answers 2


This is definitely dependent on observing location, observing times, atmospheric refraction, and probably a couple other things I didn't think of. But just to get another reasonable estimation: Skyfield sampling simulation time!

The following python script makes one million evenly spaced observations during the entire second millennium, for roughly one every 8.8 hours. Observing site is at 0°N, 0°E, 0m elevation. Atmospheric refraction is ignored.

It takes about five minutes to run on my computer.

import datetime as dt
import pytz

from skyfield import api, jpllib, vectorlib, timelib
from skyfield.toposlib import wgs84

def determine_object_visibilities(
        object: vectorlib.VectorSum |jpllib.ChebyshevPosition,
        observer: vectorlib.VectorSum,
        observing_times: timelib.Time
    observations = observer.at(observing_times).observe(object)

    alt_angles, *_ = observations.apparent().altaz()

    positive_altitudes = [alt >= 0 for alt in alt_angles.degrees]
    return positive_altitudes

def main():
    load = api.Loader(".")
    ephemeris = load("de422.bsp")
    timescale = load.timescale()

    earth = ephemeris['earth']
    other_planets = [

    tz = pytz.timezone("UTC")

    start_time = tz.localize(dt.datetime(1001, 1, 1))
    end_time = tz.localize(dt.datetime(2001, 1, 1))

    t0, t1 = timescale.from_datetimes([start_time, end_time])

    observation_count = 1_000_000
    observation_times = timescale.linspace(t0, t1, observation_count)

    longitude, latitude, elevation = 0, 0, 0
    observer = earth + wgs84.latlon(longitude, latitude, elevation)

    planetary_visibilities = tuple(
        determine_object_visibilities(planet, observer, observation_times)
        for planet in other_planets

    all_other_planets_visible = tuple(
        all(visible_planets) for visible_planets in zip(*planetary_visibilities)

    visibility_count = sum(all_other_planets_visible)

    print(f"Observing latitude: {abs(latitude)}°{'N' if latitude >= 0 else 'S'}\n"
          f"Observing longitude {abs(longitude)}°{'E' if longitude >= 0 else 'W'}\n"
          f"Starting time: {start_time:%Y-%m-%d %H:%M %z}\n"
          f"Ending time: {end_time:%Y-%m-%d %H:%M %z}\n"
          f"Number of observations: {observation_count:,}\n"
          f"Observations with all planets visible: {visibility_count:,}\n"
          f"Percentage of total: {visibility_count / observation_count:5.3%}")

if __name__ == '__main__':

And produces the following results:

Observing latitude: 0°N
Observing longitude 0°E
Starting time: 1001-01-01 00:00 +0000
Ending time: 2001-01-01 00:00 +0000
Number of observations: 1,000,000
Observations with all planets visible: 19,277
Percentage of total: 1.928%

Or roughly $1/52$ of all the chosen observations.

  • $\begingroup$ This is obviously a "new" question, but I wonder how often the 7 planets are visible simultaneously at some time during the day. In other words, how often is the difference in elongation less than 180 degrees and how often more than 180 degrees. $\endgroup$
    – JohnHoltz
    Aug 7 at 23:49
  • $\begingroup$ @JohnHoltz On the assumption that day was when the Sun was visible, it was a one-line modification to the script to do this ( adding ephemeris['sun']to the other planets list), and rerunning. That dropped the percentage to 1.881% $\endgroup$
    – notovny
    Aug 8 at 14:15
  • 1
    $\begingroup$ @notovny - Adding Sun should increase the percentage because you are now dividing by times when sun was up, but Venus and Mercury were probably also up. $\endgroup$
    – eshaya
    Aug 8 at 15:57
  • 1
    $\begingroup$ @GregMiller ergodicity means that the percentage doesn't depend significantly on the timestep, even if it was a month or a year. Those very brief occurrences have the same fair chance of getting sampled as everything else, in proportion to their length. $\endgroup$
    – hobbs
    Aug 18 at 2:10
  • 1
    $\begingroup$ I got bored and wrote a version of the code that can handle large observation_count without using hundreds of GB of RAM, and ran it for 100M observations (so, every 5.25 minutes). The percentage overall goes from 1.928% to 1.930%, and for sun-above-horizon goes from 3.763% to 3.769%. $\endgroup$
    – hobbs
    Aug 21 at 4:23

The complicated motion of inferior planets, Mercury and Venus, complicate the calculation of exactly how often all 7 planets are above the horizon, so a numerical solution is probably best for precision. But, back-of-the-envelope calculations are useful for understanding why the frequency is what it is.

Let's first do a simple problem. What is the chance that all seven other planets are visible at sunset (given that you do not know anything about the current arrangement)? This problem avoids the complicated motions of Venus and Mercury; each is visible half the time and there is no correlations of positions between them. Therefore, the probability of seeing all 7 planets is $1/2^7$ = 1/128 each evening (excluding clouds and averaged over many centuries).

Just before sunrise, the frequency is the same, of course. Since Mercury and Venus can only be above the horizon for a short time after sunset or before sunrise, then the probability of being able to view, by eye, all 7 planets in any given night (including twilight) should be fairly close to the sum for sunrise and sunset or 1/64.

We can improve the precision of this case by taking into account that Mercury can be as far as 28 degrees from the Sun, so the other planets could be 7.7% of the sky below the horizon at sunset, and still rise before Mercury sets. That would increase the sky available for the other 5 planets from 1/2 the sky to about 1.15 of that. But Mercury at greatest elongation is not the usual. In the spirit of back-of-the-envelope calculation, let us take a compromise adjustment of 5% per exterior planet to approximate this affect.

Altogether, we now have for the upper limit chances of seeing all planets simultaneously on a given night: $2*(1/2^2)*(1.05/2)^5 = .020 = 1/50$

Of course, there will be decades when this happens more often, and there will be decades when it does not occur.

This result may be dependent on latitude of observer, but I am guessing that is not important. One thing that may be important is that planets spend extra time at opposition because of retrograde motion, when the Earth’s more rapid motion makes the planet appear to move backwards on the celestial sphere. There should be an opposite affect as the planet passes behind in Sun. This may make it more likely for superior planets to be up at night.

Now lets tackle the actual question of how often are all planets simultaneously above the horizon, independent of night or day. Now they can be on either side of the Sun, and this would only be visible to the eye during an eclipse. We can put limits on the frequency by doing a much simpler problem in which the two inner planets were both just a few solar radii from the Sun. Now, their locations in the sky would be fully correlated and they could be considered a single entity. We can then ask what is the probability at a given moment that 6 celestial objects are above the horizon, and that is 1/2^6 = 1/64, our upper limit. For a lower limit, we can take their motions to be completely uncorrelated, the odds would be 1/128.

Summary of limits on all 7 planets being above the horizon at any given moment: Since, Venus stays within 47 degrees of the Sun and Mercury stays within 28 degrees of the Sun, they are highly correlated and the answer must be much closer to 1/64 (completely correlated) than 1/128 (completely uncorrelated), but between the two. If not, it would be very interesting to understand what could take the odds outside of this range.

The poster of this question, scm, mentions this happening during an eclipse, so he may have meant to ask for the odds of this happening during an eclipse. By adding the prior that the Sun is above the horizon, one practically ensures that Mercury and Venus are also above the horizon (almost). One would then ask, what is the probability for the other 5 planets also being up during an eclipse, which is 1/2^5 or 1/32. This then is the upper limit to the probability, but it is close to the actual probability, unless the eclipse is happening very low in the sky. Seeing both Mercury and Venus remains likely until the Sun is within about 1 hr (15 deg) of the horizon. If we say eclipses happening 1 hr within sunrise or sunset are not likely to have both Mercury and Venus, the estimated fraction of all eclipses having all 7 planets visible drops to: [1-(30/180)]/32 = .026 = 1/38.

One could also ask for the fraction of whole days having all planets simultaneously above the horizon? This is the same as asking what is the probability of having N planets within 180 degrees along the ecliptic. The probability (see below) is $N/2^{N-1}$. We can use the same tactic as above to get lower and upper bounds on the probability. We can assume Mercury and Venus are highly correlated so that there are only 6 entities involved, and we have the upper bound frequency of $6/2^5 = 3/16 = 1/5.33. A lower bound frequency is ½ of this (from Mercury uncorrelated with Venus) or 1/10.66. And my best guess is around .85/5.33 = 1/6.3

Probability of N random points on a circle being within a fraction f of the circumference of each other.
Pick N random angles $L_i$ from 0 to 360 degrees. You can sort the points by $L$. For each $L_k$, ask what is the probability that all other N-1 points satisfy $L_i – L_k < f$, being careful to add 360 if $i < k$. The total probability is then the sum of all N of these individual probabilities $f^{N-1}$. It results in $Nf^{N-1}$.

  • 1
    $\begingroup$ Honestly, I'm thankful for your initial estimation, as it helped quite a bit when I was working on the sampling code. $\endgroup$
    – notovny
    Aug 8 at 15:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .