SUMÁRIO
  1. A pergunta e a referência
  2. Fontes de dados
  3. Por que estes dois conjuntos
  4. Pré-processamento e suavização
  5. Código: gráfico de sobreposição (overlay)
  6. Como reproduzir
  7. Limitações e ressalvas
  8. Pontos frágeis desta demonstração

1. A pergunta e a referência

Existe alguma relação visual entre a atividade solar reconstruída e a temperatura da Groenlândia ao longo do Holoceno (últimos ~11.400 anos)? A pergunta aparece na Parte 3 do post O Cientista que desconhecia o método como contraponto à afirmação de que, retirada a "ciclicidade", o sinal climático seria uma tendência monotônica industrial. Antes de retirar ciclos, é útil enxergá-los — e o Holoceno é o intervalo onde temos as melhores reconstruções proxy de longo prazo.

Este tutorial documenta como o gráfico foi construído: dois eixos verticais, mesma escala temporal, ambas as séries suavizadas com média móvel de 200 anos. Não tenta provar correlação estatística — mostra apenas o que se vê quando as duas curvas são colocadas lado a lado.

2. Fontes de dados

Duas séries proxy públicas e amplamente citadas, ambas hospedadas pelo NOAA Paleoclimatology Program.

Atividade solar: Solanki, S.K., Usoskin, I.G., Kromer, B., Schüssler, M., & Beer, J. (2004). An unusually active Sun during recent decades compared to the previous 11,000 years. Nature 431, 1084-1087. Reconstrução do número de manchas solares a partir de concentrações de 14C dendrocronologicamente datadas.
Arquivo: solanki2004-ssn.txt
Temperatura: Alley, R.B. (2000). The Younger Dryas cold interval as viewed from central Greenland. Quaternary Science Reviews 19, 213-226. Reconstrução de temperatura a partir de razões isotópicas estáveis no testemunho de gelo GISP2.
Arquivo: gisp2_temp_accum_alley2000.txt

Os arquivos são salvos em Data/climate/solanki2004_sunspots.txt e Data/climate/gisp2_temp_alley2000.txt dentro do projeto Plotter.

3. Por que estes dois conjuntos

A escolha não é arbitrária. Para um intervalo de ~11.000 anos, há essencialmente duas categorias de proxies bem-resolvidas: testemunhos de gelo polar (temperatura via isótopos) e indicadores cosmogênicos (atividade solar via 14C ou 10Be). Solanki 2004 é a reconstrução solar de referência para o Holoceno; GISP2/Alley 2000 é a curva de temperatura mais citada para o mesmo período. Ambas têm resolução temporal compatível (década a duas décadas), o que torna a sobreposição em uma única figura sensata.

É preciso registrar uma ressalva imediata: GISP2 é uma localização (Summit, Groenlândia central). Não é o termômetro do planeta. Solanki é uma reconstrução global da atividade solar. Comparar uma série local com um forçante global pressupõe que a Groenlândia central responde proporcionalmente ao forçante solar — o que é defensável como hipótese de trabalho, não como teorema.

4. Pré-processamento e suavização

Os dados de Solanki estão em intervalos de 10 anos; GISP2 tem espaçamento variável, com média de aproximadamente 20 anos perto do presente. Para colocar as duas curvas em escala visual comparável, aplicamos uma média móvel de 200 anos a cada série — 20 pontos para Solanki, 10 pontos para GISP2. A janela de 200 anos é uma escolha de comunicação, não estatística: mostra ciclos centenários sem afogar a figura em ruído de alta frequência.

Filtramos o intervalo Holoceno (0 a 11.400 BP) e plotamos com o eixo X de 10.000 a 0 — passado à esquerda, presente à direita.

5. Código: gráfico de sobreposição (overlay)

Script em scripts/climate/plot_sunspots_temp_overlay.py. As partes essenciais:

"""
Solanki 2004 sunspot reconstruction vs GISP2 temperature (Alley 2000).
Dual-axis overlay over the Holocene, both series with 200-yr running mean.
"""
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

# --- Load Solanki sunspot data (10-yr intervals) ---
sunspots = pd.read_csv(
    "Data/climate/solanki2004_sunspots.txt",
    skiprows=71, sep=r"\s+", names=["year_bp", "sunspot_number", "sigma"],
    encoding="latin-1",
)

# --- Load GISP2 temperature (variable spacing, ~20 yr near present) ---
temp = pd.read_csv(
    "Data/climate/gisp2_temp_alley2000.txt",
    skiprows=75, nrows=1632, sep=r"\s+", names=["age_kyr_bp", "temp_c"],
    encoding="latin-1",
)
temp["year_bp"] = temp.age_kyr_bp * 1000  # kyr -> yr

# Keep Holocene only
sunspots = sunspots[(sunspots.year_bp >= 0) & (sunspots.year_bp <= 11400)].copy()
temp     = temp[(temp.year_bp >= 0) & (temp.year_bp <= 11400)].copy()

# 200-yr running mean (Solanki: 20 points; GISP2: 10 points)
sunspots["sn_smooth"] = sunspots.sunspot_number.rolling(
    window=20, center=True, min_periods=5).mean()
temp["temp_smooth"]   = temp.temp_c.rolling(
    window=10, center=True, min_periods=3).mean()

# --- Dual-axis overlay ---
fig, ax1 = plt.subplots(figsize=(16, 6))

color_sun  = "#E69F00"
color_temp = "#2166AC"

# Sunspot (left axis)
ax1.plot(sunspots.year_bp, sunspots.sn_smooth,
         color=color_sun, alpha=0.9, linewidth=1.2)
