The radial lines denote key temperatures, clockwise from bottom including He evaporation (dotted cyan) around 4 K ? 3265 GB/nJ (just CCW from the 4732.51 GB/nJ of the 2.76 K cosmic background) and N2 evaporation (dashed cyan) around 77 K ? 170 GB/nJ, CO2 sublimation around ?78.5 °C ? 67.1 GB/nJ (dot-dashed cyan), H2O liquification around 0 °C ? 47.8 GB/nJ and evaporation around 100 °C ? 35.0 GB/nJ (dot-dashed green), "red-hot" (solid red) around 500 °C ? 16.9 GB/nJ, rock melting around 1500 °C ? 7.37 GB/nJ (solid magenta), graphite sublimation (dashed magenta) around 3642 °C ? 3.34 GB/nJ, and the surface of the sun (dotted magenta) around 5778 K ? 2.26 GB/nJ ≈ 2.01 nat/eV. The dashed red lines represent the min-max European temperature range (from 0 °F ? 51.2 GB/nJ to 100 °F ? 42.0 GB/nJ) on which Fahrenheit based his scale, at top of which is also the human basal temperature at around 98.6 °F ? 42.1 GB/nJ. Room temperature (3 o'clock) is defined as either 20 °C = 68 °F ? 44.6 GB/nJ ≈ 39.6 nat/eV = 1/kT or 22 °C = 71.6 °F ? 44.3 GB/nJ ≈ 39.3 nat/eV = 1/kT, and therefore kTroom is about 1/40 of an electron Volt.
In the table of conversions above, note that the uncertainty-slope or coldness β≡1/kT in [GiB/nJ] or [GB/nJ] is nearly equal to the reciprocal of kT in [eV/nat]. Even more curiously, if we don't mind using binary-multiples i.e. gibiBytes instead of powers of ten, we can say that 1 [nat/eV] = 1.04827 [GiB/nJ] = 1.12557 [GB/nJ]. Hence room temperature coldness is about 40 [GiB/nJ] simply because kT at room temperature is about 1/40 [eV].
The following code generated the plot above. The legend and arrowhead were added later in Inkscape.
import numpy as np
import matplotlib.pyplot as plt
kb_inv = 1/1.380649e-23/np.log(2)/8/1e18 # in GB per nJ
TAU = np.math.tau
gib_per_nj = np.array([-140, -120, *np.arange(-100, 110, 10), 120, 140])
scale = 44.3 # Defines the 3 o'clock position
angles = 2 * np.arctan(gib_per_nj/scale)
r = np.ones(len(gib_per_nj))
kelvins = np.arange(-900, 1000, 100)
k_angles = 2 * np.arctan(kb_inv/kelvins/scale)
r_k = np.ones(len(kelvins))
celsius = np.arange(-200, 600, 100)
c_angles = 2 * np.arctan(kb_inv/(273.15 + celsius)/scale)
r_c = np.ones(len(c_angles))
fahrenheit = np.arange(-400, 600, 100)
f_angles = 2 * np.arctan(kb_inv/(273.15 + 5*(fahrenheit-32)/9)/scale)
r_f = np.ones(len(f_angles))
angle_cut = TAU/36
circle_angles = np.linspace(-(TAU/2 - angle_cut), TAU/2, 2**12)
r_circ = np.ones(len(circle_angles))
semi_angles = np.linspace(0, TAU/2, 2**12)
r_semi = np.ones(len(semi_angles))
size = 'x-small'
def get_text(angles, labels, distance, color):
for i, label in enumerate(labels):
rot_angle = angles[i] * 360 / TAU
plt.text(angles[i], distance + 0.1, label, color=color, ha='center', va='center', rotation=90-rot_angle, fontsize=size)
fig = plt.figure(dpi=150)
ax = fig.add_subplot(projection='polar')
gb_distance = 1
k_distance = .8
c_distance = .6
f_distance = .4
get_text(angles, gib_per_nj, gb_distance, 'k')
get_text(k_angles, kelvins, k_distance, 'b')
get_text(c_angles, celsius, c_distance, 'g')
get_text(f_angles, fahrenheit, f_distance, 'r')
# for i, label in enumerate(gib_per_nj):
# rot_angle = angles[i] * 360 / TAU
# plt.text(angles[i], r[i]+.15, label, ha='center', va='center', rotation=90-rot_angle)
# plt.annotate(label, (angles[i], r[i]))
# Plot lines
def plot_line(angle, color, line_type):
ax.plot([angle, angle], [0,1], color=color, linestyle=line_type, lw=1)
# Helium boiling point
plot_line(2 * np.arctan(kb_inv/4./scale), 'c', ':')
# N2 boiling point
plot_line(2 * np.arctan(kb_inv/77./scale), 'c', '--')
# CO2 sublimation
plot_line(2 * np.arctan(kb_inv/(273.15-78.5)/scale), 'c', '-.')
# H20 freezing
freezing_angle = 2 * np.arctan(kb_inv/(273.15)/scale)
plot_line(freezing_angle, 'g', '-.')
# H20 boiling
boiling_angle = 2 * np.arctan(kb_inv/(373.15)/scale)
plot_line(boiling_angle, 'g', '-.')
# Liquid water range
ax.bar((boiling_angle+freezing_angle)/2, c_distance, boiling_angle-freezing_angle, color='g', alpha=0.25)
# Red hot
plot_line(2 * np.arctan(kb_inv/(273.15 + 500)/scale), 'r', '-')
# Rock melting
plot_line(2 * np.arctan(kb_inv/(273.15 + 1500)/scale), 'm', '-')
# Graphite sublimation
plot_line(2 * np.arctan(kb_inv/(273.15 + 3642)/scale), 'm', '--')
# Surface of the Sun
plot_line(2 * np.arctan(kb_inv/5778/scale), 'm', ':')
# 0 °F
plot_line(2 * np.arctan(kb_inv/(273.15+5*(0-32)/9)/scale), 'r', '--')
# 100 °F
plot_line(2 * np.arctan(kb_inv/(273.15+5*(100-32)/9)/scale), 'r', '--')
# 1024 Stonehenge dominoes
plot_line(2 * np.arctan(-1.25e-15/scale), 'darkgrey', ':')
# HeNe laser
plot_line(2 * np.arctan(-31.5/scale), 'darkgrey', '--')
# 500,001 spin-up protons out of 1 million in 1T magnetic field
mu_p = 1.410606797e-26 # proton magnetic moment
plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500001-1)))/scale), 'darkgrey', '-')
# 500,002 spin-up protons out of 1 million in 1T magnetic field
plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500002-1)))/scale), 'darkgrey', '-.')
# 500,003 spin-up protons out of 1 million in 1T magnetic field
plot_line(2 * np.arctan(kb_inv/(mu_p/(1.38e-23*np.log(1000000/500003-1)))/scale), 'darkgrey', '-.')
# Plot circles
ax.plot(circle_angles, gb_distance*r_circ, 'k-')
ax.plot(circle_angles, k_distance*r_circ, 'b-')
ax.plot(semi_angles, c_distance * r_semi, 'g-')
ax.plot(semi_angles, f_distance * r_semi, 'r-')
# Plot infinities
ax.plot([TAU/2], [gb_distance], 'k.')
plt.text(TAU/2, 0.075 + gb_distance, r'$+\infty$', ha='center', va='center', rotation = -90, fontsize=size)
ax.plot(0., k_distance, 'b.')
plt.text(0., 0.075 + k_distance, r'$\pm\infty$', color='b', ha='center', va='center', rotation = 90, fontsize=size)
# plt.annotate('$+\infty$', (TAU/2, 1.))
# plt.grid(visible=None)
plt.axis('off')
# Plot points
ax.plot(angles, gb_distance*r, 'k.')
ax.plot(k_angles, k_distance*r_k, 'b.')
ax.plot(c_angles, c_distance * r_c, 'g.')
ax.plot(f_angles, f_distance * r_f, 'r.')
# Orient plot
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
# Set linewidths
plt.setp(ax.lines, linewidth=0.6)
plt.title('Universal coldness/temperature scale')
plt.savefig('fig/ColdnessScale-mpl.svg');