[{"data":1,"prerenderedAt":728},["ShallowReactive",2],{"content-query-pgro9Ir8Mo":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"heading":10,"prompt":11,"tags":15,"files":17,"nav":6,"presets":18,"gallery":36,"body":38,"_type":721,"_id":722,"_source":723,"_file":724,"_stem":725,"_extension":726,"sitemap":727},"/tools/tornado-plot","tools",false,"","Tornado Plot Generator for Sensitivity Analysis","Create tornado plots online from Excel and CSV data. Rank inputs by impact and visualize one-way sensitivity analysis with AI.","Tornado Plot Generator",{"prefix":12,"label":13,"placeholder":14},"Create a tornado plot","Describe the tornado plot you want to create","e.g. tornado plot of NPV sensitivity to each input variable, baseline $4.2M",[16],"charts",true,[19,25,31],{"label":20,"prompt":21,"dataset_url":22,"dataset_title":23,"dataset_citation":24},"GDP sensitivity to indicators","tornado plot showing how much GDP per capita varies across countries when each World Bank indicator is at its 10th vs 90th percentile; sort variables by total swing; show baseline as center line","https://api.worldbank.org/v2/en/indicator/NY.GDP.PCAP.CD?downloadformat=excel","GDP per capita (current US$)","World Bank",{"label":26,"prompt":27,"dataset_url":28,"dataset_title":29,"dataset_citation":30},"Life expectancy drivers","tornado plot of life expectancy sensitivity to each health indicator; compute the range each variable contributes when varied from its 10th to 90th percentile while others are held at median; sort by impact","https://ourworldindata.org/grapher/life-expectancy-vs-gdp-per-capita.csv","Life expectancy vs. GDP per capita","Our World in Data",{"label":32,"prompt":33,"dataset_url":34,"dataset_title":35,"dataset_citation":30},"CO₂ emissions sensitivity","tornado plot showing how CO2 emissions per capita change when each energy source share is varied from its observed minimum to maximum; baseline at global average; blue for decrease, green for increase","https://ourworldindata.org/grapher/co-emissions-per-capita.csv","CO₂ emissions per capita",[37],"/img/tools/tornado-plot.png",{"type":39,"children":40,"toc":711},"root",[41,50,71,104,116,122,205,211,352,357,363,497,503,610,616,637,643,660,684,694],{"type":42,"tag":43,"props":44,"children":46},"element","h2",{"id":45},"what-is-a-tornado-plot",[47],{"type":48,"value":49},"text","What Is a Tornado Plot?",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54,56,62,64,69],{"type":48,"value":55},"A ",{"type":42,"tag":57,"props":58,"children":59},"strong",{},[60],{"type":48,"value":61},"tornado plot",{"type":48,"value":63}," is a horizontal bar chart used in ",{"type":42,"tag":57,"props":65,"children":66},{},[67],{"type":48,"value":68},"sensitivity analysis",{"type":48,"value":70}," — the practice of asking \"which input variables matter most to my output?\" Each bar represents one input variable, and its width shows how much the output changes when that variable is varied from its low estimate to its high estimate while all other variables are held at their baseline. Variables are sorted from most impactful (widest bar, at the top) to least impactful (narrowest bar, at the bottom), creating the distinctive widening shape that gives the chart its name.",{"type":42,"tag":51,"props":72,"children":73},{},[74,76,81,83,88,90,95,97,102],{"type":48,"value":75},"The chart is widely used in ",{"type":42,"tag":57,"props":77,"children":78},{},[79],{"type":48,"value":80},"financial modelling",{"type":48,"value":82}," (how sensitive is the NPV of this project to changes in discount rate, market growth, or unit costs?), ",{"type":42,"tag":57,"props":84,"children":85},{},[86],{"type":48,"value":87},"project risk analysis",{"type":48,"value":89}," (which assumptions drive the most uncertainty in our forecast?), ",{"type":42,"tag":57,"props":91,"children":92},{},[93],{"type":48,"value":94},"public health",{"type":48,"value":96}," (which interventions have the largest effect on an outcome?), and ",{"type":42,"tag":57,"props":98,"children":99},{},[100],{"type":48,"value":101},"scientific parameter studies",{"type":48,"value":103}," (which model parameters control the output most strongly?). By reading a tornado plot, decision-makers can immediately see where to focus attention — either to reduce uncertainty or to target interventions.",{"type":42,"tag":51,"props":105,"children":106},{},[107,109,114],{"type":48,"value":108},"A key insight the tornado plot delivers is ",{"type":42,"tag":57,"props":110,"children":111},{},[112],{"type":48,"value":113},"relative importance",{"type":48,"value":115},". A variable might have a large absolute range, but if it barely moves the output, it will appear as a short bar near the bottom. Another variable with a narrow range might drive enormous output swings and sit at the top. This ranking — which a table of numbers cannot convey at a glance — is what makes the tornado plot so effective for communicating sensitivity analysis.",{"type":42,"tag":43,"props":117,"children":119},{"id":118},"how-it-works",[120],{"type":48,"value":121},"How It Works",{"type":42,"tag":123,"props":124,"children":125},"ol",{},[126,170,186],{"type":42,"tag":127,"props":128,"children":129},"li",{},[130,135,137,144,146,152,154,160,162,168],{"type":42,"tag":57,"props":131,"children":132},{},[133],{"type":48,"value":134},"Upload your data",{"type":48,"value":136}," — provide a CSV or Excel file with at least three columns: ",{"type":42,"tag":138,"props":139,"children":141},"code",{"className":140},[],[142],{"type":48,"value":143},"variable",{"type":48,"value":145}," (input name), ",{"type":42,"tag":138,"props":147,"children":149},{"className":148},[],[150],{"type":48,"value":151},"low",{"type":48,"value":153}," (output value when input is at minimum), and ",{"type":42,"tag":138,"props":155,"children":157},{"className":156},[],[158],{"type":48,"value":159},"high",{"type":48,"value":161}," (output value when input is at maximum). A ",{"type":42,"tag":138,"props":163,"children":165},{"className":164},[],[166],{"type":48,"value":167},"baseline",{"type":48,"value":169}," column is optional but recommended. The AI can also compute sensitivity ranges from raw multi-column data.",{"type":42,"tag":127,"props":171,"children":172},{},[173,178,180],{"type":42,"tag":57,"props":174,"children":175},{},[176],{"type":48,"value":177},"Describe the plot",{"type":48,"value":179}," — e.g. ",{"type":42,"tag":181,"props":182,"children":183},"em",{},[184],{"type":48,"value":185},"\"tornado plot of project NPV sensitivity, baseline $4.2M, blue bars for downside, green for upside, sort by total swing\"",{"type":42,"tag":127,"props":187,"children":188},{},[189,194,196,203],{"type":42,"tag":57,"props":190,"children":191},{},[192],{"type":48,"value":193},"Get the visualization",{"type":48,"value":195}," — the AI writes Python code using ",{"type":42,"tag":197,"props":198,"children":200},"a",{"href":199},"https://plotly.com/python/bar-charts/",[201],{"type":48,"value":202},"Plotly",{"type":48,"value":204}," to build the diverging horizontal bar chart with a baseline reference line",{"type":42,"tag":43,"props":206,"children":208},{"id":207},"required-data-format",[209],{"type":48,"value":210},"Required Data Format",{"type":42,"tag":212,"props":213,"children":214},"table",{},[215,239],{"type":42,"tag":216,"props":217,"children":218},"thead",{},[219],{"type":42,"tag":220,"props":221,"children":222},"tr",{},[223,229,234],{"type":42,"tag":224,"props":225,"children":226},"th",{},[227],{"type":48,"value":228},"Column",{"type":42,"tag":224,"props":230,"children":231},{},[232],{"type":48,"value":233},"Description",{"type":42,"tag":224,"props":235,"children":236},{},[237],{"type":48,"value":238},"Example",{"type":42,"tag":240,"props":241,"children":242},"tbody",{},[243,277,302,327],{"type":42,"tag":220,"props":244,"children":245},{},[246,255,260],{"type":42,"tag":247,"props":248,"children":249},"td",{},[250],{"type":42,"tag":138,"props":251,"children":253},{"className":252},[],[254],{"type":48,"value":143},{"type":42,"tag":247,"props":256,"children":257},{},[258],{"type":48,"value":259},"Name of the input being varied",{"type":42,"tag":247,"props":261,"children":262},{},[263,269,271],{"type":42,"tag":138,"props":264,"children":266},{"className":265},[],[267],{"type":48,"value":268},"Discount Rate",{"type":48,"value":270},", ",{"type":42,"tag":138,"props":272,"children":274},{"className":273},[],[275],{"type":48,"value":276},"Market Growth",{"type":42,"tag":220,"props":278,"children":279},{},[280,288,293],{"type":42,"tag":247,"props":281,"children":282},{},[283],{"type":42,"tag":138,"props":284,"children":286},{"className":285},[],[287],{"type":48,"value":151},{"type":42,"tag":247,"props":289,"children":290},{},[291],{"type":48,"value":292},"Output value when input is at its low estimate",{"type":42,"tag":247,"props":294,"children":295},{},[296],{"type":42,"tag":138,"props":297,"children":299},{"className":298},[],[300],{"type":48,"value":301},"2.9",{"type":42,"tag":220,"props":303,"children":304},{},[305,313,318],{"type":42,"tag":247,"props":306,"children":307},{},[308],{"type":42,"tag":138,"props":309,"children":311},{"className":310},[],[312],{"type":48,"value":159},{"type":42,"tag":247,"props":314,"children":315},{},[316],{"type":48,"value":317},"Output value when input is at its high estimate",{"type":42,"tag":247,"props":319,"children":320},{},[321],{"type":42,"tag":138,"props":322,"children":324},{"className":323},[],[325],{"type":48,"value":326},"5.8",{"type":42,"tag":220,"props":328,"children":329},{},[330,338,343],{"type":42,"tag":247,"props":331,"children":332},{},[333],{"type":42,"tag":138,"props":334,"children":336},{"className":335},[],[337],{"type":48,"value":167},{"type":42,"tag":247,"props":339,"children":340},{},[341],{"type":48,"value":342},"Output at baseline (same value for all rows)",{"type":42,"tag":247,"props":344,"children":345},{},[346],{"type":42,"tag":138,"props":347,"children":349},{"className":348},[],[350],{"type":48,"value":351},"4.2",{"type":42,"tag":51,"props":353,"children":354},{},[355],{"type":48,"value":356},"If you only have raw data (not pre-computed sensitivity ranges), describe your output variable in the prompt and the AI will compute the ranges automatically using percentile or ±N% variation.",{"type":42,"tag":43,"props":358,"children":360},{"id":359},"interpreting-the-results",[361],{"type":48,"value":362},"Interpreting the Results",{"type":42,"tag":212,"props":364,"children":365},{},[366,382],{"type":42,"tag":216,"props":367,"children":368},{},[369],{"type":42,"tag":220,"props":370,"children":371},{},[372,377],{"type":42,"tag":224,"props":373,"children":374},{},[375],{"type":48,"value":376},"Visual element",{"type":42,"tag":224,"props":378,"children":379},{},[380],{"type":48,"value":381},"What it means",{"type":42,"tag":240,"props":383,"children":384},{},[385,401,417,433,449,465,481],{"type":42,"tag":220,"props":386,"children":387},{},[388,396],{"type":42,"tag":247,"props":389,"children":390},{},[391],{"type":42,"tag":57,"props":392,"children":393},{},[394],{"type":48,"value":395},"Bar width",{"type":42,"tag":247,"props":397,"children":398},{},[399],{"type":48,"value":400},"Total swing — how much the output changes across the input's range",{"type":42,"tag":220,"props":402,"children":403},{},[404,412],{"type":42,"tag":247,"props":405,"children":406},{},[407],{"type":42,"tag":57,"props":408,"children":409},{},[410],{"type":48,"value":411},"Top bar",{"type":42,"tag":247,"props":413,"children":414},{},[415],{"type":48,"value":416},"The variable with the most influence on the output",{"type":42,"tag":220,"props":418,"children":419},{},[420,428],{"type":42,"tag":247,"props":421,"children":422},{},[423],{"type":42,"tag":57,"props":424,"children":425},{},[426],{"type":48,"value":427},"Bottom bar",{"type":42,"tag":247,"props":429,"children":430},{},[431],{"type":48,"value":432},"The variable with the least influence",{"type":42,"tag":220,"props":434,"children":435},{},[436,444],{"type":42,"tag":247,"props":437,"children":438},{},[439],{"type":42,"tag":57,"props":440,"children":441},{},[442],{"type":48,"value":443},"Left side of baseline",{"type":42,"tag":247,"props":445,"children":446},{},[447],{"type":48,"value":448},"Output when input is at its low (unfavorable) value",{"type":42,"tag":220,"props":450,"children":451},{},[452,460],{"type":42,"tag":247,"props":453,"children":454},{},[455],{"type":42,"tag":57,"props":456,"children":457},{},[458],{"type":48,"value":459},"Right side of baseline",{"type":42,"tag":247,"props":461,"children":462},{},[463],{"type":48,"value":464},"Output when input is at its high (favorable) value",{"type":42,"tag":220,"props":466,"children":467},{},[468,476],{"type":42,"tag":247,"props":469,"children":470},{},[471],{"type":42,"tag":57,"props":472,"children":473},{},[474],{"type":48,"value":475},"Vertical baseline line",{"type":42,"tag":247,"props":477,"children":478},{},[479],{"type":48,"value":480},"The output at base-case assumptions",{"type":42,"tag":220,"props":482,"children":483},{},[484,492],{"type":42,"tag":247,"props":485,"children":486},{},[487],{"type":42,"tag":57,"props":488,"children":489},{},[490],{"type":48,"value":491},"Asymmetric bar",{"type":42,"tag":247,"props":493,"children":494},{},[495],{"type":48,"value":496},"Non-linear relationship — the variable affects the output differently in each direction",{"type":42,"tag":43,"props":498,"children":500},{"id":499},"example-prompts",[501],{"type":48,"value":502},"Example Prompts",{"type":42,"tag":212,"props":504,"children":505},{},[506,522],{"type":42,"tag":216,"props":507,"children":508},{},[509],{"type":42,"tag":220,"props":510,"children":511},{},[512,517],{"type":42,"tag":224,"props":513,"children":514},{},[515],{"type":48,"value":516},"Scenario",{"type":42,"tag":224,"props":518,"children":519},{},[520],{"type":48,"value":521},"What to type",{"type":42,"tag":240,"props":523,"children":524},{},[525,542,559,576,593],{"type":42,"tag":220,"props":526,"children":527},{},[528,533],{"type":42,"tag":247,"props":529,"children":530},{},[531],{"type":48,"value":532},"Financial model",{"type":42,"tag":247,"props":534,"children":535},{},[536],{"type":42,"tag":138,"props":537,"children":539},{"className":538},[],[540],{"type":48,"value":541},"tornado plot of NPV sensitivity, baseline $4.2M, sort by total swing",{"type":42,"tag":220,"props":543,"children":544},{},[545,550],{"type":42,"tag":247,"props":546,"children":547},{},[548],{"type":48,"value":549},"Project schedule",{"type":42,"tag":247,"props":551,"children":552},{},[553],{"type":42,"tag":138,"props":554,"children":556},{"className":555},[],[557],{"type":48,"value":558},"tornado plot of project duration sensitivity to each risk factor, baseline 180 days",{"type":42,"tag":220,"props":560,"children":561},{},[562,567],{"type":42,"tag":247,"props":563,"children":564},{},[565],{"type":48,"value":566},"Public health",{"type":42,"tag":247,"props":568,"children":569},{},[570],{"type":42,"tag":138,"props":571,"children":573},{"className":572},[],[574],{"type":48,"value":575},"tornado plot of mortality rate sensitivity to intervention coverage, ±20% variation",{"type":42,"tag":220,"props":577,"children":578},{},[579,584],{"type":42,"tag":247,"props":580,"children":581},{},[582],{"type":48,"value":583},"Energy model",{"type":42,"tag":247,"props":585,"children":586},{},[587],{"type":42,"tag":138,"props":588,"children":590},{"className":589},[],[591],{"type":48,"value":592},"tornado plot of total emissions sensitivity to each energy source share",{"type":42,"tag":220,"props":594,"children":595},{},[596,601],{"type":42,"tag":247,"props":597,"children":598},{},[599],{"type":48,"value":600},"Sales forecast",{"type":42,"tag":247,"props":602,"children":603},{},[604],{"type":42,"tag":138,"props":605,"children":607},{"className":606},[],[608],{"type":48,"value":609},"tornado plot showing which sales drivers have the most impact on revenue",{"type":42,"tag":43,"props":611,"children":613},{"id":612},"related-tools",[614],{"type":48,"value":615},"Related Tools",{"type":42,"tag":51,"props":617,"children":618},{},[619,621,627,629,635],{"type":48,"value":620},"Use the ",{"type":42,"tag":197,"props":622,"children":624},{"href":623},"/tools/exploratory-data-analysis-ai",[625],{"type":48,"value":626},"Exploratory Data Analysis tool",{"type":48,"value":628}," to understand correlations and distributions before deciding which variables to include in the sensitivity analysis. Use the ",{"type":42,"tag":197,"props":630,"children":632},{"href":631},"/tools/ai-scatter-chart-generator",[633],{"type":48,"value":634},"AI Scatter Chart Generator",{"type":48,"value":636}," to visualize the relationship between individual inputs and your output in detail after identifying the most important drivers.",{"type":42,"tag":43,"props":638,"children":640},{"id":639},"frequently-asked-questions",[641],{"type":48,"value":642},"Frequently Asked Questions",{"type":42,"tag":51,"props":644,"children":645},{},[646,651,653,658],{"type":42,"tag":57,"props":647,"children":648},{},[649],{"type":48,"value":650},"My data doesn't have pre-computed low/high values — can the AI still build the plot?",{"type":48,"value":652},"\nYes. If you have raw data with multiple columns, describe your output variable and how you want the ranges computed (e.g. ",{"type":42,"tag":181,"props":654,"children":655},{},[656],{"type":48,"value":657},"\"vary each input from its 10th to 90th percentile while holding others at the median\"",{"type":48,"value":659},"). The AI will compute the sensitivity ranges and then plot them.",{"type":42,"tag":51,"props":661,"children":662},{},[663,668,670,675,677,682],{"type":42,"tag":57,"props":664,"children":665},{},[666],{"type":48,"value":667},"What is the difference between a tornado plot and a waterfall chart?",{"type":48,"value":669},"\nA tornado plot ranks variables by their ",{"type":42,"tag":181,"props":671,"children":672},{},[673],{"type":48,"value":674},"independent",{"type":48,"value":676}," impact — each variable is varied alone while others stay fixed. A waterfall chart shows how a series of ",{"type":42,"tag":181,"props":678,"children":679},{},[680],{"type":48,"value":681},"cumulative",{"type":48,"value":683}," changes build up from a starting value to a final value. Use a tornado for \"which variable matters most?\", and a waterfall for \"how did we get from A to B step by step?\"",{"type":42,"tag":51,"props":685,"children":686},{},[687,692],{"type":42,"tag":57,"props":688,"children":689},{},[690],{"type":48,"value":691},"How do I choose the low and high values for each variable?",{"type":48,"value":693},"\nCommon approaches: ±10% or ±20% from baseline; 10th and 90th percentiles from historical data; worst-case and best-case expert estimates; or Monte Carlo simulation bounds. Mention your preferred method in the prompt.",{"type":42,"tag":51,"props":695,"children":696},{},[697,702,704,709],{"type":42,"tag":57,"props":698,"children":699},{},[700],{"type":48,"value":701},"Can I show uncertainty ranges instead of a single low/high bar?",{"type":48,"value":703},"\nYes — ask for a ",{"type":42,"tag":57,"props":705,"children":706},{},[707],{"type":48,"value":708},"box-whisker tornado",{"type":48,"value":710}," or add error bars to show distributional uncertainty around each low and high estimate. You can also ask the AI to color-code bars by the direction of impact (increases vs decreases the output).",{"title":7,"searchDepth":712,"depth":712,"links":713},2,[714,715,716,717,718,719,720],{"id":45,"depth":712,"text":49},{"id":118,"depth":712,"text":121},{"id":207,"depth":712,"text":210},{"id":359,"depth":712,"text":362},{"id":499,"depth":712,"text":502},{"id":612,"depth":712,"text":615},{"id":639,"depth":712,"text":642},"markdown","content:tools:014.tornado-plot.md","content","tools/014.tornado-plot.md","tools/014.tornado-plot","md",{"loc":4},1775502471196]