methods of health education
methods of health education community public health
| Category | Method | Best For |
|---|---|---|
| Individual | Counseling, home visits, bedside teaching | Behavior change, personalized advice |
| Group | Lecture, discussion, role play, demonstration | Skill building, attitude change |
| Mass | Radio, TV, posters, social media | Awareness creation, large-scale reach |
Create a comparison poster of individual vs group vs mass health education methods
A professional medical education comparison poster titled "Methods of Health Education" with three columns side by side comparing Individual, Group, and Mass methods. Column 1 - INDIVIDUAL METHODS (blue theme): icon of a doctor and patient, bullet points: Personal Counseling, Home Visits, Bedside Teaching. Advantages: Highly personalized, Two-way communication, Builds trust. Disadvantage: Time-consuming, Limited reach. Best for: Behavior change, Chronic disease management. Column 2 - GROUP METHODS (green theme): icon of people in a circle, bullet points: Lecture, Group Discussion, Role Play, Demonstration, Workshop, Symposium, Panel Discussion. Advantages: Balances reach and interaction, Peer learning, Attitude change. Disadvantage: Needs skilled facilitator. Best for: Skill building, Attitude change. Column 3 - MASS METHODS (orange/red theme): icon of broadcast tower and screens, bullet points: Radio & Television, Posters & Pamphlets, Newspaper, Social Media, Mobile Vans, Health Exhibits. Advantages: Reaches millions, Low cost per person, Fast awareness spread. Disadvantage: One-way, Less behavior change. Best for: Awareness creation, National campaigns. At the bottom a summary bar: "Effective Health Education = Individual + Group + Mass Methods Combined". Clean, modern infographic style with clear section headers, icons, medical/health theme, white background, professional typography.
mkdir -p /tmp/workspace/health-education-poster && ls /tmp/workspace/health-education-poster/
~/health-education-poster/create_poster.py
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import matplotlib.patheffects as pe
import numpy as np
fig = plt.figure(figsize=(22, 28), facecolor='#F0F4F8')
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 22)
ax.set_ylim(0, 28)
ax.axis('off')
# ── Colour palette ──────────────────────────────────────────────
BG = '#F0F4F8'
HEADER_BG = '#1A3A5C'
IND_DARK = '#1565C0' # Individual – blue
IND_MID = '#1976D2'
IND_LIGHT = '#BBDEFB'
GRP_DARK = '#2E7D32' # Group – green
GRP_MID = '#388E3C'
GRP_LIGHT = '#C8E6C9'
MAS_DARK = '#E65100' # Mass – orange
MAS_MID = '#F57C00'
MAS_LIGHT = '#FFE0B2'
TEXT_DARK = '#1A1A2E'
TEXT_MID = '#37474F'
WHITE = '#FFFFFF'
GOLD = '#FFD700'
def rounded_rect(ax, x, y, w, h, color, radius=0.4, alpha=1.0, zorder=2, lw=0):
fancy = FancyBboxPatch((x, y), w, h,
boxstyle=f"round,pad={radius}",
facecolor=color, edgecolor='none',
linewidth=lw, alpha=alpha, zorder=zorder)
ax.add_patch(fancy)
def shadow_rect(ax, x, y, w, h, radius=0.4, zorder=1):
fancy = FancyBboxPatch((x+0.12, y-0.12), w, h,
boxstyle=f"round,pad={radius}",
facecolor='#B0BEC5', edgecolor='none',
alpha=0.45, zorder=zorder)
ax.add_patch(fancy)
# ═══════════════════════════════════════════════════════════════
# HEADER
# ═══════════════════════════════════════════════════════════════
rounded_rect(ax, 0.3, 25.9, 21.4, 1.9, HEADER_BG, radius=0.5, zorder=3)
ax.text(11, 27.15, 'METHODS OF HEALTH EDUCATION',
ha='center', va='center', fontsize=26, fontweight='bold',
color=WHITE, zorder=4, fontfamily='DejaVu Sans')
ax.text(11, 26.6, 'A Comparative Overview • Individual | Group | Mass (Community)',
ha='center', va='center', fontsize=13, color='#90CAF9', zorder=4)
# Decorative lines under header
for xi in np.linspace(0.5, 21.5, 60):
ax.plot([xi, xi+0.2], [25.88, 25.88], lw=2, color=GOLD, alpha=0.5, zorder=4)
# ═══════════════════════════════════════════════════════════════
# COLUMN POSITIONS
# ═══════════════════════════════════════════════════════════════
cols = [
{'x': 0.45, 'dark': IND_DARK, 'mid': IND_MID, 'light': IND_LIGHT, 'icon': '👤', 'label': 'INDIVIDUAL\nMETHODS'},
{'x': 7.65, 'dark': GRP_DARK, 'mid': GRP_MID, 'light': GRP_LIGHT, 'icon': '👥', 'label': 'GROUP\nMETHODS'},
{'x': 14.85,'dark': MAS_DARK, 'mid': MAS_MID, 'light': MAS_LIGHT, 'icon': '📡', 'label': 'MASS\nMETHODS'},
]
COL_W = 6.8
# ───────────────────────────────────────────────────────────────
# Content data
# ───────────────────────────────────────────────────────────────
content = [
{ # INDIVIDUAL
'methods': [
('Personal Counseling', 'One-to-one advice from health worker'),
('Home Visits', 'Worker visits client at home'),
('Bedside Teaching', 'Education during clinical encounters'),
('Interview', 'Structured health dialogue'),
],
'advantages': [
'Highly personalized message',
'Two-way communication',
'Builds trust & rapport',
'Addresses individual barriers',
],
'disadvantages': [
'Time-consuming',
'Limited reach / not scalable',
'Needs trained personnel',
],
'best_for': 'Behaviour change · Chronic disease management\nAntenatal care · Family planning counseling',
'reach': 'Low (1 person at a time)',
'impact': 'Very High',
},
{ # GROUP
'methods': [
('Lecture', 'Didactic talk to an assembled group'),
('Group Discussion', 'Facilitated participatory dialogue'),
('Role Play / Socio-drama', 'Acting out health scenarios'),
('Demonstration', 'Show-and-do (ORS, handwashing)'),
('Workshop / Seminar', 'Skill-building intensive session'),
('Symposium / Panel', 'Expert multi-perspective talks'),
('Buzz Groups', 'Mini sub-group rapid discussions'),
],
'advantages': [
'Balances reach & interaction',
'Peer learning & group pressure',
'Effective attitude change',
'Skill building possible',
],
'disadvantages': [
'Needs skilled facilitator',
'Group dynamics may hinder',
'Harder to tailor message',
],
'best_for': 'Attitude & skill change · School health\nTraining health workers · Community meetings',
'reach': 'Medium (10–100 people)',
'impact': 'High',
},
{ # MASS
'methods': [
('Radio', 'Reaches remote/low-literacy areas'),
('Television', 'High-impact audio-visual messages'),
('Posters & Pamphlets', 'Displayed / distributed widely'),
('Newspapers / Magazines', 'Literate urban audiences'),
('Social Media & Apps', 'Interactive, real-time campaigns'),
('Mobile Health Vans', 'AV equipment taken to communities'),
('Health Exhibits', 'Museums, fairs, 3-D models'),
],
'advantages': [
'Reaches millions simultaneously',
'Low cost per person',
'Fast awareness creation',
'Reinforces other methods',
],
'disadvantages': [
'Mostly one-way communication',
'Low individual behaviour change',
'Message may be misunderstood',
],
'best_for': 'Awareness campaigns · National immunisation\nEpidemic alerts · Social norm change',
'reach': 'Very High (millions)',
'impact': 'Moderate (awareness)',
},
]
# ═══════════════════════════════════════════════════════════════
# DRAW EACH COLUMN
# ═══════════════════════════════════════════════════════════════
for i, (col, dat) in enumerate(zip(cols, content)):
cx = col['x']
dark, mid, light = col['dark'], col['mid'], col['light']
# -- Column background --
shadow_rect(ax, cx, 1.6, COL_W, 23.9, radius=0.5, zorder=2)
rounded_rect(ax, cx, 1.6, COL_W, 23.9, WHITE, radius=0.5, zorder=3)
# -- Column header bar --
rounded_rect(ax, cx, 23.7, COL_W, 1.85, dark, radius=0.5, zorder=4)
ax.text(cx + COL_W/2, 24.88, col['icon'],
ha='center', va='center', fontsize=22, zorder=5)
ax.text(cx + COL_W/2, 24.2, col['label'],
ha='center', va='center', fontsize=14.5, fontweight='bold',
color=WHITE, zorder=5, linespacing=1.3)
# ── METHODS section ─────────────────────────────────────
SEC_Y = 23.35
rounded_rect(ax, cx+0.15, SEC_Y-0.42, COL_W-0.3, 0.55, mid, radius=0.25, zorder=4)
ax.text(cx + COL_W/2, SEC_Y-0.14, '📋 METHODS',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y_cur = SEC_Y - 0.65
for mname, mdesc in dat['methods']:
# bullet dot
circ = plt.Circle((cx+0.5, y_cur+0.05), 0.09, color=dark, zorder=5)
ax.add_patch(circ)
ax.text(cx+0.7, y_cur+0.05, mname,
ha='left', va='center', fontsize=9.5, fontweight='bold',
color=dark, zorder=5)
ax.text(cx+0.7, y_cur-0.22, mdesc,
ha='left', va='center', fontsize=8.2,
color=TEXT_MID, zorder=5, style='italic')
y_cur -= 0.58
# ── ADVANTAGES section ───────────────────────────────────
ADV_Y = y_cur - 0.1
rounded_rect(ax, cx+0.15, ADV_Y-0.42, COL_W-0.3, 0.55, '#2E7D32', radius=0.25, zorder=4)
ax.text(cx + COL_W/2, ADV_Y-0.14, '✅ ADVANTAGES',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y_cur = ADV_Y - 0.62
for adv in dat['advantages']:
ax.text(cx+0.45, y_cur, '▸', ha='left', va='center', fontsize=10, color='#2E7D32', zorder=5)
ax.text(cx+0.75, y_cur, adv, ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5)
y_cur -= 0.38
# ── DISADVANTAGES section ────────────────────────────────
DIS_Y = y_cur - 0.1
rounded_rect(ax, cx+0.15, DIS_Y-0.42, COL_W-0.3, 0.55, '#B71C1C', radius=0.25, zorder=4)
ax.text(cx + COL_W/2, DIS_Y-0.14, '⚠ DISADVANTAGES',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y_cur = DIS_Y - 0.62
for dis in dat['disadvantages']:
ax.text(cx+0.45, y_cur, '▸', ha='left', va='center', fontsize=10, color='#B71C1C', zorder=5)
ax.text(cx+0.75, y_cur, dis, ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5)
y_cur -= 0.38
# ── REACH & IMPACT badges ────────────────────────────────
BDG_Y = y_cur - 0.15
rounded_rect(ax, cx+0.2, BDG_Y-0.28, (COL_W-0.6)/2-0.1, 0.52, light, radius=0.2, zorder=4)
ax.text(cx+0.2+(COL_W-0.6)/4-0.05, BDG_Y+0.07, '🎯 REACH',
ha='center', va='center', fontsize=7.5, fontweight='bold', color=dark, zorder=5)
ax.text(cx+0.2+(COL_W-0.6)/4-0.05, BDG_Y-0.15, dat['reach'],
ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5)
bx2 = cx+0.2+(COL_W-0.6)/2+0.1
rounded_rect(ax, bx2, BDG_Y-0.28, (COL_W-0.6)/2-0.1, 0.52, light, radius=0.2, zorder=4)
ax.text(bx2+(COL_W-0.6)/4-0.05, BDG_Y+0.07, '💥 IMPACT',
ha='center', va='center', fontsize=7.5, fontweight='bold', color=dark, zorder=5)
ax.text(bx2+(COL_W-0.6)/4-0.05, BDG_Y-0.15, dat['impact'],
ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5)
# ── BEST FOR section ─────────────────────────────────────
BST_Y = BDG_Y - 0.55
rounded_rect(ax, cx+0.15, BST_Y-0.7, COL_W-0.3, 1.0, light, radius=0.3, zorder=4)
ax.text(cx + COL_W/2, BST_Y+0.12, '⭐ BEST USED FOR',
ha='center', va='center', fontsize=9.5, fontweight='bold',
color=dark, zorder=5)
ax.text(cx + COL_W/2, BST_Y-0.35, dat['best_for'],
ha='center', va='center', fontsize=8.2, color=TEXT_MID,
zorder=5, linespacing=1.4)
# ═══════════════════════════════════════════════════════════════
# BOTTOM SUMMARY BAR
# ═══════════════════════════════════════════════════════════════
rounded_rect(ax, 0.3, 0.25, 21.4, 1.2, HEADER_BG, radius=0.4, zorder=3)
ax.text(11, 1.05, '🏆 Key Principle:',
ha='center', va='center', fontsize=13, fontweight='bold', color=GOLD, zorder=4)
ax.text(11, 0.6,
'Effective health education combines ALL THREE methods — Individual + Group + Mass — for maximum impact.',
ha='center', va='center', fontsize=11.5, color=WHITE, zorder=4)
# Arrow strip between columns
for xi in [7.4, 14.6]:
ax.annotate('', xy=(xi+0.2, 13.5), xytext=(xi-0.15, 13.5),
arrowprops=dict(arrowstyle='->', color='#90A4AE', lw=2), zorder=6)
# Source line
ax.text(11, 0.13, 'Source: Park\'s Textbook of Preventive and Social Medicine',
ha='center', va='center', fontsize=8, color='#78909C', zorder=4, style='italic')
plt.tight_layout(pad=0)
plt.savefig('/tmp/workspace/health-education-poster/health_education_poster.png',
dpi=180, bbox_inches='tight', facecolor=BG)
print("Poster saved successfully.")
cd /tmp/workspace/health-education-poster && python create_poster.py 2>&1
~/health-education-poster/create_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/health-education-poster/create_poster.py'
~/health-education-poster/create_poster.py
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch
import numpy as np
fig = plt.figure(figsize=(22, 30), facecolor='#EEF2F7')
ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 22)
ax.set_ylim(0, 30)
ax.axis('off')
# ── Colour palette ──────────────────────────────────────────────
BG = '#EEF2F7'
HEADER_BG = '#0D2137'
IND_DARK = '#1A5276'
IND_MID = '#2980B9'
IND_LIGHT = '#D6EAF8'
GRP_DARK = '#1E8449'
GRP_MID = '#27AE60'
GRP_LIGHT = '#D5F5E3'
MAS_DARK = '#BA4A00'
MAS_MID = '#E67E22'
MAS_LIGHT = '#FDEBD0'
TEXT_DARK = '#1C2833'
TEXT_MID = '#424949'
WHITE = '#FFFFFF'
GOLD = '#F4D03F'
ADV_BG = '#1A6B3A'
DIS_BG = '#922B21'
def rbox(ax, x, y, w, h, fc, ec='none', lw=0, radius=0.35, alpha=1.0, zorder=2):
p = FancyBboxPatch((x, y), w, h,
boxstyle=f"round,pad={radius}",
facecolor=fc, edgecolor=ec,
linewidth=lw, alpha=alpha, zorder=zorder)
ax.add_patch(p)
def shadow(ax, x, y, w, h, radius=0.35, zorder=1):
p = FancyBboxPatch((x+0.14, y-0.14), w, h,
boxstyle=f"round,pad={radius}",
facecolor='#A9B7C6', edgecolor='none',
alpha=0.4, zorder=zorder)
ax.add_patch(p)
# ═══════════════════════════════════════════════════════════════
# HEADER BANNER
# ═══════════════════════════════════════════════════════════════
rbox(ax, 0.3, 27.9, 21.4, 1.85, HEADER_BG, radius=0.5, zorder=3)
# Gold decorative stripe
rbox(ax, 0.3, 27.9, 21.4, 0.18, GOLD, radius=0.1, zorder=4)
rbox(ax, 0.3, 29.57, 21.4, 0.18, GOLD, radius=0.1, zorder=4)
ax.text(11, 29.05, 'METHODS OF HEALTH EDUCATION',
ha='center', va='center', fontsize=28, fontweight='bold',
color=WHITE, zorder=5, family='DejaVu Sans')
ax.text(11, 28.42, 'Comparative Overview | Individual vs Group vs Mass (Community)',
ha='center', va='center', fontsize=13.5, color='#AED6F1', zorder=5)
# ═══════════════════════════════════════════════════════════════
# COLUMN SETUP
# ═══════════════════════════════════════════════════════════════
COL_W = 6.8
col_cfg = [
{'x': 0.45, 'dark': IND_DARK, 'mid': IND_MID, 'light': IND_LIGHT,
'label': 'INDIVIDUAL\nMETHODS', 'num': '1'},
{'x': 7.65, 'dark': GRP_DARK, 'mid': GRP_MID, 'light': GRP_LIGHT,
'label': 'GROUP\nMETHODS', 'num': '2'},
{'x': 14.85, 'dark': MAS_DARK, 'mid': MAS_MID, 'light': MAS_LIGHT,
'label': 'MASS\nMETHODS', 'num': '3'},
]
content = [
{
'methods': [
('Personal Counseling', 'One-to-one advice from health worker'),
('Home Visits', 'Worker visits client at home'),
('Bedside Teaching', 'Education during clinical encounter'),
('Interview', 'Structured health dialogue with patient'),
],
'advantages': [
'Highly personalised message',
'Two-way communication',
'Builds trust and rapport',
'Addresses individual barriers',
],
'disadvantages': [
'Very time-consuming',
'Limited reach, not scalable',
'Requires trained personnel',
],
'best_for': 'Behaviour change * Chronic disease management\nAntenatal care * Family planning counseling',
'reach': 'Low (1 person at a time)',
'impact': 'Very High',
},
{
'methods': [
('Lecture', 'Didactic talk to an assembled group'),
('Group Discussion', 'Facilitated participatory dialogue'),
('Role Play / Drama', 'Acting out real health scenarios'),
('Demonstration', 'Show-and-do: ORS, hand washing...'),
('Workshop / Seminar', 'Intensive skill-building session'),
('Symposium / Panel', 'Expert multi-perspective talks'),
('Buzz Groups', 'Mini sub-group rapid discussions'),
],
'advantages': [
'Balances reach and interaction',
'Peer learning and group influence',
'Effective for attitude change',
'Skill building is possible',
],
'disadvantages': [
'Needs a skilled facilitator',
'Group dynamics may hinder progress',
'Harder to tailor the message',
],
'best_for': 'Attitude & skill change * School health\nTraining health workers * Community meetings',
'reach': 'Medium (10 - 100 people)',
'impact': 'High',
},
{
'methods': [
('Radio', 'Reaches remote and low-literacy areas'),
('Television', 'High-impact audio-visual messages'),
('Posters & Pamphlets', 'Displayed or distributed widely'),
('Newspapers/Magazines', 'Literate urban audiences'),
('Social Media & Apps', 'Interactive, real-time campaigns'),
('Mobile Health Vans', 'AV equipment taken to communities'),
('Health Exhibits', 'Museums, fairs, 3-D models'),
],
'advantages': [
'Reaches millions simultaneously',
'Low cost per person reached',
'Fast awareness creation',
'Reinforces other methods',
],
'disadvantages': [
'Mostly one-way communication',
'Low individual behaviour change',
'Message may be misunderstood',
],
'best_for': 'Awareness campaigns * National immunisation\nEpidemic alerts * Social norm change',
'reach': 'Very High (millions)',
'impact': 'Moderate (awareness)',
},
]
# ═══════════════════════════════════════════════════════════════
# DRAW COLUMNS
# ═══════════════════════════════════════════════════════════════
for i, (col, dat) in enumerate(zip(col_cfg, content)):
cx = col['x']
dark, mid, light = col['dark'], col['mid'], col['light']
# Column card background
shadow(ax, cx, 1.55, COL_W, 25.9, radius=0.5, zorder=2)
rbox(ax, cx, 1.55, COL_W, 25.9, WHITE, radius=0.5, zorder=3)
# Column header
rbox(ax, cx, 25.65, COL_W, 1.8, dark, radius=0.5, zorder=4)
# Big number circle
circ = plt.Circle((cx + 0.7, 26.58), 0.42, color=GOLD, zorder=5)
ax.add_patch(circ)
ax.text(cx+0.7, 26.58, col['num'],
ha='center', va='center', fontsize=16, fontweight='bold',
color=HEADER_BG, zorder=6)
ax.text(cx+1.5, 26.62, col['label'],
ha='left', va='center', fontsize=14, fontweight='bold',
color=WHITE, zorder=5, linespacing=1.3)
# ── METHODS ─────────────────────────────────────────────
SEC_TOP = 25.35
rbox(ax, cx+0.15, SEC_TOP-0.48, COL_W-0.3, 0.55, mid, radius=0.25, zorder=4)
ax.text(cx+COL_W/2, SEC_TOP-0.2, 'METHODS',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y = SEC_TOP - 0.72
for mname, mdesc in dat['methods']:
# colored tag bar
rbox(ax, cx+0.25, y-0.18, COL_W-0.55, 0.45, light, radius=0.18, zorder=4)
# dot
c = plt.Circle((cx+0.52, y+0.04), 0.08, color=dark, zorder=5)
ax.add_patch(c)
ax.text(cx+0.7, y+0.04, mname,
ha='left', va='center', fontsize=9.5, fontweight='bold',
color=dark, zorder=5)
ax.text(cx+0.7, y-0.17, mdesc,
ha='left', va='center', fontsize=8,
color=TEXT_MID, zorder=5, style='italic')
y -= 0.6
# ── ADVANTAGES ──────────────────────────────────────────
ADV_TOP = y - 0.1
rbox(ax, cx+0.15, ADV_TOP-0.48, COL_W-0.3, 0.55, ADV_BG, radius=0.25, zorder=4)
ax.text(cx+COL_W/2, ADV_TOP-0.2, '+ ADVANTAGES',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y = ADV_TOP - 0.65
for adv in dat['advantages']:
ax.plot([cx+0.42, cx+0.55], [y+0.04, y+0.04], lw=2.5, color='#1E8449', zorder=5)
ax.text(cx+0.7, y+0.04, adv,
ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5)
y -= 0.4
# ── DISADVANTAGES ───────────────────────────────────────
DIS_TOP = y - 0.1
rbox(ax, cx+0.15, DIS_TOP-0.48, COL_W-0.3, 0.55, DIS_BG, radius=0.25, zorder=4)
ax.text(cx+COL_W/2, DIS_TOP-0.2, '- DISADVANTAGES',
ha='center', va='center', fontsize=11, fontweight='bold',
color=WHITE, zorder=5)
y = DIS_TOP - 0.65
for dis in dat['disadvantages']:
ax.plot([cx+0.42, cx+0.55], [y+0.04, y+0.04], lw=2.5, color='#922B21', zorder=5)
ax.text(cx+0.7, y+0.04, dis,
ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5)
y -= 0.4
# ── REACH & IMPACT badges ────────────────────────────────
BDG_Y = y - 0.2
half = (COL_W - 0.55) / 2
# Reach badge
rbox(ax, cx+0.2, BDG_Y-0.32, half-0.05, 0.58, light, radius=0.22, zorder=4, lw=0)
ax.text(cx+0.2+half/2-0.03, BDG_Y+0.1, 'REACH',
ha='center', va='center', fontsize=8, fontweight='bold', color=dark, zorder=5)
ax.text(cx+0.2+half/2-0.03, BDG_Y-0.18, dat['reach'],
ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5, wrap=True)
# Impact badge
bx2 = cx + 0.2 + half + 0.1
rbox(ax, bx2, BDG_Y-0.32, half-0.05, 0.58, light, radius=0.22, zorder=4, lw=0)
ax.text(bx2+half/2-0.03, BDG_Y+0.1, 'IMPACT',
ha='center', va='center', fontsize=8, fontweight='bold', color=dark, zorder=5)
ax.text(bx2+half/2-0.03, BDG_Y-0.18, dat['impact'],
ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5)
# ── BEST FOR ────────────────────────────────────────────
BST_Y = BDG_Y - 0.62
rbox(ax, cx+0.15, BST_Y-0.72, COL_W-0.3, 1.0, light, radius=0.3, zorder=4,
ec=dark, lw=1.5)
ax.text(cx+COL_W/2, BST_Y+0.12, 'BEST USED FOR',
ha='center', va='center', fontsize=9.5, fontweight='bold',
color=dark, zorder=5)
ax.text(cx+COL_W/2, BST_Y-0.36, dat['best_for'],
ha='center', va='center', fontsize=8, color=TEXT_MID,
zorder=5, linespacing=1.5)
# ─── Dividers between columns ──────────────────────────────────
for xd in [7.4, 14.6]:
ax.plot([xd, xd], [2.0, 27.5], lw=1, color='#BDC3C7', linestyle='--', zorder=2)
# ═══════════════════════════════════════════════════════════════
# BOTTOM SUMMARY BAR
# ═══════════════════════════════════════════════════════════════
shadow(ax, 0.3, 0.22, 21.4, 1.2, zorder=2)
rbox(ax, 0.3, 0.22, 21.4, 1.2, HEADER_BG, radius=0.45, zorder=3)
rbox(ax, 0.3, 0.22, 21.4, 0.12, GOLD, radius=0.1, zorder=4)
rbox(ax, 0.3, 1.3, 21.4, 0.12, GOLD, radius=0.1, zorder=4)
ax.text(11, 1.06, 'KEY PRINCIPLE:',
ha='center', va='center', fontsize=12, fontweight='bold', color=GOLD, zorder=4)
ax.text(11, 0.65,
'Effective health education combines ALL THREE methods — Individual + Group + Mass — for maximum reach and impact.',
ha='center', va='center', fontsize=11, color=WHITE, zorder=4)
# Source note
ax.text(11, 0.1, 'Source: Park\'s Textbook of Preventive and Social Medicine',
ha='center', va='center', fontsize=8, color='#7F8C8D', zorder=4, style='italic')
plt.savefig('/tmp/workspace/health-education-poster/health_education_poster.png',
dpi=180, bbox_inches='tight', facecolor=BG)
print("Poster saved successfully.")
cat > /tmp/workspace/health-education-poster/create_poster.py << 'PYEOF' import matplotlib.pyplot as plt import matplotlib.patches as mpatches from matplotlib.patches import FancyBboxPatch import numpy as np fig = plt.figure(figsize=(22, 30), facecolor='#EEF2F7') ax = fig.add_axes([0, 0, 1, 1]) ax.set_xlim(0, 22) ax.set_ylim(0, 30) ax.axis('off') BG = '#EEF2F7' HEADER_BG = '#0D2137' IND_DARK = '#1A5276' IND_MID = '#2980B9' IND_LIGHT = '#D6EAF8' GRP_DARK = '#1E8449' GRP_MID = '#27AE60' GRP_LIGHT = '#D5F5E3' MAS_DARK = '#BA4A00' MAS_MID = '#E67E22' MAS_LIGHT = '#FDEBD0' TEXT_DARK = '#1C2833' TEXT_MID = '#424949' WHITE = '#FFFFFF' GOLD = '#F4D03F' ADV_BG = '#1A6B3A' DIS_BG = '#922B21' def rbox(ax, x, y, w, h, fc, ec='none', lw=0, radius=0.35, alpha=1.0, zorder=2): p = FancyBboxPatch((x, y), w, h, boxstyle=f"round,pad={radius}", facecolor=fc, edgecolor=ec, linewidth=lw, alpha=alpha, zorder=zorder) ax.add_patch(p) def shadow(ax, x, y, w, h, radius=0.35, zorder=1): p = FancyBboxPatch((x+0.14, y-0.14), w, h, boxstyle=f"round,pad={radius}", facecolor='#A9B7C6', edgecolor='none', alpha=0.4, zorder=zorder) ax.add_patch(p) # HEADER rbox(ax, 0.3, 27.9, 21.4, 1.85, HEADER_BG, radius=0.5, zorder=3) rbox(ax, 0.3, 27.9, 21.4, 0.18, GOLD, radius=0.1, zorder=4) rbox(ax, 0.3, 29.57, 21.4, 0.18, GOLD, radius=0.1, zorder=4) ax.text(11, 29.05, 'METHODS OF HEALTH EDUCATION', ha='center', va='center', fontsize=28, fontweight='bold', color=WHITE, zorder=5) ax.text(11, 28.42, 'Comparative Overview | Individual vs Group vs Mass (Community)', ha='center', va='center', fontsize=13.5, color='#AED6F1', zorder=5) COL_W = 6.8 col_cfg = [ {'x': 0.45, 'dark': IND_DARK, 'mid': IND_MID, 'light': IND_LIGHT, 'label': 'INDIVIDUAL\nMETHODS', 'num': '1'}, {'x': 7.65, 'dark': GRP_DARK, 'mid': GRP_MID, 'light': GRP_LIGHT, 'label': 'GROUP\nMETHODS', 'num': '2'}, {'x': 14.85, 'dark': MAS_DARK, 'mid': MAS_MID, 'light': MAS_LIGHT, 'label': 'MASS\nMETHODS', 'num': '3'}, ] content = [ { 'methods': [ ('Personal Counseling', 'One-to-one advice from health worker'), ('Home Visits', 'Worker visits client at home'), ('Bedside Teaching', 'Education during clinical encounter'), ('Interview', 'Structured health dialogue with patient'), ], 'advantages': ['Highly personalised message','Two-way communication','Builds trust and rapport','Addresses individual barriers'], 'disadvantages': ['Very time-consuming','Limited reach, not scalable','Requires trained personnel'], 'best_for': 'Behaviour change * Chronic disease management\nAntenatal care * Family planning counseling', 'reach': 'Low (1 person at a time)', 'impact': 'Very High', }, { 'methods': [ ('Lecture', 'Didactic talk to an assembled group'), ('Group Discussion', 'Facilitated participatory dialogue'), ('Role Play / Drama', 'Acting out real health scenarios'), ('Demonstration', 'Show-and-do: ORS, hand washing...'), ('Workshop / Seminar', 'Intensive skill-building session'), ('Symposium / Panel', 'Expert multi-perspective talks'), ('Buzz Groups', 'Mini sub-group rapid discussions'), ], 'advantages': ['Balances reach and interaction','Peer learning and group influence','Effective for attitude change','Skill building is possible'], 'disadvantages': ['Needs a skilled facilitator','Group dynamics may hinder','Harder to tailor the message'], 'best_for': 'Attitude & skill change * School health\nTraining health workers * Community meetings', 'reach': 'Medium (10 - 100 people)', 'impact': 'High', }, { 'methods': [ ('Radio', 'Reaches remote and low-literacy areas'), ('Television', 'High-impact audio-visual messages'), ('Posters & Pamphlets', 'Displayed or distributed widely'), ('Newspapers/Magazines', 'Literate urban audiences'), ('Social Media & Apps', 'Interactive, real-time campaigns'), ('Mobile Health Vans', 'AV equipment taken to communities'), ('Health Exhibits', 'Museums, fairs, 3-D models'), ], 'advantages': ['Reaches millions simultaneously','Low cost per person reached','Fast awareness creation','Reinforces other methods'], 'disadvantages': ['Mostly one-way communication','Low individual behaviour change','Message may be misunderstood'], 'best_for': 'Awareness campaigns * National immunisation\nEpidemic alerts * Social norm change', 'reach': 'Very High (millions)', 'impact': 'Moderate (awareness)', }, ] for i, (col, dat) in enumerate(zip(col_cfg, content)): cx = col['x'] dark, mid, light = col['dark'], col['mid'], col['light'] shadow(ax, cx, 1.55, COL_W, 25.9, radius=0.5, zorder=2) rbox(ax, cx, 1.55, COL_W, 25.9, WHITE, radius=0.5, zorder=3) rbox(ax, cx, 25.65, COL_W, 1.8, dark, radius=0.5, zorder=4) circ = plt.Circle((cx + 0.7, 26.58), 0.42, color=GOLD, zorder=5) ax.add_patch(circ) ax.text(cx+0.7, 26.58, col['num'], ha='center', va='center', fontsize=16, fontweight='bold', color=HEADER_BG, zorder=6) ax.text(cx+1.5, 26.62, col['label'], ha='left', va='center', fontsize=14, fontweight='bold', color=WHITE, zorder=5, linespacing=1.3) # METHODS SEC_TOP = 25.35 rbox(ax, cx+0.15, SEC_TOP-0.48, COL_W-0.3, 0.55, mid, radius=0.25, zorder=4) ax.text(cx+COL_W/2, SEC_TOP-0.2, 'METHODS', ha='center', va='center', fontsize=11, fontweight='bold', color=WHITE, zorder=5) y = SEC_TOP - 0.72 for mname, mdesc in dat['methods']: rbox(ax, cx+0.25, y-0.18, COL_W-0.55, 0.45, light, radius=0.18, zorder=4) c = plt.Circle((cx+0.52, y+0.04), 0.08, color=dark, zorder=5) ax.add_patch(c) ax.text(cx+0.7, y+0.04, mname, ha='left', va='center', fontsize=9.5, fontweight='bold', color=dark, zorder=5) ax.text(cx+0.7, y-0.17, mdesc, ha='left', va='center', fontsize=8, color=TEXT_MID, zorder=5, style='italic') y -= 0.6 # ADVANTAGES ADV_TOP = y - 0.1 rbox(ax, cx+0.15, ADV_TOP-0.48, COL_W-0.3, 0.55, ADV_BG, radius=0.25, zorder=4) ax.text(cx+COL_W/2, ADV_TOP-0.2, '+ ADVANTAGES', ha='center', va='center', fontsize=11, fontweight='bold', color=WHITE, zorder=5) y = ADV_TOP - 0.65 for adv in dat['advantages']: ax.plot([cx+0.42, cx+0.55], [y+0.04, y+0.04], lw=2.5, color='#1E8449', zorder=5) ax.text(cx+0.7, y+0.04, adv, ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5) y -= 0.4 # DISADVANTAGES DIS_TOP = y - 0.1 rbox(ax, cx+0.15, DIS_TOP-0.48, COL_W-0.3, 0.55, DIS_BG, radius=0.25, zorder=4) ax.text(cx+COL_W/2, DIS_TOP-0.2, '- DISADVANTAGES', ha='center', va='center', fontsize=11, fontweight='bold', color=WHITE, zorder=5) y = DIS_TOP - 0.65 for dis in dat['disadvantages']: ax.plot([cx+0.42, cx+0.55], [y+0.04, y+0.04], lw=2.5, color='#922B21', zorder=5) ax.text(cx+0.7, y+0.04, dis, ha='left', va='center', fontsize=9, color=TEXT_DARK, zorder=5) y -= 0.4 # REACH & IMPACT badges BDG_Y = y - 0.2 half = (COL_W - 0.55) / 2 rbox(ax, cx+0.2, BDG_Y-0.32, half-0.05, 0.58, light, radius=0.22, zorder=4) ax.text(cx+0.2+half/2-0.03, BDG_Y+0.1, 'REACH', ha='center', va='center', fontsize=8, fontweight='bold', color=dark, zorder=5) ax.text(cx+0.2+half/2-0.03, BDG_Y-0.18, dat['reach'], ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5) bx2 = cx + 0.2 + half + 0.1 rbox(ax, bx2, BDG_Y-0.32, half-0.05, 0.58, light, radius=0.22, zorder=4) ax.text(bx2+half/2-0.03, BDG_Y+0.1, 'IMPACT', ha='center', va='center', fontsize=8, fontweight='bold', color=dark, zorder=5) ax.text(bx2+half/2-0.03, BDG_Y-0.18, dat['impact'], ha='center', va='center', fontsize=7.2, color=TEXT_MID, zorder=5) # BEST FOR BST_Y = BDG_Y - 0.62 rbox(ax, cx+0.15, BST_Y-0.72, COL_W-0.3, 1.0, light, radius=0.3, zorder=4, ec=dark, lw=1.5) ax.text(cx+COL_W/2, BST_Y+0.12, 'BEST USED FOR', ha='center', va='center', fontsize=9.5, fontweight='bold', color=dark, zorder=5) ax.text(cx+COL_W/2, BST_Y-0.36, dat['best_for'], ha='center', va='center', fontsize=8, color=TEXT_MID, zorder=5, linespacing=1.5) # Dividers for xd in [7.4, 14.6]: ax.plot([xd, xd], [2.0, 27.5], lw=1, color='#BDC3C7', linestyle='--', zorder=2) # FOOTER shadow(ax, 0.3, 0.22, 21.4, 1.2, zorder=2) rbox(ax, 0.3, 0.22, 21.4, 1.2, HEADER_BG, radius=0.45, zorder=3) rbox(ax, 0.3, 0.22, 21.4, 0.12, GOLD, radius=0.1, zorder=4) rbox(ax, 0.3, 1.3, 21.4, 0.12, GOLD, radius=0.1, zorder=4) ax.text(11, 1.06, 'KEY PRINCIPLE:', ha='center', va='center', fontsize=12, fontweight='bold', color=GOLD, zorder=4) ax.text(11, 0.65, 'Effective health education combines ALL THREE methods - Individual + Group + Mass - for maximum reach and impact.', ha='center', va='center', fontsize=11, color=WHITE, zorder=4) ax.text(11, 0.1, "Source: Park's Textbook of Preventive and Social Medicine", ha='center', va='center', fontsize=8, color='#7F8C8D', zorder=4, style='italic') plt.savefig('/tmp/workspace/health-education-poster/health_education_poster.png', dpi=180, bbox_inches='tight', facecolor=BG) print("Done.") PYEOF python /tmp/workspace/health-education-poster/create_poster.py 2>&1
health education poster
Image · PNG
| Column | Color Theme | Content |
|---|---|---|
| 1 - Individual Methods | Blue | Counseling, Home Visits, Bedside Teaching, Interview |
| 2 - Group Methods | Green | Lecture, Discussion, Role Play, Demonstration, Workshop, Symposium, Buzz Groups |
| 3 - Mass Methods | Orange | Radio, TV, Posters, Newspapers, Social Media, Mobile Vans, Health Exhibits |