5.4.19 · D3 · Coding › Scientific Computing (Python) › Publication-quality figures — LaTeX labels, colormaps, DPI
Yeh page parent recipe ko tab tak drill karta hai jab tak koi bhi scenario surprise na kar sake . Hum har knob ko — D ots, L etters, C olors — aur unke andar chhupe har edge case ko ek-ek karke cover karte hain.
Intuition Pehle "scenario matrix" kyun?
Ek publication figure sirf kuch giney-chune tareekon se fail hoti hai. Agar tum pehle se saare tareekon ki list bana lo, phir har tarike ke liye ek example solve karo, toh tumne literally poora space cover kar liya. Koi bhi exam twist is grid ke bahar nahi hoti.
Is poore page mein, DPI ka matlab hai dots per inch (DPI) — final printed figure ke ek inch mein kitne pixels packed hain. Hum ise matrix mein use karne se pehle neeche define aur re-derive karte hain.
Har figure problem in cells mein se kisi ek mein aati hai. Neeche ke examples mein us cell ka tag lagaya gaya hai jis mein woh fit hoti hai. Kul nine cells (A1–A4, L1, C1–C3, W1, X1) hain aur nine examples (Ex 1–Ex 9) hain — ek per cell, koi gap nahi. (Yahaan DPI = dots per inch.)
Cell
Knob
Scenario kya hai
Example
A1
Dots
figsize + DPI diya → pixels nikalo
Ex 1
A2
Dots
pixels + DPI diya → inches nikalo (inverse)
Ex 2
A3
Dots
degenerate : DPI badhaya lekin figsize default par choda → font chhota ho gaya
Ex 3
A4
Dots
limiting : vector (PDF), DPI → "infinite"
Ex 4
L1
Letters
raw-string escape trap (\a, \n, \t)
Ex 5
C1
Colors
low→high data ke liye sequential map (koi centre nahi)
Ex 6
C2
Colors
centred case : data ka ek meaningful zero centre hai → diverging
Ex 7
C3
Colors
jet ka grayscale / colorblind failure
Ex 8
W1
Mixed
real-world word problem (double-column poster)
Ex 9a
X1
Mixed
exam twist: unit conversion cm → inches, physical font size
Ex 9b
Hum number tools pehle banate hain, phir use karte hain. Yahan sab kuch ek multiplication ya uska inverse hai — dekho Dimensional analysis kyun units arithmetic guide karti hain.
Definition Is page par use hone wale symbols aur units
∣ ψ ∣ 2 — ek probability density : koi bhi non-negative quantity jo kehti hai "yahaan kitना stuff hai." Tumhe physics ki zaroorat nahi; ise ek number ≥ 0 samjho jo hum heatmap par colour karte hain. Bars ∣ ⋅ ∣ ka matlab "magnitude" hai isliye value kabhi negative nahi hoti.
Δ T — ek temperature anomaly (Greek capital delta Δ ka matlab "normal se change"): negative, zero, ya positive ho sakta hai.
pt (point) — typographic unit of length, defined hai 1 pt = 1/72 inch ke roop mein. Yeh printing industry ka fixed standard hai (ek "pica point"); font sizes hamesha points mein di jaati hain. Hum ise ek definition ki tarah lete hain, jaise "1 foot = 12 inches."
L (luminance) — kisi colour ki perceived brightness , yaani grayscale mein woh kaisa dikhta hai. Ek standard recipe (Rec. 601) hai L = 0.299 R + 0.587 G + 0.114 B jahan red/green/blue mein se har ek [ 0 , 1 ] mein hai; green ka weight sabse bada hai kyunki aankh green ke liye sabse zyada sensitive hai.
Figure 1 (neeche). Ek single 1-inch bar (blue arrow) jisme D evenly spaced yellow dots hain — yahi "dots per inch" dikhta hai . Char green boxes left-to-right stack hain jo w = 4 inches of width dikhate hain; red arrow poore w inches span karta hai. Un inches mein saare yellow dots count karo aur tumhe w ⋅ D pixels milte hain — picture hi formula P x = w ⋅ D hai.
Figure 1: Per-inch dot count ko stack karna. Blue = ek inch aur uske D dots; green = width ke w inches; red = total width. Total dots across = w × D = pixels.
Figure mein blue bar dekho: yeh 1 inch lamba hai aur D dots hold karta hai. w aise stack karo aur tumhare paas w ⋅ D dots across ho jaate hain. Multiplication yahaan bas yahi hai — per-inch dot count ki repeated stacking.
Worked example Single-column figure
Ek journal column 3.5 in wide, 2.6 in tall hai, 300 dpi par print hoti hai. Save hone wali PNG mein kitne pixels honge?
Forecast: aage padhne se pehle width pixels mein guess karo. 1000 se zyada? Kam?
Knobs identify karo. w = 3.5 , h = 2.6 , D = 300 .
Yeh step kyun? P = w D mein plug karne se pehle har symbol ke paas ek number aur ek unit honi chahiye.
Width multiply karo. P x = 3.5 × 300 = 1050 .
Kyun? Yahi frozen "per" apna cancellation kar raha hai: inches × dots/inch = dots.
Height multiply karo. P y = 2.6 × 300 = 780 .
Kyun? Height same DPI use karta hai — DPI poori image ke liye ek number hai, har axis ke liye alag nahi.
Answer: 1050 × 780 px.
Verify: wapas divide karo — 1050/300 = 3.5 in, 780/300 = 2.6 in. Units wapas inches mein aa jaate hain, isliye arithmetic consistent hai.
Worked example Tumhe pixels diye gaye hain, inches chahiye
Ek collaborator 1800 × 1200 px image bhejta hai aur kehta hai yeh "600 dpi par print honi chahiye." Paper par yeh physically kitni badi hogi?
Forecast: Ex 1 ke double DPI par, kya same pixel count ek bada ya chhota printed picture dega?
Formula rearrange karo. P x = w D se w = P x / D solve karo.
Yeh step kyun? Humein product (pixels) aur ek factor (DPI) pata hai; division woh tool hai jo doosra factor recover karta hai. Division Ex 1 mein multiplication ka inverse hai.
Width. w = 1800/600 = 3.0 in.
Divide kyun, multiply kyun nahi? Units track karo: [ dots / inch ] [ dots ] = [ dots ] × [ dots ] [ inch ] = [ inch ] . Dots cancel ho jaate hain aur inches bachte hain — wahi cancellation jaise Ex 1 mein, bas backwards. Zyada dots per inch cramped hain matlab same dots kam inches span karte hain, isliye hum divide karte hain.
Height. h = 1200/600 = 2.0 in.
Answer: 3.0 × 2.0 in.
Verify: forward-check 3.0 × 600 = 1800 ✓, 2.0 × 600 = 1200 ✓. Aur insight note karo: high DPI fixed pixel count ke liye printed size chhotaa karta hai — Ex 3 ka degenerate trap.
Worked example Label tiny kyun ho gaya
Ek student sharp figure chahta hai isliye likhta hai fig.savefig("f.png", dpi=600) lekin kabhi figsize set nahi kiya , isliye yeh matplotlib ke default 6.4 in wide par hi rehta hai. Journal column sirf 3.5 in hai. Label font 9 pt hai. Jab editor image ko column mein fit karne ke liye scale karta hai toh font actually kitna bada dikhta hai?
Forecast: student sochta hai bigger DPI = better. Kya reviewer 9 pt label padh payega?
Font size points mein hoti hai, inches se tied hai. Upar ki typographic definition se, 1 pt = 1/72 in, isliye ek 9 pt label 6.4-in canvas par 9/72 = 0.125 in tall draw hota hai.
Yeh step kyun? DPI ne point size ko kabhi touch nahi kiya — points inches ke against defined hain, aur canvas DPI se regardless 6.4 in wide hai.
Editor column fit karne ke liye rescale karta hai. Scale factor s = 3.5/6.4 = 0.547 .
Kyun? Poori 6.4-in drawing 3.5 in mein squeeze hoti hai, isliye andar ki har length same ratio se shrink hoti hai.
Apparent font size. 9 × 0.547 = 4.92 pt ≈ 5 pt.
Multiply kyun? Rescaling saari internal lengths — including font — ko s se multiply karta hai.
Answer: label ~5 pt par print hota hai — ~7 pt legibility floor se neeche. DPI ne ise save nahi kiya.
Verify: 3.5/6.4 = 0.5469 , aur 9 × 0.5469 = 4.92 pt. Fix: pehle figsize=(3.5, 2.6) set karo, tab font true size par 9 pt hogi. Ise config block mein lock karne ke liye Reproducible research and rcParams dekho.
Common mistake "Bas DPI badha do"
Sahi lagta hai: zyada dots = sharper = better. Galat: DPI sirf sharpness hai; figsize size hai. Ek high-DPI image fit karne ke liye squeeze ki gayi toh poori drawing including text shrink ho jaati hai. Fix: pehle figsize column width tak set karo, DPI baad mein.
Worked example PDF ko kitna DPI chahiye?
Tumhare paas ek line plot hai (axes, curves, LaTeX labels — koi photo nahi). Tum ise fig.pdf ke roop mein save karte ho. Reviewer poochta hai "kya yeh 300 ya 600 dpi hai?" Tum kya jawab doge?
Forecast: "pixels" ka kya hota hai jab DPI → ∞ ?
P = w D recall karo aur D → ∞ push karo. lim D → ∞ w D = ∞ .
Yeh step kyun? Ek vector format (PDF/SVG) shapes store karta hai (point A se B tak ek line), pixels ka grid nahi. Rendering demand par kisi bhi DPI par pixels regenerate kar sakta hai.
Isliye DPI file ke liye undefined hai. Count karne ke liye koi fixed pixel grid nahi hai.
Kyun? Sirf raster formats (PNG/TIFF) ek pixel grid freeze karte hain; Raster vs vector graphics dekho.
Answer: "DPI irrelevant hai — yeh vector hai, kisi bhi zoom par sharp." High-DPI raster sirf photos/dense heatmaps ke liye use karo.
Verify (sanity): P = w D D mein monotonically increasing hai bina kisi upper bound ke, jo "infinite resolution" intuition confirm karta hai — limit diverge hoti hai, isliye koi single DPI number PDF describe nahi karta.
Worked example In labels mein se kaun corrupt hain?
Ek physicist teen axis labels likhta hai. Steps padhne se pehle predict karo kaun correctly render hongey.
ax.set_xlabel( "$ \a lpha$ decay" ) # (a)
ax.set_ylabel( "$ \t heta$ (rad)" ) # (b)
ax.set_title( "$ \n u$ frequency" ) # (c)
Forecast: (a), (b), (c) mein se kaun garbage dikhata hai?
Python ke escape sequences list karo. \a = bell (0x07), \t = tab, \n = newline, \r = return, \f, \v, \b... lekin \theta \t se shuru hota hai.
Yeh step kyun? Python ek normal string ko pehle scan karta hai, matplotlib ke dekhne se bhi pehle. Koi bhi recognized escape silently replace ho jaata hai.
Har string test karo.
(a) "$\alpha$" → \a bell char ban jaata hai → $␇lpha$ — corrupted .
(b) "$\theta$" → \t tab ban jaata hai → $ heta$ — corrupted .
(c) "$\nu$" → \n newline ban jaata hai → label do lines mein toot jaata hai — corrupted .
Kyun? Har backslash+letter ek real escape se match kiya.
Universal fix. r prefix karo: r"$\alpha$", r"$\theta$", r"$\nu$". Ek raw string escape processing band kar deta hai isliye backslash LaTeX tak intact pahunchti hai.
Kyun? LaTeX typesetting dekho — LaTeX ko literal backslash chahiye taaki woh jaane \theta ek Greek letter command hai.
Answer: r ke bina teeno corrupt hain; r ke saath teeno fix ho jaate hain.
Verify: Python mein, len("\alpha") 5 hai (bell + lpha) jabki len(r"\alpha") 6 hai (backslash + alpha). Length ka yeh difference hi khaaya hua backslash hai.
Worked example Koi special centre ke bina ek density heatmap
Dataset P ek probability density ∣ ψ ∣ 2 ∈ [ 0 , 1 ] hai — definitions box se yaad karo yeh sirf ek number ≥ 0 hai jo kehta hai "yahaan kitna stuff hai." Yeh low → high run karta hai bina kisi meaningful middle value ke. Kaun sa colormap?
Forecast: kya is data ka koi neutral centre hai, ya yeh sirf increase karta hai?
Splitting question poochho: kya koi meaningful centre hai? ∣ ψ ∣ 2 ke liye: nahi. Zero ka matlab "yahaan kuch nahi hai"; yeh ek endpoint hai, neutral middle nahi.
Yeh step kyun? Yeh ek sawaal har colormap choice ke liye sequential vs diverging decide karta hai.
No centre ⇒ sequential. viridis use karo: iski brightness monotonically badhti hai, isliye brighter = more density.
Kyun? Ek perceptually uniform sequential map equal data steps ko equal perceived steps bhejta hai — honest reading.
Labelled colorbar lagao. cbar.set_label(r"$|\psi|^2$").
Kyun? Colorbar ke bina colour scale unreadable hai — yeh colour ka axis hi hai.
Answer: Dataset P → viridis (sequential).
Verify (endpoint check): data minimum 0 darkest end par map hota hai aur maximum 1 brightest par; midpoint value ( 0 + 1 ) /2 = 0.5 ka koi special meaning nahi hai, jo sequential (diverging nahi) choice confirm karta hai. Colormaps and color theory in visualization dekho.
Worked example Meaningful zero ke saath ek anomaly heatmap
Dataset Q ek temperature anomaly Δ T ∈ [ − 4 , + 4 ] °C hai. Yahaan Δ ("normal se change") ka matlab hai Δ T = 0 neutral reference hai — exactly average. Negatives cooler hain, positives warmer. Kaun sa colormap?
Forecast: Δ T = 0 par colour dark hona chahiye, bright, ya neutral?
Splitting question phir poochho. Δ T ke liye: haan , ek meaningful centre hai — value 0 .
Yeh step kyun? Yeh edge case hai jo Ex 6 cover nahi karta: ek genuine neutral middle answer badal deta hai.
Meaningful centre ⇒ diverging. coolwarm (blue–white–red) use karo, colour scale zero par centred rakhte hue, taki 0 neutral white par aaye.
Kyun? Ek diverging map neutral colour ko meaningful centre par place karta hai, taki "above/below normal" ek nazar mein padh sake.
Limits symmetrically centre karo. Colour range [ − 4 , + 4 ] set karo (jaise vmin=-4, vmax=4).
Kyun? Agar limits lopsided hoti, toh white 0 se drift ho jaata aur reader ko mislead karta.
Answer: Dataset Q → coolwarm (diverging), 0 par centred.
Verify (centre check): symmetric range [ − 4 , + 4 ] ka midpoint ( − 4 + 4 ) /2 = 0 hai, jo coolwarm ke neutral colour se coincide karta hai — koi false shift nahi. Ex 6 se compare karo, jahan midpoint ka koi meaning nahi tha.
jet ek colorblind reader ke liye kyun fail hota hai
Tumhe values ka smooth gradient dikhana hai taaki ordering unambiguous rahe. Ek reviewer tumhari figure grayscale mein print karta hai. Compare karo jet aur viridis par ki "kaun si value badi hai?" ka jawab milta hai ya nahi.
Forecast: kya jet ka bright yellow middle grayscale mein high ya low padha jaata hai?
Har colormap ko uski luminance L mein convert karo. Definitions box ki Rec. 601 recipe use karke, L = 0.299 R + 0.587 G + 0.114 B (har channel [ 0 , 1 ] mein) — yahi exactly ek grayscale printer compute karta hai.
Yeh step kyun? Ek colorblind ya grayscale reader ke paas sirf L hai. Agar L monotonic nahi hai, toh order kho jaata hai.
jet: iski L middle mein ek peak tak jaati hai (bright yellow/cyan) phir dark red ki taraf wapas giriti hai.
Kyun bura? Do alag data values (ek low blue aur ek high red) same medium-gray L share kar sakte hain — map brightness mein one-to-one nahi hai → fake edges , ambiguous order.
viridis: iski L dark purple se bright yellow tak monotonically increasing hai.
Kyun acha? Har brightness exactly ek value se correspond karti hai; grayscale order perfectly preserve karta hai.
Answer: viridis grayscale mein survive karta hai; jet nahi.
Verify (monotonicity): viridis luminance ko 0 , 0.25 , 0.5 , 0.75 , 1.0 par Rec. 601 formula se sample karne par strictly increasing sequence milti hai (har ek pichle se bada); jet mein nahi milta — uska middle sample ek endpoint se zyada hota hai. Yeh check confirm karta hai viridis order-preserving hai, jet nahi.
Worked example Conference poster ke liye sizing
Ek poster panel 7.0 in wide aur 4.2 in tall hona chahiye, aur print shop crisp line art ke liye 300 dpi minimum demand karta hai. (a) PNG ki pixel dimensions kya honi chahiye? (b) Agar tum PDF export karo, toh kya change hota hai?
Forecast: kya (a) Ex 1 ke 1050×780 se bada ya chhota hoga?
P = w D har dimension par apply karo. P x = 7.0 × 300 = 2100 , P y = 4.2 × 300 = 1260 .
Yeh step kyun? Same frozen "per" cancellation; zyada inches → same DPI par zyada pixels.
Check karo ki minimum beat hota hai. 300 dpi minimum hai , isliye exactly 2100 × 1260 px qualify karta hai; 600 dpi (4200 × 2520 ) par jaana ek bade print ke liye safer hai.
Kyun? Posters close dekhe jaate hain, isliye shop ka floor ek hard constraint hai, suggestion nahi.
PDF variant. fig.pdf export karo — pixel count ab apply nahi hota (Ex 4); shop ka RIP (raster image processor — printer ke andar woh software jo vector shapes ko printer ke apne dot grid mein turn karta hai) ise printer ke DPI par render karta hai.
Kyun? Vector mein line art kisi bhi size par sharp hai — large-format printing ke liye ideal.
Answer: (a) 300 dpi par 2100 × 1260 px; (b) PDF pixel constraint ko poori tarah hata deta hai — printer ka RIP dots supply karta hai.
Verify: 2100/300 = 7.0 in ✓, 1260/300 = 4.2 in ✓ — dono requested physical size recover karte hain.
Worked example Metric-column trap
Ek exam column width centimetres mein deta hai: 8.9 cm wide, aur 300 dpi par pixel width poochta hai. (1 in = 2.54 cm .)
Forecast: jo students conversion bhool jaate hain unhe bilkul galat answer milega. Sahi answer se bada ya chhota?
Pehle cm → in convert karo. w = 8.9/2.54 = 3.504 in.
Yeh step kyun? Formula P = w D demand karta hai w inches mein kyunki D dots per inch hai. Units mix karna cancellation tod deta hai — Dimensional analysis guard hai.
Ab DPI se multiply karo. P x = 3.504 × 300 = 1051.2 ≈ 1051 px.
Round kyun? Pixels whole hote hain; matplotlib nearest integer par round karta hai.
Trap spot karo. Jis student ne 8.9 × 300 = 2670 plug kiya usne centimetres ko inches treat kiya → answer 2.54 × too large.
Kyun? Cm ko inches ki jagah feed karna result ko exactly conversion factor 2.54 se scale karta hai — units kabhi cancel nahi hue, isliye tumhare "dots" actually "dots per (cm/inch)" hain, ek meaningless quantity.
Answer: ≈ 1051 px wide (essentially wahi 3.5-in column jaise Ex 1 — kyunki 8.9 cm hai hi 3.5 in).
Verify: 8.9/2.54 = 3.5039 in, × 300 = 1051.2 ; galat answer 2670 = 1051.2 × 2.54 factor-of-2.54 error source confirm karta hai.
Recall Har cell ek saanch mein
DPI×inches=pixels (A1); invert karne ke liye divide karo (A2); figsize ke bina DPI fonts shrink karta hai (A3); PDF = no DPI (A4); r missing hai toh backslashes kha jaata hai (L1); low→high bina centre ke ⇒ sequential viridis (C1); meaningful zero centre ⇒ diverging coolwarm (C2); jet grayscale mein mar jaata hai, viridis jeeta hai (C3); multiply karne se pehle cm→in convert karo (X1).
D-L-C, forward and back
D ots inches se multiply/divide karo. L etters ko r chahiye. C olors: centre hai ⇒ diverge karo.
Ex 1 pixel width 3.5 in ke liye 300 dpi par? 1050 px.
Ex 2 physical width 1800 px ke liye 600 dpi par? 3.0 in (pixels ko DPI se divide karo).
Ex 3 apparent font size, 9 pt on 6.4-in canvas 3.5 in tak squeeze ki gayi? ≈ 4.9 pt (unreadable).
Ex 9b 8.9 cm column ke liye 300 dpi par pixels? ≈ 1051 px — pehle cm→in convert karo (8.9/2.54 = 3.5 in).
Kaun sa cell formula invert karne ke liye kehta hai? A2 — pixels aur DPI diye hue hain, w = P x / D solve karo.
PDF ke liye DPI meaningless kyun hai? Yeh pixels ka grid nahi, shapes store karta hai (P = w D ka D → ∞ par koi upper bound nahi).
Sequential vs diverging: kya decide karta hai? Kya data ka koi meaningful centre hai — koi nahi ⇒ sequential (C1), zero centre ⇒ diverging (C2).
Luminance L kya hai? Perceived brightness / grayscale value, L = 0.299 R + 0.587 G + 0.114 B ; honest ordering ke liye monotonically rise honi chahiye.
Publication-quality figures — LaTeX labels, colormaps, DPI (index 5.4.19)
Matplotlib basics — figure and axes objects
Colormaps and color theory in visualization
LaTeX typesetting
Raster vs vector graphics
Dimensional analysis
Reproducible research and rcParams
pixels = inches times DPI