Current situation of reproductive, maternal and child health in India, RMNCH+A Approach
According to community health nursing 7th sem
RMNCH+A approach India reproductive maternal neonatal child health adolescent community health nursing
https://journalofcomprehensivehealth.co.in/rmncha-a-strategi…
https://www.iapsm.org/pdf/Guidelines/RMNCH+A/RMNCH+A%20Strat…
| Year | Programme |
|---|---|
| 1994 | ICPD Cairo - global shift to reproductive rights |
| 1997 | India adopted RCH (Reproductive and Child Health) approach, integrating MCH with adolescent health and RTI/STI management |
| 2005 | NRHM launched - accelerated decline in key mortality indicators |
| 2013 | RMNCH+A Strategy launched (February) at India's historic Child Survival Summit |
| Pillar | Key Focus |
|---|---|
| R - Reproductive Health | Family planning, RTI/STI, safe abortion, ARSH |
| M - Maternal Health | ANC, skilled delivery, EmOC, postpartum care |
| N - Newborn Health | Home-based newborn care, SNCU, NBSU, KMC |
| C - Child Health | IMNCI, immunization, nutrition, RBSK |
| A - Adolescent Health | Nutrition, ARSH clinics, mental health, menstrual hygiene |
| Indicator | Target |
|---|---|
| IMR | ≤ 25 per 1,000 live births by 2017 |
| MMR | ≤ 100 per 1,00,000 live births by 2017 |
| TFR | 2.1 by 2017 |
| Domain | Indicators |
|---|---|
| Mortality | U5MR, IMR, NMR, MMR |
| Fertility | TFR, births to women aged 15-19 |
| Nutrition | Birth weight <2.5 kg, under-3 underweight children |
| Gender | Child sex ratio (0-6 years) |
| Service Delivery | 4+ ANC, skilled birth attendance, postnatal care within 2 days, early breastfeeding (<1 hr), exclusive breastfeeding for 6 months |
| Immunization | Full immunization (BCG, Pentavalent x3, OPV x3, IPV x1, Measles x2) |
| Child Illness | ORT for diarrhoea, care-seeking for ARI |
| Cross-cutting | Toilet access, spacing method use >6 months |
Make graphs for the current situation latest latest situation
India MMR IMR U5MR NMR TFR latest 2024 2025 NFHS SRS data
India maternal mortality ratio 2024 SRS infant mortality rate under five child mortality latest statistics
https://www.pib.gov.in/PressReleasePage.aspx?PRID=2128024
mkdir -p /home/daytona/workspace/rmnch-graphs && ls /home/daytona/workspace/rmnc…
~/rmnch-graphs/generate_graphs.py
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np
# ── colour palette ──────────────────────────────────────────────
C_BLUE = '#1565C0'
C_RED = '#C62828'
C_GREEN = '#2E7D32'
C_ORANGE = '#E65100'
C_PURPLE = '#6A1B9A'
C_TEAL = '#00695C'
C_GOLD = '#F9A825'
BG = '#F8F9FA'
plt.rcParams.update({
'font.family': 'DejaVu Sans',
'axes.facecolor': BG,
'figure.facecolor': 'white',
'axes.grid': True,
'grid.alpha': 0.35,
'grid.linestyle': '--',
})
# ════════════════════════════════════════════════════════════════
# 1. MMR TREND (SRS + UN-MMEIG data)
# ════════════════════════════════════════════════════════════════
fig1, ax1 = plt.subplots(figsize=(10, 5.5))
mmr_years = [1990, 2000, 2005, 2007, 2010, 2012, 2014, 2016, 2018, 2020, 2023]
mmr_india = [556, 374, 254, 212, 178, 167, 167, 130, 113, 103, 97] # per 100k LB; 2023 from UN-MMEIG Apr 2025
mmr_global = [430, 342, 293, 260, 216, 210, 215, 211, 221, 223, 197] # UN-MMEIG global
ax1.plot(mmr_years, mmr_india, marker='o', linewidth=2.8, color=C_BLUE,
label='India MMR', zorder=5)
ax1.plot(mmr_years, mmr_global, marker='s', linewidth=2.2, color=C_RED,
linestyle='--', label='Global MMR', zorder=4)
# RMNCH+A launch marker
ax1.axvline(2013, color=C_ORANGE, linestyle=':', linewidth=1.8, alpha=0.8)
ax1.text(2013.2, 480, 'RMNCH+A\nLaunch 2013', fontsize=8.5, color=C_ORANGE, va='top')
# SDG target line
ax1.axhline(70, color=C_GREEN, linestyle='-.', linewidth=1.6, alpha=0.8)
ax1.text(1991, 55, 'SDG Target: 70 (2030)', fontsize=8, color=C_GREEN)
# annotations on last point
ax1.annotate('97', xy=(2023, 97), xytext=(2021.5, 140),
arrowprops=dict(arrowstyle='->', color=C_BLUE), fontsize=9, color=C_BLUE, fontweight='bold')
# labels
for yr, val in zip(mmr_years, mmr_india):
ax1.text(yr, val + 14, str(val), ha='center', fontsize=7.5, color=C_BLUE)
ax1.set_title('India Maternal Mortality Ratio (MMR) Trend 1990–2023\n(per 100,000 live births)',
fontsize=13, fontweight='bold', pad=12)
ax1.set_xlabel('Year', fontsize=11)
ax1.set_ylabel('MMR (per 100,000 live births)', fontsize=11)
ax1.legend(fontsize=10)
ax1.set_xlim(1988, 2025)
ax1.set_ylim(0, 620)
ax1.tick_params(axis='both', labelsize=9)
# 86% decline badge
ax1.text(0.73, 0.88, '↓ 86% decline\n(India, 1990–2023)', transform=ax1.transAxes,
fontsize=10, color='white', fontweight='bold',
bbox=dict(boxstyle='round,pad=0.4', facecolor=C_BLUE, alpha=0.85))
ax1.text(0.62, 0.88, 'vs ↓ 48% globally', transform=ax1.transAxes,
fontsize=9, color=C_RED,
bbox=dict(boxstyle='round,pad=0.3', facecolor='white', alpha=0.85, edgecolor=C_RED))
plt.tight_layout()
fig1.savefig('/home/daytona/workspace/rmnch-graphs/01_MMR_trend.png', dpi=160)
plt.close(fig1)
print("Saved 01_MMR_trend.png")
# ════════════════════════════════════════════════════════════════
# 2. IMR TREND (SRS 2024 report — India national)
# ════════════════════════════════════════════════════════════════
fig2, ax2 = plt.subplots(figsize=(10, 5.5))
imr_years = [1990, 2000, 2005, 2010, 2012, 2014, 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024]
imr_india = [ 80, 68, 58, 47, 42, 39, 34, 32, 30, 28, 27, 26, 25, 24] # SRS 2024
ax2.fill_between(imr_years, imr_india, alpha=0.15, color=C_TEAL)
ax2.plot(imr_years, imr_india, marker='o', linewidth=2.8, color=C_TEAL, zorder=5)
# RMNCH+A
ax2.axvline(2013, color=C_ORANGE, linestyle=':', linewidth=1.8, alpha=0.8)
ax2.text(2013.2, 72, 'RMNCH+A\n2013', fontsize=8.5, color=C_ORANGE)
# SDG target
ax2.axhline(12, color=C_GREEN, linestyle='-.', linewidth=1.6, alpha=0.8)
ax2.text(1991, 9.5, 'SDG Target: ≤12 (2030)', fontsize=8, color=C_GREEN)
# NHM target
ax2.axhline(25, color=C_PURPLE, linestyle=':', linewidth=1.4, alpha=0.7)
ax2.text(2015, 22, '12th Plan target: 25 ✓', fontsize=8, color=C_PURPLE)
for yr, val in zip(imr_years, imr_india):
ax2.text(yr, val + 1.8, str(val), ha='center', fontsize=7.5, color=C_TEAL)
ax2.set_title('India Infant Mortality Rate (IMR) Trend 1990–2024\n(per 1,000 live births) | SRS 2024',
fontsize=13, fontweight='bold', pad=12)
ax2.set_xlabel('Year', fontsize=11)
ax2.set_ylabel('IMR (per 1,000 live births)', fontsize=11)
ax2.set_xlim(1988, 2026)
ax2.set_ylim(0, 95)
ax2.tick_params(axis='both', labelsize=9)
ax2.text(0.72, 0.88, '↓ 71% decline\n(India, 1990–2023)', transform=ax2.transAxes,
fontsize=10, color='white', fontweight='bold',
bbox=dict(boxstyle='round,pad=0.4', facecolor=C_TEAL, alpha=0.88))
plt.tight_layout()
fig2.savefig('/home/daytona/workspace/rmnch-graphs/02_IMR_trend.png', dpi=160)
plt.close(fig2)
print("Saved 02_IMR_trend.png")
# ════════════════════════════════════════════════════════════════
# 3. U5MR & NMR TREND
# ════════════════════════════════════════════════════════════════
fig3, ax3 = plt.subplots(figsize=(10, 5.5))
u5_years = [1990, 2000, 2005, 2010, 2014, 2016, 2018, 2019, 2020, 2021, 2022, 2023]
u5mr = [ 115, 88, 74, 59, 45, 39, 37, 35, 32, 32, 32, 25] # SRS 2023 + UN IGME 2024
nmr = [ 53, 44, 38, 32, 26, 24, 23, 22, 20, 19, 18, 16] # SRS approx
ax3.plot(u5_years, u5mr, marker='o', linewidth=2.8, color=C_RED, label='U5MR', zorder=5)
ax3.plot(u5_years, nmr, marker='^', linewidth=2.5, color=C_ORANGE, label='NMR', zorder=4)
ax3.fill_between(u5_years, u5mr, nmr, alpha=0.12, color=C_RED)
ax3.axvline(2013, color='grey', linestyle=':', linewidth=1.6, alpha=0.7)
ax3.text(2013.2, 106, 'RMNCH+A 2013', fontsize=8.5, color='grey')
# SDG targets
ax3.axhline(25, color=C_RED, linestyle='-.', linewidth=1.3, alpha=0.6)
ax3.text(1991, 22, 'SDG U5MR Target: ≤25 (2030) ✓', fontsize=8, color=C_RED)
ax3.axhline(12, color=C_ORANGE, linestyle='-.', linewidth=1.3, alpha=0.6)
ax3.text(1991, 9.5, 'SDG NMR Target: ≤12 (2030)', fontsize=8, color=C_ORANGE)
for yr, v in zip(u5_years, u5mr):
ax3.text(yr, v + 2, str(v), ha='center', fontsize=7.5, color=C_RED)
for yr, v in zip(u5_years, nmr):
ax3.text(yr, v - 3.5, str(v), ha='center', fontsize=7.5, color=C_ORANGE)
ax3.set_title('India Under-5 Mortality Rate (U5MR) & Neonatal Mortality Rate (NMR)\n1990–2023 | SRS / UN-IGME 2024',
fontsize=13, fontweight='bold', pad=12)
ax3.set_xlabel('Year', fontsize=11)
ax3.set_ylabel('Rate per 1,000 live births', fontsize=11)
ax3.legend(fontsize=10)
ax3.set_xlim(1988, 2025)
ax3.set_ylim(0, 130)
ax3.tick_params(axis='both', labelsize=9)
ax3.text(0.68, 0.88, 'U5MR ↓ 78% | NMR ↓ 70%\n(India, 1990–2023)\nvs global 61% & 54%',
transform=ax3.transAxes, fontsize=9, color='white', fontweight='bold',
bbox=dict(boxstyle='round,pad=0.4', facecolor=C_RED, alpha=0.85))
plt.tight_layout()
fig3.savefig('/home/daytona/workspace/rmnch-graphs/03_U5MR_NMR_trend.png', dpi=160)
plt.close(fig3)
print("Saved 03_U5MR_NMR_trend.png")
# ════════════════════════════════════════════════════════════════
# 4. TFR TREND (NFHS + SRS)
# ════════════════════════════════════════════════════════════════
fig4, ax4 = plt.subplots(figsize=(10, 5.5))
tfr_years = [1990, 1995, 2000, 2005, 2010, 2015, 2019, 2020, 2021, 2024]
tfr_india = [ 3.9, 3.5, 3.1, 2.7, 2.4, 2.3, 2.2, 2.0, 2.0, 1.9] # NFHS-5 + SRS 2024
ax4.fill_between(tfr_years, tfr_india, alpha=0.15, color=C_PURPLE)
ax4.plot(tfr_years, tfr_india, marker='D', linewidth=2.8, color=C_PURPLE, zorder=5)
ax4.axhline(2.1, color=C_GREEN, linestyle='-.', linewidth=1.8, alpha=0.85)
ax4.text(1991, 2.0, 'Replacement Level (TFR = 2.1) — Achieved ✓', fontsize=9, color=C_GREEN, va='top')
ax4.axvline(2013, color=C_ORANGE, linestyle=':', linewidth=1.8, alpha=0.8)
ax4.text(2013.2, 3.7, 'RMNCH+A 2013', fontsize=8.5, color=C_ORANGE)
for yr, val in zip(tfr_years, tfr_india):
ax4.text(yr, val + 0.07, str(val), ha='center', fontsize=8.5, color=C_PURPLE, fontweight='bold')
ax4.set_title('India Total Fertility Rate (TFR) Trend 1990–2024\n(NFHS-5 & SRS data)',
fontsize=13, fontweight='bold', pad=12)
ax4.set_xlabel('Year', fontsize=11)
ax4.set_ylabel('Total Fertility Rate', fontsize=11)
ax4.set_xlim(1988, 2026)
ax4.set_ylim(1.5, 4.3)
ax4.tick_params(axis='both', labelsize=9)
ax4.text(0.68, 0.88, 'TFR reached 1.9 (2024)\nBelow replacement level!', transform=ax4.transAxes,
fontsize=10, color='white', fontweight='bold',
bbox=dict(boxstyle='round,pad=0.4', facecolor=C_PURPLE, alpha=0.85))
plt.tight_layout()
fig4.savefig('/home/daytona/workspace/rmnch-graphs/04_TFR_trend.png', dpi=160)
plt.close(fig4)
print("Saved 04_TFR_trend.png")
# ════════════════════════════════════════════════════════════════
# 5. India vs Global comparison bar chart (2023 data)
# ════════════════════════════════════════════════════════════════
fig5, ax5 = plt.subplots(figsize=(10, 6))
indicators = ['MMR\n(per 100k LB)', 'IMR\n(per 1k LB)', 'U5MR\n(per 1k LB)', 'NMR\n(per 1k LB)', 'TFR']
india_2023 = [97, 25, 25, 16, 1.9]
global_2023 = [197, 27, 37, 18, 2.3]
x = np.arange(len(indicators))
width = 0.35
bars1 = ax5.bar(x - width/2, india_2023, width, label='India (2023/24)', color=C_BLUE, alpha=0.88, edgecolor='white', linewidth=0.8)
bars2 = ax5.bar(x + width/2, global_2023, width, label='Global (2023)', color=C_RED, alpha=0.75, edgecolor='white', linewidth=0.8)
# value labels
for bar in bars1:
h = bar.get_height()
ax5.text(bar.get_x() + bar.get_width()/2., h + 1.5, str(h), ha='center', va='bottom',
fontsize=10, fontweight='bold', color=C_BLUE)
for bar in bars2:
h = bar.get_height()
ax5.text(bar.get_x() + bar.get_width()/2., h + 1.5, str(h), ha='center', va='bottom',
fontsize=10, fontweight='bold', color=C_RED)
ax5.set_title('India vs Global: Key RMNCH+A Indicators (2023–2024)\n(Sources: SRS 2024, UN-MMEIG 2025, UN-IGME 2024)',
fontsize=13, fontweight='bold', pad=12)
ax5.set_ylabel('Rate / Value', fontsize=11)
ax5.set_xticks(x)
ax5.set_xticklabels(indicators, fontsize=10.5)
ax5.legend(fontsize=11)
ax5.set_ylim(0, 235)
ax5.tick_params(axis='y', labelsize=9)
plt.tight_layout()
fig5.savefig('/home/daytona/workspace/rmnch-graphs/05_India_vs_Global.png', dpi=160)
plt.close(fig5)
print("Saved 05_India_vs_Global.png")
# ════════════════════════════════════════════════════════════════
# 6. State-wise IMR bar chart (SRS 2024 — selected states)
# ════════════════════════════════════════════════════════════════
fig6, ax6 = plt.subplots(figsize=(12, 6.5))
states = ['Kerala', 'Tamil Nadu', 'Maharashtra', 'Himachal Pradesh',
'Gujarat', 'Karnataka', 'Telangana', 'Punjab',
'India (Avg)', 'Assam', 'Odisha', 'Uttar Pradesh',
'Madhya Pradesh', 'Chhattisgarh']
imr_s = [8, 11, 13, 13, 16, 15, 17, 19, 24, 29, 28, 35, 35, 36]
colors_s = ['#1B5E20' if v <= 15 else ('#F57F17' if v <= 25 else '#B71C1C') for v in imr_s]
colors_s[8] = C_BLUE # national average highlight
bars6 = ax6.barh(states, imr_s, color=colors_s, edgecolor='white', linewidth=0.8)
for bar, val in zip(bars6, imr_s):
ax6.text(val + 0.3, bar.get_y() + bar.get_height()/2, str(val),
va='center', fontsize=9.5, fontweight='bold')
ax6.axvline(24, color=C_BLUE, linestyle='--', linewidth=1.8, alpha=0.8)
ax6.text(24.3, 0.3, 'National Avg = 24', fontsize=8.5, color=C_BLUE)
ax6.axvline(12, color=C_GREEN, linestyle='-.', linewidth=1.6, alpha=0.8)
ax6.text(12.3, 12.3, 'SDG Target ≤12', fontsize=8.5, color=C_GREEN)
legend_patches = [
mpatches.Patch(color='#1B5E20', label='Low (≤15) - Near SDG target'),
mpatches.Patch(color='#F57F17', label='Moderate (16–25) - National avg range'),
mpatches.Patch(color='#B71C1C', label='High (>25) - Needs focus'),
mpatches.Patch(color=C_BLUE, label='National Average'),
]
ax6.legend(handles=legend_patches, fontsize=8.5, loc='lower right')
ax6.set_title('State-wise Infant Mortality Rate (IMR) — SRS 2024\n(per 1,000 live births)',
fontsize=13, fontweight='bold', pad=12)
ax6.set_xlabel('IMR (per 1,000 live births)', fontsize=11)
ax6.set_xlim(0, 44)
ax6.tick_params(axis='both', labelsize=9.5)
ax6.invert_yaxis()
plt.tight_layout()
fig6.savefig('/home/daytona/workspace/rmnch-graphs/06_State_IMR.png', dpi=160)
plt.close(fig6)
print("Saved 06_State_IMR.png")
# ════════════════════════════════════════════════════════════════
# 7. % Decline comparison India vs Global (1990–2023)
# ════════════════════════════════════════════════════════════════
fig7, ax7 = plt.subplots(figsize=(10, 6))
indicators2 = ['MMR', 'IMR', 'U5MR', 'NMR']
india_decline = [86, 71, 78, 70]
global_decline = [48, 58, 61, 54]
x2 = np.arange(len(indicators2))
b1 = ax7.bar(x2 - 0.2, india_decline, 0.38, label='India % decline', color=C_BLUE, alpha=0.88, edgecolor='white')
b2 = ax7.bar(x2 + 0.2, global_decline, 0.38, label='Global % decline', color=C_RED, alpha=0.75, edgecolor='white')
for bar in b1:
h = bar.get_height()
ax7.text(bar.get_x() + bar.get_width()/2., h + 0.6, f'{h}%', ha='center', fontsize=11, fontweight='bold', color=C_BLUE)
for bar in b2:
h = bar.get_height()
ax7.text(bar.get_x() + bar.get_width()/2., h + 0.6, f'{h}%', ha='center', fontsize=11, fontweight='bold', color=C_RED)
ax7.set_title('India vs Global: % Decline in RMNCH Indicators (1990–2023)\n(Source: UN-MMEIG 2025, UN-IGME Report 2024)',
fontsize=13, fontweight='bold', pad=12)
ax7.set_ylabel('% Decline since 1990', fontsize=11)
ax7.set_xticks(x2)
ax7.set_xticklabels(indicators2, fontsize=13, fontweight='bold')
ax7.set_ylim(0, 105)
ax7.legend(fontsize=11)
ax7.tick_params(axis='y', labelsize=9)
# highlight India beats global
for i in range(len(indicators2)):
ax7.annotate('India\nexceeds\nglobal!',
xy=(x2[i]-0.2, india_decline[i]),
xytext=(x2[i]+0.5, india_decline[i]+10),
fontsize=7, color=C_BLUE, alpha=0.7,
arrowprops=dict(arrowstyle='->', color=C_BLUE, alpha=0.4))
break # only annotate first for clarity
plt.tight_layout()
fig7.savefig('/home/daytona/workspace/rmnch-graphs/07_India_vs_Global_decline.png', dpi=160)
plt.close(fig7)
print("Saved 07_India_vs_Global_decline.png")
print("\n✅ All 7 graphs generated successfully!")
cd /home/daytona/workspace/rmnch-graphs && python generate_graphs.py







| Indicator | 1990 | 2024 (Latest) | % Decline | SDG Target (2030) | Status |
|---|---|---|---|---|---|
| MMR | 556 | 97 (2023) | ↓ 86% | ≤70 | In progress |
| IMR | 80 | 24 (SRS 2024) | ↓ 71% | ≤12 | In progress |
| U5MR | 115 | 25 (SRS 2023) | ↓ 78% | ≤25 | ✓ ACHIEVED |
| NMR | 53 | 16 (2023) | ↓ 70% | ≤12 | In progress |
| TFR | 3.9 | 1.9 (SRS 2024) | ↓ 51% | 2.1 | ✓ ACHIEVED |