The normal mean electrical axis of ventricular depolarisation lies between what angles
"electrocardiography"[MeSH Terms] AND "electrical axis"
normal QRS mean electrical axis adults -30 +90 degrees ECG authoritative
Create a quick-reference PDF on ECG axis interpretation0 to+ 110
"electrocardiography"[MeSH Terms] AND "electrical axis"
ECG QRS axis interpretation normal 0 to +110 lead I aVF clinical reference
~/
mkdir -p "/tmp/workspace/ecg-axis-quick-reference/src" "/tmp/workspace/ecg-axis-quick-reference/output"
python - <<'PY' from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from reportlab.lib import colors from reportlab.lib.units import inch from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.pdfmetrics import registerFontFamily from reportlab.lib.colors import HexColor from reportlab.lib.utils import simpleSplit import os out='/tmp/workspace/ecg-axis-quick-reference/output/ECG_Axis_Interpretation_Quick_Reference.pdf' W,H=letter c=canvas.Canvas(out,pagesize=letter) c.setTitle('ECG Axis Interpretation - Quick Reference') c.setAuthor('Orris') # Colours navy=HexColor('#112A46'); blue=HexColor('#1877B8'); teal=HexColor('#0F8B8D') ink=HexColor('#17212B'); muted=HexColor('#536271'); light=HexColor('#EFF5F8') green=HexColor('#D9F1E5'); amber=HexColor('#FFF0CC'); red=HexColor('#FBE0E0'); purple=HexColor('#E8E2F5') white=colors.white # Header c.setFillColor(navy); c.rect(0,H-104,W,104,fill=1,stroke=0) c.setFillColor(white); c.setFont('Helvetica-Bold',23); c.drawString(40,H-50,'ECG AXIS INTERPRETATION') c.setFont('Helvetica',10.5); c.setFillColor(HexColor('#CFE1F2')); c.drawString(40,H-72,'Adult frontal-plane QRS axis | fast bedside method') c.setFillColor(white); c.setFont('Helvetica-Bold',9); c.roundRect(W-176,H-78,136,28,14,fill=0,stroke=1); c.drawCentredString(W-108,H-67,'QUICK REFERENCE') # margins x=40; right=W-40; y=H-126 def title(txt,y): c.setFillColor(navy); c.setFont('Helvetica-Bold',13); c.drawString(x,y,txt) c.setStrokeColor(HexColor('#B9D7E8')); c.setLineWidth(1); c.line(x,y-5,right,y-5) return y-22 def box(x0,y0,w,h,fill,heading,body,heading_color=navy): c.setFillColor(fill); c.roundRect(x0,y0-h,w,h,8,fill=1,stroke=0) c.setFillColor(heading_color); c.setFont('Helvetica-Bold',10); c.drawString(x0+10,y0-17,heading) c.setFillColor(ink); c.setFont('Helvetica',8.8) yy=y0-32 for line in body: c.drawString(x0+10,yy,line); yy-=12 # Key definition c.setFillColor(light); c.roundRect(x,y-55,right-x,55,8,fill=1,stroke=0) c.setFillColor(ink); c.setFont('Helvetica-Bold',10); c.drawString(x+12,y-18,'What is the QRS axis?') c.setFont('Helvetica',9.3); c.drawString(x+12,y-34,'The average direction of ventricular depolarisation in the frontal plane, reported in degrees.') y-=76 # Ranges y=title('1. AXIS RANGES',y) colw=(right-x-18)/4 ranges=[('LEFT AXIS','−90° to 0°',red),('NORMAL','0° to +110°',green),('RIGHT AXIS','+110° to +180°',amber),('EXTREME','−90° to ±180°',purple)] for i,(a,b,fill) in enumerate(ranges): xx=x+i*(colw+6) c.setFillColor(fill); c.roundRect(xx,y-51,colw,47,6,fill=1,stroke=0) c.setFillColor(navy); c.setFont('Helvetica-Bold',8); c.drawCentredString(xx+colw/2,y-19,a) c.setFillColor(ink); c.setFont('Helvetica-Bold',10.7); c.drawCentredString(xx+colw/2,y-37,b) y-=72 # Method y=title('2. TWO-LEAD QUADRANT METHOD',y) c.setFillColor(muted); c.setFont('Helvetica',8.8); c.drawString(x,y,'Use the net QRS deflection (predominantly positive or negative) in leads I and aVF.') y-=14 # quadrant table rows=[('Lead I','Lead aVF','Axis interpretation','Approximate range'),('Positive','Positive','Normal axis','0° to +110°*'),('Positive','Negative','Leftward axis','Check lead II'),('Negative','Positive','Right axis deviation','+110° to +180°'),('Negative','Negative','Extreme axis deviation','−90° to ±180°')] widths=[78,78,175,153]; rh=22 for r,row in enumerate(rows): yy=y-r*rh for j,val in enumerate(row): xx=x+sum(widths[:j]) fill=navy if r==0 else (HexColor('#F5F8FA') if r%2 else white) c.setFillColor(fill); c.rect(xx,yy-rh,widths[j],rh,fill=1,stroke=0) c.setStrokeColor(HexColor('#D4E0E7')); c.rect(xx,yy-rh,widths[j],rh,fill=0,stroke=1) c.setFillColor(white if r==0 else ink); c.setFont('Helvetica-Bold' if r==0 else 'Helvetica',8.3) c.drawCentredString(xx+widths[j]/2,yy-14,val) y-=5*rh+12 c.setFillColor(muted); c.setFont('Helvetica-Oblique',7.8); c.drawString(x,y,'*This sheet uses your requested 0° to +110° normal range. Many adult ECG references instead use −30° to +90°.') y-=22 # Check lead II leftw=310; gap=14; rw=right-x-leftw-gap box(x,y,leftw,86,HexColor('#F5F9FC'),'3. REFINE A LEFTWARD AXIS',[ 'If lead I is positive and aVF is negative:', '• Lead II positive: axis is usually > −30° (often normal by standard adult criteria).', '• Lead II negative: left-axis deviation is more likely (≤ −30°).' ]) box(x+leftw+gap,y,rw,86,HexColor('#F5F9FC'),'LANDMARK LEAD ANGLES',[ 'I = 0° II = +60° aVF = +90°', 'aVL = −30° III = +120° aVR = −150°' ]) y-=104 # Isoelectric method y=title('4. ISOELECTRIC-LEAD METHOD',y) c.setFillColor(ink); c.setFont('Helvetica',9) steps=['1. Find the limb lead with the most equiphasic (isoelectric) QRS.', '2. The mean QRS axis is approximately perpendicular (±90°) to that lead.', '3. Choose the correct perpendicular direction by finding where the QRS is positive.'] for st in steps: c.drawString(x,y,st); y-=14 y-=5 # Clinical caution c.setFillColor(HexColor('#FFF5E2')); c.roundRect(x,y-56,right-x,56,8,fill=1,stroke=0) c.setFillColor(HexColor('#8A5700')); c.setFont('Helvetica-Bold',10); c.drawString(x+12,y-18,'Interpret in context') c.setFillColor(ink); c.setFont('Helvetica',8.8); c.drawString(x+12,y-34,'Axis is only one ECG feature. Confirm lead placement and assess rhythm, QRS duration, chamber enlargement, infarction, and conduction defects.') c.setFont('Helvetica-Oblique',7.8); c.setFillColor(muted); c.drawString(x+12,y-48,'Paediatric axis ranges differ by age. A wide QRS or paced rhythm can make simple axis interpretation less reliable.') y-=72 # footer c.setStrokeColor(HexColor('#C8D7E2')); c.line(x,38,right,38) c.setFillColor(muted); c.setFont('Helvetica',7.3); c.drawString(x,25,'Educational quick reference only. Not a substitute for clinical assessment or local ECG reporting standards.') c.drawRightString(right,25,'Source basis: Guyton & Hall; standard ECG axis conventions') c.save() print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/ecg-axis-quick-reference/output/ECG_Axis_Interpretation_Quick_Reference.pdf' r=PdfReader(p) print('pages=',len(r.pages),'bytes=',__import__('os').path.getsize(p)) text=r.pages[0].extract_text() print(text[:1000]) assert len(r.pages)==1 and '0° to +110°' in text and 'TWO-LEAD QUADRANT METHOD' in text PY
ECG Axis Interpretation Quick Reference
PDF Document · PDF