ax1.set_ylabel("Reconstructed Sunspot Number\n(200-yr running mean)",
               color=color_sun, fontsize=12, fontweight="bold")
ax1.tick_params(axis="y", labelcolor=color_sun)
ax1.set_xlim(10000, 0)         # past on left, present on right
ax1.grid(True, alpha=0.3)

# Temperature (right axis)
ax2 = ax1.twinx()
ax2.plot(temp.year_bp, temp.temp_smooth,
         color=color_temp, alpha=0.9, linewidth=1.2)
ax2.set_ylabel("Air Temperature (°C)\nGISP2, Greenland",
               color=color_temp, fontsize=12, fontweight="bold")
ax2.tick_params(axis="y", labelcolor=color_temp)
ax2.set_ylim(-33.5, -28.5)     # warmer at top

# X-axis
ax1.set_xlabel("Years Before Present", fontsize=12)
ax1.xaxis.set_major_locator(ticker.MultipleLocator(1000))
ax1.xaxis.set_minor_locator(ticker.MultipleLocator(250))

# Title
fig.suptitle(
    "Solar Activity vs Greenland Temperature — Holocene",
    fontsize=15, fontweight="bold", y=0.98,
)
ax1.set_title(
    "Solanki et al. (2004) sunspot reconstruction (200-yr smooth)  |  "
    "GISP2 temperature (Alley 2000)",
    fontsize=9, color="gray", pad=4,
)

fig.tight_layout()
fig.savefig(
    "plots/Be10 and O18/sunspots_vs_temp_holocene_overlay_200yr_v2.png",
    dpi=200, bbox_inches="tight",
)
Sunspot vs GISP2 temperature, Holocene — resultado esperado
Resultado esperado. Eixo esquerdo: número de manchas solares reconstruído (Solanki 2004), suavização móvel de 200 anos. Eixo direito: temperatura no GISP2 (Alley 2000), mesma suavização. Eixo horizontal em anos antes do presente, com o passado à esquerda. Aparecem alternâncias centenárias e milenares em ambas as séries; as fases relativas variam ao longo do Holoceno — não há um lock permanente entre solar e temperatura groenlandesa, mas tampouco a ausência de estrutura comum.

6. Como reproduzir

# Pré-requisitos
pip install pandas matplotlib

# Estrutura esperada (ja existe no repo Plotter)
Plotter/
+-- Data/
|   +-- climate/
|       +-- solanki2004_sunspots.txt
|       +-- gisp2_temp_alley2000.txt
+-- scripts/
|   +-- climate/
|       +-- plot_sunspots_temp_overlay.py
+-- plots/
    +-- Be10 and O18/

# Executar a partir da raiz do projeto
cd Plotter
python scripts/climate/plot_sunspots_temp_overlay.py

# Saida gerada:
#   plots/Be10 and O18/sunspots_vs_temp_holocene_overlay_200yr_v2.png

7. Limitações e ressalvas

  • Eixos independentes não implicam relação 1:1. Os eixos esquerdo e direito têm escalas escolhidas para caber visualmente; isso amplifica ou comprime amplitudes relativas. A figura é uma sobreposição visual, não uma regressão.
  • Esta demonstração não testa causalidade. Não calculamos correlação cruzada, defasagem, espectro de potência ou qualquer estatística formal. O propósito é mostrar a presença de ciclicidade — não atribuir parte do sinal de temperatura à variabilidade solar.

8. Pontos frágeis desta demonstração

Em revisão crítica, três pontos da metodologia merecem ser explicitados — não para invalidar a figura, mas para que ninguém a interprete além do que ela diz.

8.1 A janela de 200 anos é uma escolha de apresentação

Janelas mais curtas (50 anos) deixam o ruído visível e dificultam a leitura; janelas mais longas (500 anos, como na primeira versão deste gráfico) suavizam ciclos centenários reais. Os 200 anos foram escolhidos porque preservam aproximadamente o ciclo de Eddy (~1.000 anos) e de Suess/de Vries (~210 anos) sem afogar a figura. Quem refizer a análise com janelas diferentes verá figuras diferentes — sem que nenhuma delas seja "a verdadeira".

8.2 Comparar uma proxy local com um forçante global precisa de uma ponte teórica

Toda a discussão pressupõe que mudanças no forçante solar global se manifestam na temperatura groenlandesa. Existe literatura defendendo amplificação ártica do sinal solar (via efeitos sobre o vórtice polar, corrente de jato, NAO), e existe literatura cética. Esta demonstração não escolhe entre essas leituras — apenas exibe as duas séries no mesmo eixo temporal.

8.3 O número de manchas solares antes de 1610 não é "observado"

É uma reconstrução baseada em 14C cosmogênico, com pressupostos sobre a modulação do raio cósmico galáctico pelo campo magnético solar e sobre o transporte de carbono entre reservatórios atmosférico e oceânico. A linha "número de manchas solares" no gráfico, antes do telescópio, é portanto uma tradução de outro proxy. Plausível, peer-reviewed, mas não é o mesmo tipo de objeto que a contagem de Galileu em diante.

Tem uma sugestão melhor? Se você consegue propor outra forma de visualizar a relação solar–temperatura no Holoceno — outra reconstrução solar (Steinhilber 2012, Wu 2018), outra proxy de temperatura (composição multi-testemunho, Marcott 2013), ou um teste estatístico formal — escreva para statisticsreal1@gmail.com. Críticas técnicas são exatamente o que esta seção espera receber.