Michael Friendly
@datavisfriendly.bsky.social
ASA Fellow; #rstats developer of graphical methods for categorical and multivariate data; #datavis history of data visualization; #historicaldatavis; Milestones project
Web: www.datavis.ca
GitHub: github.com/friendly
Web: www.datavis.ca
GitHub: github.com/friendly
Pinned
There's a delicious time in book writing when I switch from actual writing & making graphs to POLISHING-- smoothing language, adding X-references, and improving graphs that don't pass the smell test.
I'm there now with my book, Visualizing Multivariate Data and Models with R.
What a sweet feeling!
I'm there now with my book, Visualizing Multivariate Data and Models with R.
What a sweet feeling!
#TodayinHistory #dataviz #OTD 📊
📅Nov 10, 1954 John Backus published the formal proposal for FORTRAN, the first high level language for computing
🔗 bit.ly/3DQnswH
It was proprietary to IBM. The 1st FORTRAN compiler was completed 1955-56.
Who remembers the shift from that to FORTRAN IV?
📅Nov 10, 1954 John Backus published the formal proposal for FORTRAN, the first high level language for computing
🔗 bit.ly/3DQnswH
It was proprietary to IBM. The 1st FORTRAN compiler was completed 1955-56.
Who remembers the shift from that to FORTRAN IV?
November 11, 2025 at 1:34 AM
#TodayinHistory #dataviz #OTD 📊
📅Nov 10, 1954 John Backus published the formal proposal for FORTRAN, the first high level language for computing
🔗 bit.ly/3DQnswH
It was proprietary to IBM. The 1st FORTRAN compiler was completed 1955-56.
Who remembers the shift from that to FORTRAN IV?
📅Nov 10, 1954 John Backus published the formal proposal for FORTRAN, the first high level language for computing
🔗 bit.ly/3DQnswH
It was proprietary to IBM. The 1st FORTRAN compiler was completed 1955-56.
Who remembers the shift from that to FORTRAN IV?
#TodayinHistory #dataviz #OTD 📊
🎂Nov 9, 1854 Matthew Henry Phineas Riall Sankey born in Nenagh, County Tipperary, Ireland
1898: introduced the first energy flow diagram to show the energy efficiency of a steam engine, dubbed the "Sankey diagram"
👀 bit.ly/497fk8l
🎂Nov 9, 1854 Matthew Henry Phineas Riall Sankey born in Nenagh, County Tipperary, Ireland
1898: introduced the first energy flow diagram to show the energy efficiency of a steam engine, dubbed the "Sankey diagram"
👀 bit.ly/497fk8l
November 10, 2025 at 2:25 AM
#TodayinHistory #dataviz #OTD 📊
🎂Nov 9, 1854 Matthew Henry Phineas Riall Sankey born in Nenagh, County Tipperary, Ireland
1898: introduced the first energy flow diagram to show the energy efficiency of a steam engine, dubbed the "Sankey diagram"
👀 bit.ly/497fk8l
🎂Nov 9, 1854 Matthew Henry Phineas Riall Sankey born in Nenagh, County Tipperary, Ireland
1898: introduced the first energy flow diagram to show the energy efficiency of a steam engine, dubbed the "Sankey diagram"
👀 bit.ly/497fk8l
#TodayinHistory #dataviz #OTD 📊
🎂Nov 9, 1897 Edgar Anderson born in Forestville, NY, USA 🇺🇸
1928: Multivariate glyphs, invented to display four variables and their relations (length and width of petals and sepals in iris flowers)
And, of course gave us the famed (or infamous) iris dataset
🎂Nov 9, 1897 Edgar Anderson born in Forestville, NY, USA 🇺🇸
1928: Multivariate glyphs, invented to display four variables and their relations (length and width of petals and sepals in iris flowers)
And, of course gave us the famed (or infamous) iris dataset
November 10, 2025 at 2:07 AM
#TodayinHistory #dataviz #OTD 📊
🎂Nov 9, 1897 Edgar Anderson born in Forestville, NY, USA 🇺🇸
1928: Multivariate glyphs, invented to display four variables and their relations (length and width of petals and sepals in iris flowers)
And, of course gave us the famed (or infamous) iris dataset
🎂Nov 9, 1897 Edgar Anderson born in Forestville, NY, USA 🇺🇸
1928: Multivariate glyphs, invented to display four variables and their relations (length and width of petals and sepals in iris flowers)
And, of course gave us the famed (or infamous) iris dataset
Reposted by Michael Friendly
For me, ggview's most useful space is when I am developing a figure in RStudio with a lot of tweaking, and that figure is eventually going to go into a specific dimension output. So I don't need to be writing out and refreshing the figure to be checking annotations etc as I create them.
November 8, 2025 at 3:02 AM
For me, ggview's most useful space is when I am developing a figure in RStudio with a lot of tweaking, and that figure is eventually going to go into a specific dimension output. So I don't need to be writing out and refreshing the figure to be checking annotations etc as I create them.
An interesting test case for visibility of colored dot maps.
Glad you chose yellow for Cuomo :)
Glad you chose yellow for Cuomo :)
NYC 2025 Mayoral results as a dot density plot using the `dots` #rstats package (cran.r-project.org/web/packages...)
November 8, 2025 at 3:13 AM
An interesting test case for visibility of colored dot maps.
Glad you chose yellow for Cuomo :)
Glad you chose yellow for Cuomo :)
Hmm, I wonder if I should be using {ggview} 📦 in my book? I didn't know this.Thoughts?
Have you ever wanted to make your own climate warming stripes plot? It's super easy with #rstats! (code here gist.github.com/andrewheiss/... )
November 8, 2025 at 2:49 AM
Hmm, I wonder if I should be using {ggview} 📦 in my book? I didn't know this.Thoughts?
Reposted by Michael Friendly
And, did you name your dog, "dog"?
I labeled the function data() and now I stuck in namespace conflict hell between utils and my package
Do I need to rename my function? I don't see how i can pass the devtools::checks()
#rstats
Do I need to rename my function? I don't see how i can pass the devtools::checks()
#rstats
do not name functions after base or utils functions
November 7, 2025 at 2:55 AM
And, did you name your dog, "dog"?
Nice map/graph design; Central Af Republic sure stands out.
But I'm always perplexed by color ramp palettes where so much of the range is dominated by one end of the color scale (green here)
But I'm always perplexed by color ramp palettes where so much of the range is dominated by one end of the color scale (green here)
Day 6 – Dimension 🌍 | #30DayMapChallenge Health is complex and multidimensional.
Central Africa ranks lowest, showing how health understanding varies with chosen dimensions. 🗺️
Code and More: bookdown.org/fede_gazzell...
#RStats #dataviz #health #DataScience #30daymapchallenge
Central Africa ranks lowest, showing how health understanding varies with chosen dimensions. 🗺️
Code and More: bookdown.org/fede_gazzell...
#RStats #dataviz #health #DataScience #30daymapchallenge
November 7, 2025 at 2:42 AM
Nice map/graph design; Central Af Republic sure stands out.
But I'm always perplexed by color ramp palettes where so much of the range is dominated by one end of the color scale (green here)
But I'm always perplexed by color ramp palettes where so much of the range is dominated by one end of the color scale (green here)
#TodayinHistory #dataviz #OTD 📊
🎂Nov 6, 1869 Arthur L. Bowley born in Bristol, UK. 🇬🇧
1901: Smoothing of time series in one of the 1st text books on data graphics
He used 3-, 5-, 10- year running averages, discussed the merits of smoothing
#rstats: data(Bowley, package="HistData"); example(Bowley)
🎂Nov 6, 1869 Arthur L. Bowley born in Bristol, UK. 🇬🇧
1901: Smoothing of time series in one of the 1st text books on data graphics
He used 3-, 5-, 10- year running averages, discussed the merits of smoothing
#rstats: data(Bowley, package="HistData"); example(Bowley)
November 7, 2025 at 2:23 AM
#TodayinHistory #dataviz #OTD 📊
🎂Nov 6, 1869 Arthur L. Bowley born in Bristol, UK. 🇬🇧
1901: Smoothing of time series in one of the 1st text books on data graphics
He used 3-, 5-, 10- year running averages, discussed the merits of smoothing
#rstats: data(Bowley, package="HistData"); example(Bowley)
🎂Nov 6, 1869 Arthur L. Bowley born in Bristol, UK. 🇬🇧
1901: Smoothing of time series in one of the 1st text books on data graphics
He used 3-, 5-, 10- year running averages, discussed the merits of smoothing
#rstats: data(Bowley, package="HistData"); example(Bowley)
That's rich: "found guilty of sexing-up research data"
I hadnt seen this particular take on this story till now. A minimalist apology. Not impressed.
nationalnews.co.uk/news/shamed-...
nationalnews.co.uk/news/shamed-...
Shamed Scientist Apologises For The First Time About The Academic Scandal That Destroyed His Career And Shocked The World
An ecologist who shot to fame after discovering that spiders have human-like personalities has made an emotional apology after being
nationalnews.co.uk
November 7, 2025 at 2:02 AM
That's rich: "found guilty of sexing-up research data"
#TodayinHistory #dataviz #OTD 📊
🎂Nov 6, 1771 Aloys Senefelder born in Prague, Czech Republic
1798: Invention of lithographic technique for printing of maps and diagrams 🗺️
"At the time the effect of lithography ... was as great as has been the introduction [of the Xerox machine]" - A.H. Robinson
🎂Nov 6, 1771 Aloys Senefelder born in Prague, Czech Republic
1798: Invention of lithographic technique for printing of maps and diagrams 🗺️
"At the time the effect of lithography ... was as great as has been the introduction [of the Xerox machine]" - A.H. Robinson
November 7, 2025 at 1:50 AM
#TodayinHistory #dataviz #OTD 📊
🎂Nov 6, 1771 Aloys Senefelder born in Prague, Czech Republic
1798: Invention of lithographic technique for printing of maps and diagrams 🗺️
"At the time the effect of lithography ... was as great as has been the introduction [of the Xerox machine]" - A.H. Robinson
🎂Nov 6, 1771 Aloys Senefelder born in Prague, Czech Republic
1798: Invention of lithographic technique for printing of maps and diagrams 🗺️
"At the time the effect of lithography ... was as great as has been the introduction [of the Xerox machine]" - A.H. Robinson
Now heading to a CRAN near you...
#rstats #dataviz
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
candisc: Visualizing Generalized Canonical Discriminant and Canonical
Correlation Analysis
friendly.r-universe.dev
November 6, 2025 at 3:40 AM
Now heading to a CRAN near you...
Interesting & nice chart!. Similar idea to what I use in #rstats
vcd::fourfold()
- but uses quarter circles, with CI rings for the odds ratio.
- signif OR !=1 \equiv quarter circles DON'T OVERLAP
vcd::fourfold()
- but uses quarter circles, with CI rings for the odds ratio.
- signif OR !=1 \equiv quarter circles DON'T OVERLAP
November 6, 2025 at 3:39 AM
Interesting & nice chart!. Similar idea to what I use in #rstats
vcd::fourfold()
- but uses quarter circles, with CI rings for the odds ratio.
- signif OR !=1 \equiv quarter circles DON'T OVERLAP
vcd::fourfold()
- but uses quarter circles, with CI rings for the odds ratio.
- signif OR !=1 \equiv quarter circles DON'T OVERLAP
Maybe just what I was looking for!
I'm excited to share side::kick(), an experimental open-source coding agent for RStudio built entirely in R. It can interact with your files, communicate with your active #rstats session, and run code.
Check it out: github.com/simonpcouch/...
Check it out: github.com/simonpcouch/...
November 6, 2025 at 3:26 AM
Maybe just what I was looking for!
Very effective design & execution! Kudos! 👍
The pipe is a nice touch
The pipe is a nice touch
Flint water samples #TidyTuesday
Bootstrapped water samples for estimating proportion of samples with dangerous levels of lead
Code: github.com/borstell/tid...
#R4DS #DataViz #ggplot2
Bootstrapped water samples for estimating proportion of samples with dangerous levels of lead
Code: github.com/borstell/tid...
#R4DS #DataViz #ggplot2
November 6, 2025 at 2:00 AM
Very effective design & execution! Kudos! 👍
The pipe is a nice touch
The pipe is a nice touch
Reposted by Michael Friendly
#TodayinHistory #dataviz #OTD 📊
💀Nov 5, 1879 James Clerk Maxwell died in Cambridge, England 🏴
1861: Invention of the trichromatic process for making color photographs, by taking three monochrome images through red, green and blue filters
💀Nov 5, 1879 James Clerk Maxwell died in Cambridge, England 🏴
1861: Invention of the trichromatic process for making color photographs, by taking three monochrome images through red, green and blue filters
November 2, 2025 at 1:21 AM
#TodayinHistory #dataviz #OTD 📊
💀Nov 5, 1879 James Clerk Maxwell died in Cambridge, England 🏴
1861: Invention of the trichromatic process for making color photographs, by taking three monochrome images through red, green and blue filters
💀Nov 5, 1879 James Clerk Maxwell died in Cambridge, England 🏴
1861: Invention of the trichromatic process for making color photographs, by taking three monochrome images through red, green and blue filters
#rstats #dataviz
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
candisc: Visualizing Generalized Canonical Discriminant and Canonical
Correlation Analysis
friendly.r-universe.dev
November 5, 2025 at 1:41 AM
#rstats #dataviz
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
Thrilled to announce a major release 1.0.0 of the {candisc} 📦 for canonical discriminant and correlation analysis and visualization.
Now includes methods for linear/quadratic discriminant analysis.
CRAN is upload down, but you can get it from
friendly.r-universe.dev/candisc
Has anyone thought of developing #Claude _Skills_ for #rstats?
Seems like an interesting idea: describe how to create vignettes, examples, unit tests, for AI coding
Described here: simonwillison.net/2025/Oct/16/...
Also, Anthropic Github repo: github.com/anthropics/s...
Seems like an interesting idea: describe how to create vignettes, examples, unit tests, for AI coding
Described here: simonwillison.net/2025/Oct/16/...
Also, Anthropic Github repo: github.com/anthropics/s...
Claude Skills are awesome, maybe a bigger deal than MCP
Anthropic this morning introduced Claude Skills, a new pattern for making new abilities available to their models: Claude can now use Skills to improve how it performs specific tasks. Skills …
simonwillison.net
November 5, 2025 at 12:28 AM
Has anyone thought of developing #Claude _Skills_ for #rstats?
Seems like an interesting idea: describe how to create vignettes, examples, unit tests, for AI coding
Described here: simonwillison.net/2025/Oct/16/...
Also, Anthropic Github repo: github.com/anthropics/s...
Seems like an interesting idea: describe how to create vignettes, examples, unit tests, for AI coding
Described here: simonwillison.net/2025/Oct/16/...
Also, Anthropic Github repo: github.com/anthropics/s...
While there's still some #baseball fever:
Shoeless Joe Jackson was reinstated by #MLB May '25, making him eligible for the Baseball Hall of Fame.
All the data from the 1919 World Series I reviewed showed w/o a doubt he was innocent of the charge of throwing the series.
Shoeless Joe Jackson was reinstated by #MLB May '25, making him eligible for the Baseball Hall of Fame.
All the data from the 1919 World Series I reviewed showed w/o a doubt he was innocent of the charge of throwing the series.
Did Shoeless Joe Jackson Throw the 1919 World Series? on JSTOR
Jay Bennett, Did Shoeless Joe Jackson Throw the 1919 World Series?, The American Statistician, Vol. 47, No. 4 (Nov., 1993), pp. 241-250
bit.ly
November 4, 2025 at 2:56 AM
An Introduction to Writing Your Own ggplot2 Geoms
https://rworks.dev/posts/ggplot2-extensions/
#rstats #datascience
https://rworks.dev/posts/ggplot2-extensions/
#rstats #datascience
An Introduction to Writing Your Own ggplot2 Geoms
Summary: Explores creating custom ggplot2 extensions with recipes for geoms and stats in R using ggproto, make_constructor, and base R workflows.
rworks.dev
November 4, 2025 at 2:22 AM
Great collection of #rstats challenge solutions. Worth a detour!
🚨 Day 3 of #30DayMapChallenge is live!
Global polygons and how to make them render correctly across projections. Repairing the geometries, and splitting multipolygons.
More insights: bookdown.org/fede_gazzell...
#DataViz #RStats #SpatialAnalysis #Maps #hmsidwR
Global polygons and how to make them render correctly across projections. Repairing the geometries, and splitting multipolygons.
More insights: bookdown.org/fede_gazzell...
#DataViz #RStats #SpatialAnalysis #Maps #hmsidwR
November 4, 2025 at 2:13 AM
Great collection of #rstats challenge solutions. Worth a detour!
This is definitely an interesting idea for display of Likert scale data allowing for don't-know / didn't-answer
Just trying out a way of showing Don't knows/Didn't answers.
Calculating the percents of Trust level and Party, then multiplying the don't know by -1 and using geom_col()
#rstats
Calculating the percents of Trust level and Party, then multiplying the don't know by -1 and using geom_col()
#rstats
November 4, 2025 at 1:36 AM
This is definitely an interesting idea for display of Likert scale data allowing for don't-know / didn't-answer
I'm more concerned with the daylight interest rate.
How long will I have to save to get my hour back?
How long will I have to save to get my hour back?
existence of daylight saving implies existence of daylight investment
November 3, 2025 at 2:20 AM
I'm more concerned with the daylight interest rate.
How long will I have to save to get my hour back?
How long will I have to save to get my hour back?