Shared posts

11 Jul 13:50

[OC] As I did during Gorsuch's nomination, a look at how Conservative/Liberal SCOTUS Justices are by comparing their rate of agreement

by /u/OmniaMors

An elegant, sensible visualization. Also, terrifying. But at least the data is presented clearly along an interesting and insightful metric.

11 Jul 13:47

Comparing city street orientations with Python

by /u/User17

We say the cows laid out Boston. Well, there are worse surveyors. –Ralph Waldo Emerson, 1860

Haaaah! :)

11 Jul 13:46

Unendurable line

by /u/Biny_tever

A classic video!

27 Jun 17:25

Which Justices Were BFFs This Supreme Court Term

by Oliver Roeder

N.G. is further to the right than Antonin Scalia according to this analysis.

The regularly scheduled business of the Supreme Court term came to a close on Wednesday, and the nine justices will soon take off their robes and head out on their summer vacations.

The court heard major cases this year that ran the constitutional gamut: on partisan and racial gerrymandering, public-sector unions, President Trump’s travel ban, sales tax in the internet age, voting rights, politicking at polling places, sports betting, abortion, the seizure of cell phone records and discrimination against same-sex couples. In most ways, it was a firecracker term for conservatives. The court upheld the travel ban, blocked a law requiring “crisis pregnancy centers” to supply information about abortion, dealt a monumental blow to organized labor and upheld most Texas legislative maps that had been called racially discriminatory. In a few ways, though, it was a dud. The court punted a partisan gerrymandering case back to a lower court, it crafted only a narrow decision in the case of the cake baker who refused to serve a gay couple, and it offered another narrow ruling in the cell phone data case.

But no matter how you see the decisions, the latest term, like all Supreme Court terms, generated cold, hard data. Specifically, it generated data about where justices sit on the ideological spectrum and how they interact with one another. With a new justice, Neil Gorsuch, still fully settling into his seat and speculation intensifying about a possible retirement of the court’s swing voter, Anthony Kennedy, I wanted to look at the justices’ judicial relationships with each other over the last term, and what they might augur for the future of American jurisprudence.

This 2017-18 session was the first full slate of high-court cases for Gorsuch, the Trump appointee who took his seat on the bench in April 2017, more than a year after the death of the justice he replaced, Antonin Scalia. Before Gorsuch joined the court, my former colleague Harry Enten and I wrote that Gorsuch’s prior record as a judge made it likely he’d sit somewhere to the right of the conservative Scalia, and somewhere to the left of the arch-conservative Justice Clarence Thomas. In other words, Gorsuch would be a solidly right-wing justice. This is how we saw it 19 months ago:

That picture is more or less bearing out. The most prominent measures of justice ideology are called Martin-Quinn scores. After his first few cases, those scores put Gorsuch right around where Scalia was and Justice Samuel Alito is, a bit to the left of Thomas. The updated scores for the latest term haven’t yet been calculated, but it’s safe to say, given the voting tendencies of the court this term, that Gorsuch will remain in that ideological vicinity — a solidly right-wing justice who likely has decades remaining on the bench.

In lieu of those scores, for now we can simply look at which (more established) justices Gorsuch agreed with most often. At first, it seemed like Gorsuch might be even more conservative than expected: Through his first 15 cases in a partial 2016-17 term, Gorsuch sided with Thomas every single time. That streak has since been broken, but Gorsuch has still sided with Thomas more than any other single justice.

I tallied all of the justices’ votes29 — from when Gorsuch took his seat to Monday morning — and calculated how often each pair of justices agreed with one another. A few pairs of SCOTUS BFFs, eclipsing even the conservative duo of Gorsuch and Thomas, emerged from this analysis. Gorsuch and Thomas have now voted together about 84 percent of the time, but Thomas and Alito, Kagan and Breyer, and Ginsburg and Sotomayor, for example, have all voted together more often.

Supreme pairings

Percentage of agreement between pairs of Supreme Court justices since Neil Gorsuch joined the court in April 2017

Gors. Thom. Alito Rob. Ken. Kag. Brey. Gins. Soto.
Gorsuch 84% 83 81 82 61 60 57 53
Thomas 84 94 81 83 60 57 57 52
Alito 83 94 80 82 58 56 56 51
Roberts 81 81 80 91 72 72 70 66
Kennedy 82 83 82 91 72 70 70 66
Kagan 61 60 58 72 72 92 88 87
Breyer 60 57 56 72 70 92 91 90
Ginsburg 57 57 56 70 70 88 91 94
Sotomayor 53 52 51 66 66 87 90 94


None of these aggregated measures tell us anything qualitative about Gorsuch’s votes or written decisions, of course. But the flavor of the public reception has been what you might expect. “Conservatives have generally been pleased with what they have seen, while liberals say their concerns have been confirmed,” wrote the American Bar Association Journal. As ever, not everyone is happy at the same time.

What’s going on elsewhere on the bench? Some of the court’s recent cases have raised eyebrows for the strange bedfellows they’ve created. “Elena Kagan Is Up to Something,” Slate observed, noting she “crossed ideological lines at least three times” this term. What she’s up to, Mark Joseph Stern argued, is building a centrist bloc, shoulder-to-shoulder with Justice Breyer, Chief Justice John Roberts and Kennedy, and steering the court to “sensible outcomes” rather than “conservative blockbusters.” Be that as it may, Kagan still sided with her two more liberal colleagues nearly 90 percent of the time. And, of course, there are always exceptions to a simplified left-right ideological spectrum of jurisprudence. Last week’s decision on internet sales tax, for example, “defied the usual conservative-liberal lineup,” reported NPR, with Justice Ruth Bader Ginsburg joining Kennedy and the conservatives Alito, Gorsuch and Thomas. And Gorsuch and Breyer joined forces in a dissenting opinion just last week — unlikely bedfellows indeed.

Speaking of Kennedy, what is in store for the pivotal, ideologically central, 81-year-old fulcrum of the court? No retirements were announced during the court’s final day of term. Assuming he stays, the court’s tenuous, four-to-four-plus-Kennedy balance will remain. If he goes, Trump could fill the seat and create a conservative majority that could remain in tact for many years. Who knows … In May, Bloomberg wrote that Kennedy was “the focus of retirement speculation” and The Hill spoke of “a frenzy over rumors.” No one except Kennedy himself really knows, and even then maybe he doesn’t either.

Have a great summer, your honors. (Or is it yours honor?)

26 Jun 14:06

putting graph elements in cells directly

by Cole Nussbaumer Knaflic

This is a really nice way of displaying information.

Today's short post focuses on an Excel tip that I find myself using frequently and I get asked about a ton. While I focus on Excel here, I imagine the same could apply when working in any spreadsheet application. For additional formatting flexibility, put some graph elements in the cells directly.

This is probably easiest to illustrate through an example. Below is a visual from storytelling with data: a data visualization guide for business professionals. It's highlighted in Chapter 6 (pg. 161), which focuses on what I consider to be model examples of data visualization. I regularly get questions about how this graph was created.

 Source: Knaflic, Cole.  Storytelling With Data: A Data Visualization Guide for Business Professionals , Wiley, © 2015. (Original figure had data labels on the stacked bars; I've omitted those here for simplicity.)

Source: Knaflic, Cole. Storytelling With Data: A Data Visualization Guide for Business Professionals, Wiley, © 2015. (Original figure had data labels on the stacked bars; I've omitted those here for simplicity.)

There are two common questions posed about this visual:

  1. How did you format some of the y-axis labels differently from the rest? 
  2. How did you include the TOTAL % in the graph?

The trick in both of these cases is the same: these elements aren't part of the graph directly, rather they are in individual cells in Excel. In this particular graph, the only things directly in the graph element are the stacked bars. Everything else is done in cells. I do this for additional formatting flexibility. In Excel, you can only apply a single format to axis labels on a given axis. You also have to get creative (and it can sometimes be limiting) if you want to add additional numbers or labels to the visual that aren't part of the data you're visualizing directly. Using the cells allows me to break free from both of these constraints.

In case it's easier to see what I'm talking about, below is what the visual looks like if I show the gridlines in Excel (in the preceding view, all of my cells were filled with white).

FIG0605 with gridlines.png

When approaching this way, you do have to take care to ensure that everything is lined up correctly. This means precisely aligning the graph with the cells and making both cell and graph heights line up (otherwise your bars won't correctly align with the words and numbers). Also, be aware that if you shuffle your data around, you'll need to adjust the elements you've put into the cells directly. Changing the order of your data would change the graph in this case, but not the PRIORITY or TOTAL %, which would have to be done manually (unless you set up so it's pointing to the data you reshuffle). Both of these things lead me to express a word of caution: when I break the pieces apart like this, it's easier to introduce issues and have things not line up: both from a visual standpoint as well for data and labels to get out of sync. Because of this, the tradeoffs may not be worth it if you're trying to automate or it's a repeated process that you don't want to have to adjust each time. But so long as you're careful and pay attention to detail, when you need the additional formatting flexibility, consider putting some elements into cells directly.

If it's of interest, you can download my Excel workbook.

Are there other graphs from storytelling with data that you have questions about or would like a behind-the-scenes peek? Or other tricks you employ when graphing data that you'd like to share? Leave a comment!

25 Jun 15:25


by Greg Ross

From a letter of Charles Darwin to Charles Lyell, April 1860:

I must say one more word about our quasi-theological controversy about natural selection, and let me have your opinion when we meet in London. Do you consider that the successive variations in the size of the crop of the Pouter Pigeon, which man has accumulated to please his caprice, have been due to ‘the creative and sustaining powers of Brahma?’ In the sense that an omnipotent and omniscient Deity must order and know everything, this must be admitted; yet, in honest truth, I can hardly admit it. It seems preposterous that a maker of a universe should care about the crop of a pigeon solely to please man’s silly fancies. But if you agree with me in thinking such an interposition of the Deity uncalled for, I can see no reason whatever for believing in such interpositions in the case of natural beings, in which strange and admirable peculiarities have been naturally selected for the creature’s own benefit. Imagine a Pouter in a state of nature wading into the water and then, being buoyed up by its inflated crop, sailing about in search of food. What admiration this would have excited — adaptation to the laws of hydrostatic pressure, &c &c For the life of me I cannot see any difficulty in natural selection producing the most exquisite structure, if such structure can be arrived at by gradation, and I know from experience how hard it is to name any structure towards which at least some gradations are not known.

Ever yours,

C. Darwin.

The post Puffery appeared first on Futility Closet.

21 May 17:45

Graphical evidence that Bernie got shafted

by junkcharts

It appears that 23% is about 1/3rd of 38%. Not only that, 23% is just a hare larger than 8%.

Note that I am placing this post under Light Entertainment



10 May 12:47

rubythegaybirdperson: sixpenceee: A dog in Japan follows a...





A dog in Japan follows a Google Street car. Follow his journey here.

Pure beauty

01 May 18:05



Neat! Very satisfying to look at.



16 Apr 17:19

Well-structured, interactive graphic about newsrooms

by junkcharts

As always, interesting analysis of a data visualization. (And the data itself is quite interesting too!)

Today, I take a detailed look at one of the pieces that came out of an amazing collaboration between Alberto Cairo, and Google's News Lab. The work on diversity in U.S. newsrooms is published here. Alberto's introduction to this piece is here.

The project addresses two questions: (a) gender diversity (representation of women) in U.S. newsrooms and (b) racial diversity (representation of white vs. non-white) in U.S. newsrooms.

One of the key strengths of the project is how the complex structure of the underlying data is displayed. The design incorporates the layering principle everywhere to clarify that structure.

At the top level, the gender and race data are presented separately through the two tabs on the top left corner. Additionally, newsrooms are classified into three tiers: brand-names (illustrated with logos), "top" newsrooms, and the rest.


The brand-name newsrooms are shown with logos while the reader has to click on individual bubbles to see the other newsrooms. (Presumably, the size of the bubble is the size of each newsroom.)

The horizontal scale is the proportion of males (or females), with equality positioned in the middle. The higher the proportion of male staff, the deeper is the blue. The higher the proportion of female staff, the deeper is the red. The colors are coordinated between the bubbles and the horizontal axis, which is a nice touch.

I am not feeling this color choice. The key reference level on this chart is the 50/50 split (parity), which is given the pale gray. So the attention is drawn to the edges of the chart, to those newsrooms that are the most gender-biased. I'd rather highlight the middle, celebrating those organizations with the best gender balance.


The red-blue color scheme unfortunately re-appeared in a subsequent chart, with a different encoding.


Now, blue means a move towards parity while red indicates a move away from parity between 2001 and 2017. Gray now denotes lack of change. The horizontal scale remains the same, which is why this can cause some confusion.

Despite the colors, I like the above chart. The arrows symbolize trends. The chart delivers an insight. On average, these newsrooms are roughly 60% male with negligible improvement over 16 years.


Back to layering. The following chart shows that "top" newsrooms include more than just the brand-name ones.


The dot plot is undervalued for showing simple trends like this. This is a good example of this use case.

While I typically recommend showing balanced axis for bipolar scale, this chart may be an exception. Moving to the right side is progress but the target sits in the middle; the goal isn't to get the dots to the far right so much of the right panel is wasted space.


16 Apr 17:15

pi-slices:Insert - 180409


This one is very satisfying!


Insert - 180409
29 Mar 17:42

Book Review: Twelve Rules For Life

by Scott Alexander

An interesting review of a book that, apparently, is controversial? (I haven't heard of the author or the book before.)


I got Jordan Peterson’s Twelve Rules For Life for the same reason as the other 210,000 people: to make fun of the lobster thing. Or if not the lobster thing, then the neo-Marxism thing, or the transgender thing, or the thing where the neo-Marxist transgender lobsters want to steal your precious bodily fluids.

But, uh…I’m really embarrassed to say this. And I totally understand if you want to stop reading me after this, or revoke my book-reviewing license, or whatever. But guys, Jordan Peterson is actually good.

The best analogy I can think of is C.S. Lewis. Lewis was a believer in the Old Religion, which at this point has been reduced to cliche. What could be less interesting than hearing that Jesus loves you, or being harangued about sin, or getting promised Heaven, or threatened with Hell? But for some reason, when Lewis writes, the cliches suddenly work. Jesus’ love becomes a palpable force. Sin becomes so revolting you want to take a shower just for having ever engaged in it. When Lewis writes about Heaven you can hear harp music; when he writes about Hell you can smell brimstone. He didn’t make me convert to Christianity, but he made me understand why some people would.

Jordan Peterson is a believer in the New Religion, the one where God is the force for good inside each of us, and all religions are paths to wisdom, and the Bible stories are just guides on how to live our lives. This is the only thing even more cliched than the Old Religion. But for some reason, when Peterson writes about it, it works. When he says that God is the force for good inside each of us, you can feel that force pulsing through your veins. When he says the Bible stories are guides to how to live, you feel tempted to change your life goal to fighting Philistines.

The politics in this book lean a bit right, but if you think of Peterson as a political commentator you’re missing the point. The science in this book leans a bit Malcolm Gladwell, but if you think of him as a scientist you’re missing the point. Philosopher, missing the point. Public intellectual, missing the point. Mythographer, missing the point. So what’s the point?

About once per news cycle, we get a thinkpiece about how Modern Life Lacks Meaning. These all go through the same series of tropes. The decline of Religion. The rise of Science. The limitless material abundance of modern society. The fact that in the end all these material goods do not make us happy. If written from the left, something about people trying to use consumer capitalism to fill the gap; if written from the right, something about people trying to use drugs and casual sex. The vague plea that we get something better than this.

Twelve Rules isn’t another such thinkpiece. The thinkpieces are people pointing out a gap. Twelve Rules is an attempt to fill it. This isn’t unprecedented – there are always a handful of cult leaders and ideologues making vague promises. But if you join the cult leaders you become a cultist, and if you join the ideologues you become the kind of person Eric Hoffer warned you about. Twelve Rules is something that could, in theory, work for intact human beings. It’s really impressive.

The non-point-missing description of Jordan Peterson is that he’s a prophet.

Cult leaders tell you something new, like “there’s a UFO hidden inside that comet”. Self-help gurus do the same: “All you need to do is get the right amount of medium-chain-triglycerides in your diet”. Ideologues tell you something controversial, like “we should rearrange society”. But prophets are neither new nor controversial. To a first approximation, they only ever say three things:

First, good and evil are definitely real. You know they’re real. You can talk in philosophy class about how subtle and complicated they are, but this is bullshit and you know it. Good and evil are the realest and most obvious things you will ever see, and you recognize them on sight.

Second, you are kind of crap. You know what good is, but you don’t do it. You know what evil is, but you do it anyway. You avoid the straight and narrow path in favor of the easy and comfortable one. You make excuses for yourself and you blame your problems on other people. You can say otherwise, and maybe other people will believe you, but you and I both know you’re lying.

Third, it’s not too late to change. You say you’re too far gone, but that’s another lie you tell yourself. If you repented, you would be forgiven. If you take one step towards God, He will take twenty toward you. Though your sins be like scarlet, they shall be white as snow.

This is the General Prophetic Method. It’s easy, it’s old as dirt, and it works.

So how come not everyone can be a prophet? The Bible tells us why people who wouldn’t listen to the Pharisees listened to Jesus: “He spoke as one who had confidence”. You become a prophet by saying things that you would have to either be a prophet or the most pompous windbag in the Universe to say, then looking a little too wild-eyed for anyone to be comfortable calling you the most pompous windbag in the universe. You say the old cliches with such power and gravity that it wouldn’t even make sense for someone who wasn’t a prophet to say them that way.

“He, uh, told us that we should do good, and not do evil, and now he’s looking at us like we should fall to our knees.”

“Weird. Must be a prophet. Better kneel.”

Maybe it’s just that everyone else is such crap at it. Maybe it’s just that the alternatives are mostly either god-hates-fags fundamentalists or more-inclusive-than-thou milquetoasts. Maybe if anyone else was any good at this, it would be easy to recognize Jordan Peterson as what he is – a mildly competent purveyor of pseudo-religious platitudes. But I actually acted as a slightly better person during the week or so I read Jordan Peterson’s book. I feel properly ashamed about this. If you ask me whether I was using dragon-related metaphors, I will vociferously deny it. But I tried a little harder at work. I was a little bit nicer to people I interacted with at home. It was very subtle. It certainly wasn’t because of anything new or non-cliched in his writing. But God help me, for some reason the cliches worked.


Twelve Rules is twelve chapters centered around twelve cutesy-sounding rules that are supposed to guide your life. The meat of the chapters never has anything to do with the cutesy-sounding rules. “Treat yourself like someone you are responsible for helping” is about slaying dragons. “Pet a cat when you encounter one on the street” is about a heart-wrenchingly honest investigation of the Problem of Evil. “Do not bother children when they are skateboarding” is about neo-Marxist transgender lobsters stealing your precious bodily fluids. All of them turn out to be the General Prophetic Method applied in slightly different ways.

And a lot of them – especially the second – center around Peterson’s idea of Order vs. Chaos. Order is the comfortable habit-filled world of everyday existence, symbolized by the Shire or any of a thousand other Shire-equivalent locations in other fantasies or fairy tales. Chaos is scary things you don’t understand pushing you out of your comfort zone, symbolized by dragons or the Underworld or [approximately 30% of mythological objects, characters, and locations]. Humans are living their best lives when they’re always balanced on the edge of Order and Chaos, converting the Chaos into new Order. Lean too far toward Order, and you get boredom and tyranny and stagnation. Lean too far toward Chaos, and you get utterly discombobulated and have a total breakdown. Balance them correctly, and you’re always encountering new things, grappling with them, and using them to enrich your life and the lives of those you care about.

So far, so cliched – but again, when Peterson says cliches, they work. And at the risk of becoming a cliche myself, I couldn’t help connecting this to the uncertainty-reduction drives we’ve been talking about recently. These run into a pair of paradoxes: if your goal is to minimize prediction error, you should sit quietly in a dark room with earplugs on, doing nothing. But if your goal is to minimize model uncertainty, you should be infinitely curious, spending your entire life having crazier and crazier experiences in a way that doesn’t match the behavior of real humans. Peterson’s claim – that our goal is to balance these two – seems more true to life, albeit not as mathematically grounded as any of the actual neuroscience theories. But it would be really interesting if one day we could determine that this universal overused metaphor actually reflects something important about the structure of our brains.

Failing to balance these (Peterson continues) retards our growth as people. If we lack courage, we might stick with Order, refusing to believe anything that would disrupt our cozy view of life, and letting our problems gradually grow larger and larger. This is the person who sticks with a job they hate because they fear the unknown of starting a new career, or the political ideologue who tries to fit everything into one bucket so he doesn’t have to admit he was wrong. Or we might fall into Chaos, always being too timid to make a choice, “keeping our options open” in a way that makes us never become anyone at all.

This is where Peterson is at his most Lewisian. Lewis believes that Hell is a choice. On the literal level, it’s a choice not to accept God. But on a more metaphorical level, it’s a choice to avoid facing a difficult reality by ensconcing yourself in narratives of victimhood and pride. You start with some problem – maybe your career is stuck. You could try to figure out what your weaknesses are and how to improve – but that would require an admission of failure and a difficult commitment. You could change companies or change fields until you found a position that better suited your talents – but that would require a difficult leap into the unknown. So instead you complain to yourself about your sucky boss, who is too dull and self-absorbed to realize how much potential you have. You think “I’m too good for this company anyway”. You think “Why would I want to go into a better job, that’s just the rat race, good thing I’m not the sort of scumbag who’s obsessed with financial success.” When your friends and family members try to point out that you’re getting really bitter and sabotaging your own prospects, you dismiss them as tools of the corrupt system. Finally you reach the point where you hate everybody – and also, if someone handed you a promotion on a silver platter, you would knock it aside just to spite them.

…except a thousand times more subtle than this, and reaching into every corner of life, and so omnipresent that avoiding it may be the key life skill. Maybe I’m not good at explaining it; read The Great Divorce (online copy, my review).

Part of me feels guilty about all the Lewis comparisons. One reason is that maybe Peterson isn’t that much like Lewis. Maybe they’re just the two representatives I’m really familiar with from the vast humanistic self-cultivation tradition. Is Peterson really more like Lewis than he is like, let’s say, Marcus Aurelius? I’m not sure, except insofar as Lewis and Peterson are both moderns and so more immediately-readable than Meditations.

Peterson is very conscious of his role as just another backwater stop on the railroad line of Western Culture. His favorite citations are Jung and Nietzsche, but he also likes name-dropping Dostoevsky, Plato, Solzhenitsyn, Milton, and Goethe. He interprets all of them as part of this grand project of determining how to live well, how to deal with the misery of existence and transmute it into something holy.

And on the one hand, of course they are. This is what every humanities scholar has been saying for centuries when asked to defend their intellectual turf. “The arts and humanities are there to teach you the meaning of life and how to live.” On the other hand, I’ve been in humanities classes. Dozens of them, really. They were never about that. They were about “explain how the depiction of whaling in Moby Dick sheds light on the economic transformations of the 19th century, giving three examples from the text. Ten pages, single spaced.” And maybe this isn’t totally disconnected from the question of how to live. Maybe being able to understand this kind of thing is a necessary part of being able to get anything out of the books at all.

But just like all the other cliches, somehow Peterson does this better than anyone else. When he talks about the Great Works, you understand, on a deep level, that they really are about how to live. You feel grateful and even humbled to be the recipient of several thousand years of brilliant minds working on this problem and writing down their results. You understand why this is all such a Big Deal.

You can almost believe that there really is this Science-Of-How-To-Live-Well, separate from all the other sciences, barely-communicable by normal means but expressible through art and prophecy. And that this connects with the question on everyone’s lips, the one about how we find a meaning for ourselves beyond just consumerism and casual sex.


But the other reason I feel guilty about the Lewis comparison is that C.S. Lewis would probably have hated Jordan Peterson.

Lewis has his demon character Screwtape tell a fellow demon:

Once you have made the World an end, and faith a means, you have almost won your man [for Hell], and it makes very little difference what kind of worldly end he is pursuing. Provided that meetings, pamphlets, policies, movements, causes, and crusades, matter more to him than prayers and sacraments and charity, he is ours — and the more “religious” (on those terms) the more securely ours.

I’m not confident in my interpretation of either Lewis or Peterson, but I think Lewis would think Peterson does this. He makes the world an end and faith a means. His Heaven is a metaphorical Heaven. If you sort yourself out and trust in metaphorical God, you can live a wholesome self-respecting life, make your parents proud, and make the world a better place. Even though Peterson claims “nobody is really an atheist” and mentions Jesus about three times per page, I think C.S. Lewis would consider him every bit as atheist as Richard Dawkins, and the worst sort of false prophet.

That forces the question – how does Peterson ground his system? If you’re not doing all this difficult self-cultivation work because there’s an objective morality handed down from on high, why is it so important? “C’mon, we both know good and evil exist” takes you pretty far, but it might not entirely bridge the Abyss on its own. You come of age, you become a man (offer valid for boys only, otherwise the neo-Marxist lobsters will get our bodily fluids), you act as a pillar of your community, you balance order and chaos – why is this so much better than the other person who smokes pot their whole life?

On one level, Peterson knocks this one out of the park:

I [was] tormented by the fact of the Cold War. It obsessed me. It gave me nightmares. It drove me into the desert, into the long night of the human soul. I could not understand how it had come to pass that the world’s two great factions aimed mutual assured destruction at each other. Was one system just as arbitrary and corrupt as the other? Was it a mere matter of opinion? Were all value structures merely the clothing of power?

Was everyone crazy?

Just exactly what happened in the twentieth century, anyway? How was it that so many tens of millions had to die, sacrificed to the new dogmas and ideologies? How was it that we discovered something worse, much worse, than the aristocracy and corrupt religious beliefs that communism and fascism sought so rationally to supplant? No one had answered those questions, as far as I could tell. Like Descartes, I was plagued with doubt. I searched for one thing— anything— I could regard as indisputable. I wanted a rock upon which to build my house. It was doubt that led me to it […]

What can I not doubt? The reality of suffering. It brooks no arguments. Nihilists cannot undermine it with skepticism. Totalitarians cannot banish it. Cynics cannot escape from its reality. Suffering is real, and the artful infliction of suffering on another, for its own sake, is wrong. That became the cornerstone of my belief. Searching through the lowest reaches of human thought and action, understanding my own capacity to act like a Nazi prison guard or gulag archipelago trustee or a torturer of children in a dunegon, I grasped what it means to “take the sins of the world onto oneself.” Each human being has an immense capacity for evil. Each human being understands, a priori, perhaps not what is good, but certainly what is not. And if there is something that is not good, then there is something that is good. If the worst sin is the torment of others, merely for the sake of the suffering produced – then the good is whatever is diametrically opposite to that. The good is whatever stops such things from happening.

It was from this that I drew my fundamental moral conclusions. Aim up. Pay attention. Fix what you can fix. Don’t be arrogant in your knowledge. Strive for humility, because totalitarian pride manifests itself in intolerance, oppression, torture and death. Become aware of your own insufficiency— your cowardice, malevolence, resentment and hatred. Consider the murderousness of your own spirit before you dare accuse others, and before you attempt to repair the fabric of the world. Maybe it’s not the world that’s at fault. Maybe it’s you. You’ve failed to make the mark. You’ve missed the target. You’ve fallen short of the glory of God. You’ve sinned. And all of that is your contribution to the insufficiency and evil of the world. And, above all, don’t lie. Don’t lie about anything, ever. Lying leads to Hell. It was the great and the small lies of the Nazi and Communist states that produced the deaths of millions of people.

Consider then that the alleviation of unnecessary pain and suffering is a good. Make that an axiom: to the best of my ability I will act in a manner that leads to the alleviation of unnecessary pain and suffering. You have now placed at the pinnacle of your moral hierarchy a set of presuppositions and actions aimed at the betterment of Being. Why? Because we know the alternative. The alternative was the twentieth century. The alternative was so close to Hell that the difference is not worth discussing. And the opposite of Hell is Heaven. To place the alleviation of unnecessary pain and suffering at the pinnacle of your hierarchy of value is to work to bring about the Kingdom of God on Earth.

I think he’s saying – suffering is bad. This is so obvious as to require no justification. If you want to be the sort of person who doesn’t cause suffering, you need to be strong. If you want to be the sort of person who can fight back against it, you need to be even stronger. To strengthen yourself, you’ll need to deploy useful concepts like “God”, “faith”, and “Heaven”. Then you can dive into the whole Western tradition of self-cultivation which will help you take it from there. This is a better philosophical system-grounding than I expect from a random psychology-professor-turned-prophet.

But on another level, something about it seems a bit off. Taken literally, wouldn’t this turn you into a negative utilitarian? (I’m not fixated on the “negative” part, maybe Peterson would admit positive utility into his calculus). One person donating a few hundred bucks to the Against Malaria Foundation will prevent suffering more effectively than a hundred people cleaning their rooms and becoming slightly psychologically stronger. I think Peterson is very against utilitarianism, but I’m not really sure why.

Also, later he goes on and says that suffering is an important part of life, and that attempting to banish suffering will destroy your ability to be a complete human. I think he’s still kind of working along a consequentialist framework, where if you banish suffering now by hiding your head in the sand, you won’t become stronger and you won’t be ready for some other worse form of suffering you can’t banish. But if you ask him “Is it okay to banish suffering if you’re pretty sure it won’t cause more problems down the line?” I cannot possibly imagine him responding with anything except beautifully crafted prose on the importance of suffering in the forging of the human spirit or something. I worry he’s pretending to ground his system in “against suffering” when it suits him, but going back to “vague traditionalist platitudes” once we stop bothering him about the grounding question.

In a widely-followed debate with Sam Harris, Peterson defended a pragmatic notion of Truth: things are True if they help in this project of sorting yourself out and becoming a better person. So God is True, the Bible is True, etc. This awkwardly jars with book-Peterson’s obsessive demand that people tell the truth at all times, which seems to use a definition of Truth which is more reality-focused. If Truth is what helps societies survive and people become better, can’t a devoted Communist say that believing the slogans of the Party will help society and make you a better person?

Peterson has a bad habit of saying he supports pragmatism when he really supports very specific values for their own sake. This is hardly the worst habit to have, but it means all of his supposed pragmatic justifications don’t actually justify the things he says, and a lot of his system is left hanging.

I said before that thinking of Peterson as a philosopher was missing the point. Am I missing the point here? Surely some lapses in philosophical groundwork are excusable if he’s trying to add meaning to the lives of millions of disillusioned young people.

But that’s exactly the problem. I worry Peterson wakes up in the morning and thinks “How can I help add meaning to people’s lives?” and then he says really meaningful-sounding stuff, and then people think their lives are meaningful. But at some point, things actually have to mean a specific other thing. They can’t just mean meaning. “Mean” is a transitive verb. It needs some direct object.

Peterson has a paper on how he defines “meaning”, but it’s not super comprehensible. I think it boils down to his “creating order out of chaos” thing again. But unless you use a purely mathematical definition of “order” where you comb through random bit streams and make them more compressible, that’s not enough. Somebody who strove to kill all blue-eyed people would be acting against entropy, in a sense, but if they felt their life was meaningful it would at best be a sort of artificial wireheaded meaning. What is it that makes you wake up in the morning and reduce a specific patch of chaos into a specific kind of order?

What about the most classic case of someone seeking meaning – the person who wants meaning for their suffering? Why do bad things happen to good people? Peterson talks about this question a lot, but his answers are partial and unsatisfying. Why do bad things happen to good people? “If you work really hard on cultivating yourself, you can have fewer bad things happen to you.” Granted, but why do bad things happen to good people? “If you tried to ignore all bad things and shelter yourself from them, you would be weak and contemptible.” Sure, but why do bad things happen to good people? “Suffering makes us stronger, and then we can use that strength to help others.” But, on the broader scale, why do bad things happen to good people? “The mindset that demands no bad thing ever happen will inevitably lead to totalitarianism.” Okay, but why do bad things happen to good people? “Uh, look, a neo-Marxist transgender lobster! Quick, catch it before it gets away!”

C.S. Lewis sort of has an answer: it’s all part of a mysterious divine plan. And atheists also sort of have an answer: it’s the random sputtering of a purposeless universe. What about Peterson?

I think – and I’m really uncertain here – that he doesn’t think of meaning this way. He thinks of meaning as some function mapping goals (which you already have) to motivation (which you need). Part of you already wants to be successful and happy and virtuous, but you’re not currently doing any of those things. If you understand your role in the great cosmic drama, which is as a hero-figure transforming chaos into order, then you’ll do the things you know are right, be at one with yourself, and be happier, more productive, and less susceptible to totalitarianism.

If that’s what you’re going for, then that’s what you’re going for. But a lot of the great Western intellectuals Peterson idolizes spent their lives grappling with the fact that you can’t do exactly the thing Peterson is trying to do. Peterson has no answer to them except to turn the inspiringness up to 11. A commenter writes:

I think Nietzsche was right – you can’t just take God out of the narrative and pretend the whole moral metastructure still holds. It doesn’t. JP himself somehow manages to say Nietzsche was right, lament the collapse, then proceed to try to salvage the situation with a metaphorical fluff God.

So despite the similarities between Peterson and C.S. Lewis, if the great man himself were to read Twelve Rules, I think he would say – in some kind of impeccably polite Christian English gentleman way – fuck that shit.


Peterson works as a clinical psychologist. Many of the examples in the book come from his patients; a lot of the things he thinks about comes from their stories. Much of what I think I got from this book was psychotherapy advice; I would have killed to have Peterson as a teacher during residency.

C.S. Lewis might have hated Peterson, but we already know he loathed Freud. Yet Peterson does interesting work connecting the Lewisian idea of the person trapped in their victimization and pride narratives to Freud’s idea of the defense mechanism. In both cases, somebody who can’t tolerate reality diverts their emotions into a protective psychic self-defense system; in both cases, the defense system outlives its usefulness and leads to further problems down the line. Noticing the similarity helped me understand both Freud and Lewis better, and helped me push through Freud’s scientific veneer and Lewis’ Christian veneer to find the ordinary everyday concept underneath both. I notice I wrote about this several years ago in my review of The Great Divorce, but I guess I forgot. Peterson reminded me, and it’s worth being reminded of.

But Peterson is not really a Freudian. Like many great therapists, he’s a minimalist. He discusses his philosophy of therapy in the context of a particularly difficult client, writing:

Miss S knew nothing about herself. She knew nothing about other individuals. She knew nothing about the world. She was a movie played out of focus. And she was desperately waiting for a story about herself to make it all make sense.

If you add some sugar to cold water, and stir it, the sugar will dissolve. If you heat up that water, you can dissolve more. If you heat the water to boiling, you an add a lot more sugar and get that to dissolve too. Then, if you take that boiling sugar water, and slowly cool it, and don’t bump it or jar it, you can trick it (I don’t know how else to phrase this) into holding a lot more dissolved sugar than it would have if it had remained cool all along. That’s called a super-saturated solution. If you drop a single crystal of sugar into that super-saturated solution, all the excess sugar will suddenly and dramatically crystallize. It’s as if it were crying out for order.

That was my client. People like her are the reason that the many forms of psychotherapy currently practised all work. People can be so confused that their psyches will be ordered and their lives improved by the adoption of any reasonably orderly system of interpretation.

This is the bringing together of the disparate elements of their lives in a disciplined manner – any disciplined manner. So, if you have come apart at the seams (or you have never been together at all) you can restructure your life on Freudian, Jungian, Adlerian, Rogerian, or behavioral principles. At least then you make sense. At least then you’re coherent. At least then you might be good for something, if not yet good for everything.

I have to admit, I read the therapy parts of this book with a little more desperation than might be considered proper. Psychotherapy is really hard, maybe impossible. Your patient comes in, says their twelve-year old kid just died in some tragic accident. Didn’t even get to say good-bye. They’re past their childbearing age now, so they’ll never have any more children. And then they ask you for help. What do you say? “It’s not as bad as all that”? But it’s exactly as bad as all that. All you’ve got are cliches. “Give yourself time to grieve”. “You know that she wouldn’t have wanted you to be unhappy”. “At some point you have to move on with your life”.

Jordan Peterson’s superpower is saying cliches and having them sound meaningful. There are times – like when I have a desperate and grieving patient in front of me – that I would give almost anything for this talent. “You know that she wouldn’t have wanted you to be unhappy.” “Oh my God, you’re right! I’m wasting my life grieving when I could be helping others and making her proud of me, let me go out and do this right now!” If only.

So how does Jordan Peterson, the only person in the world who can say our social truisms and get a genuine reaction with them, do psychotherapy?

He mostly just listens:

The people I listen to need to talk, because that’s how people think. People need to think…True thinking is complex and demanding. It requires you to be articulate speaker and careful, judicious listener at the same time. It involves conflict. So you have to tolerate conflict. Conflict involves negotiation and compromise. So, you have to learn to give and take and to modify your premises and adjust your thoughts – even your perceptions of the world…Thinking is emotionally painful and physiologically demanding, more so than anything else – exept not thinking. But you have to be very articulate and sophisticated to have all this thinking occur inside your own head. What are you to do, then, if you aren’t very good at thinking, at being two people at one time? That’s easy. You talk. But you need someone to listen. A listening person is your collaborator and your opponent […]

The fact is important enough to bear repeating: people organize their brains through conversation. If they don’t have anyone to tell their story to, they lose their minds. Like hoarders, they cannot unclutter themselves. The input of the community is required for the integrity of the individual psyche. To put it another way: it takes a village to build a mind.


A client of mine might say, “I hate my wife”. It’s out there, once said. It’s hanging in the air. It has emerged from the underworld, materialized from chaos, and manifested itself. It is perceptible and concrete and no longer easily ignored. It’s become real. The speaker has even startled himself. He sees the same thing reflected in my eyes. He notes that, and continues on the road to sanity. “Hold it,” he says. “Back up That’s too harsh. Sometimes I hate my wife. I hate her when she won’t tell me what she wants. My mom did that all the time, too. It drove Dad crazy. It drove all of us crazy, to tell you the truth. It even drove Mom crazy! She was a nice person, but she was very resentful. Well, at least my wife isn’t as bad as my mother. Not at all. Wait! I guess my wife is atually pretty good at telling me what she wants, but I get really bothered when she doesn’t, because Mom tortured us all half to death being a martyr. That really affected me. Maybe I overreact now when it happens even a bit. Hey! I’m acting just like Dad did when Mom upset him! That isn’t me. That doesn’t have anthing to do with my wife! I better let her know.” I observe from all this that my client had failed previously to properly distinguish his wife from his mother. And I see that he was possessed, unconsciously, by the spirit of his father. He sees all of that too. Now he is a bit more differentiated, a bit less of an uncarved block, a bit less hidden in the fog. He has sewed up a small tear in the fabric of his culture. He says “That was a good session, Dr. Peterson.” I nod.

This is what all the textbooks say too. But it was helpful hearing Jordan Peterson say it. Everybody – at least every therapist, but probably every human being – has this desperate desire to do something to help the people in front of them who are in pain, right now. And you always think – if I were just a deeper, more eloquent person, I could say something that would solve this right now. Part of the therapeutic skillset is realizing that this isn’t true, and that you’ll do more harm than good if you try. But you still feel inadequate. And so learning that Jordan Peterson, who in his off-hours injects pharmaceutical-grade meaning into thousands of disillusioned young people – learning that even he doesn’t have much he can do except listen and try to help people organize their narrative – is really calming and helpful.

And it makes me even more convinced that he’s good. Not just a good psychotherapist, but a good person. To be able to create narratives like Peterson does – but also to lay that talent aside because someone else needs to create their own without your interference – is a heck of a sacrifice.

I am not sure if Jordan Peterson is trying to found a religion. If he is, I’m not interested. I think if he had gotten to me at age 15, when I was young and miserable and confused about everything, I would be cleaning my room and calling people “bucko” and worshiping giant gold lobster idols just like all the other teens. But now I’m older, I’ve got my identity a little more screwed down, and I’ve long-since departed the burned-over district of the soul for the Utah of respectability-within-a-mature-cult.

But if Peterson forms a religion, I think it will be a force for good. Or if not, it will be one of those religions that at least started off with a good message before later generations perverted the original teachings and ruined everything. I see the r/jordanpeterson subreddit is already two-thirds culture wars, so they’re off to a good start. Why can’t we stick to the purity of the original teachings, with their giant gold lobster idols?

13 Mar 18:35

Steel tariffs, and my new dataviz seminar

by junkcharts

An excellent re-viz of a dataviz, with interpretation.

I am developing a new seminar aimed at business professionals who want to improve their ability to communicate using charts. I want any guidance to be tool-agnostic, so that attendees can implement them using Excel if that’s their main charting software. Over the 12+ years that I’ve been blogging, certain ideas keep popping up; and I have collected these motifs and organized them for the seminar. This post is about a recent chart that brings up a few of these motifs.

This chart has been making the rounds in articles about the steel tariffs.


The chart shows the Top 10 nations that sell steel to the U.S., which together account for 78% of all imports. 

The chart shows a few signs of design. These things caught my eye:

  1. the pie chart on the left delivers the top-line message that 10 countries account for almost 80% of all U.S. steel imports
  2. the callout gives further information about which 10 countries and how much each nation sells to the U.S. This is a nice use of layering
  3. on the right side, progressive tints of blue indicate the respective volumes of imports

On the negative side of the ledger, the chart is marred by three small problems. Each of these problems concerns inconsistency, which creates confusion for readers.

  1. Inconsistent use of color: on the left side, the darker blue indicates lower volume while on the right side, the darker blue indicates higher volume
  2. Inconsistent coding of pie slices: on the right side, the percentages add up to 78% while the total area of the pie is 100%
  3. Inconsistent scales: the left chart carrying the top-line message is notably smaller than the right chart depicting the secondary message. Readers’ first impression is drawn to the right chart.

Easy fixes lead to the following chart:



The central idea of the new dataviz seminar is that there are many easy fixes that are often missed by the vast majority of people making Excel charts. I will present a stack of these motifs. If you're in the St. Louis area, you get to experience the seminar first. Register for a spot here.

Send this message to your friends and coworkers in the area. Also, contact me if you'd like to bring this seminar to your area.


I also tried the following design, which brings out some other interesting tidbits, such as that Canada and Brazil together sell the U.S. about 30% of its imported steel, the top 4 importers account for about 50% of all steel imports, etc. Color is introduced on the chart via a stylized flag coloring.







09 Mar 14:55

The tech world in which everyone is below average

by junkcharts

Excellent edit of a data visualization.

Laura pointed me to an infographic about tech worker salaries in major tech hubs (link).

What's wrong with this map?


The box "Global average" is doubly false. It is not global, and it is not the average!

The only non-American cities included in this survey are Toronto, Paris and London.

The only city with average salary above the "Global average" is San Francisco Bay Area. Since the Bay Area does not outweigh all other cities combined in the number of tech workers, it is impossible to get an average of $135,000.


Here is the second chart.

What's wrong with these lines?


This chart frustrates the reader's expectations. The reader interprets it as a simple line chart, based on three strong hints:

  • time along the horizontal axis
  • data labels show dollar units
  • lines linking time

Each line seems to show the trend of average tech worker salary, in dollar units.

However, that isn't the designer's intention. Let's zoom in on Chicago and Denver:


The number $112,000 (Denver) sits below the number $107,000 (Chicago). It appears that each chart has its own scale. But that's not the case either.

For a small-multiples setup, we expect all charts should use the same scale. Even though the data labels are absolute dollar amounts, the vertical axis is on a relative scale (percent change). To make things even more complicated, the percent change is computed relative to the minimum of the three annual values, no matter which year it occurs.


That's why $106,000 (Chicago) is at the same level as $112,000 (Denver). Those are the minimum values in the respective time series. As shown above, these line charts are easier to understand if the axis is displayed in its true units of percent change.

The choice of using the minimum value as the reference level interferes with comparing one city to the next. For Chicago, the line chart tells us 2015 is about 2 percent above 2016 while 2017 is 6 percent above. For Denver, the line chart tells us that 2016 is about 2 percent above the 2015 and 2017 values. Now what's the message again?

Here I index all lines to the earliest year.


In a Trifecta Checkup analysis (link), I'd be suspicious of the data. Did tech salaries in London really drop by 15-20 percent in the last three years?



09 Mar 14:37

Trump Supporters Substantially More Racist Than Other Republicans

by Lisa Wade, PhD

The interesting story here is that blue bar for Clinton's 2016 supporters. It's almost identical to Kasich and Cruz for nearly all the questions. Why does that blue bar exist in the first place? Shouldn't it be at 0%?

A set of polls by Reuters/Ipsos — the first done just before Cruz and Kasich dropped out of the primary race and the second sometime after — suggests that, when it comes to attitudes toward African Americans, Republicans who favored Cruz and (especially) Kasich have more in common with Clinton supporters than they do Trump supporters.

The first thing to notice is how overwhelmingly common it still is for Americans to believe that “black people in general” are less intelligent, ruder, lazier, and more violent and criminal than whites. Regardless of political affiliation of preferred candidate, at least one-in-five and sometimes more than one-in-three will say so.

But Trump supporters stand out. Clinton and Kasich’s supporters actually have quite similar views. Cruz’s supporters report somewhat more prejudiced views than Kasich’s. But Trump’s supporters are substantially more likely to have negative views of black compared to white people, exceeding the next most prejudiced group by ten percentage points or more in every category.

These differences are BIG. We wouldn’t be surprised to see strong attitudinal differences between Democrats and Republicans — partisanship drives a lot of polls — but for the size of the difference between Democrats and Republicans overall to be smaller than the size of the difference between Trump supporters and other Republicans is notable. It suggests that the Republican party really is divided and that Trump has carved out a space within it by cultivated a very specific appeal.

Lisa Wade, PhD is a professor at Occidental College. She is the author of American Hookup, a book about college sexual culture, and a textbook about gender. You can follow her on Twitter, Facebook, and Instagram.

(View original at

16 Feb 13:24

Cultivating New Solutions for the Orchard-Planting Problem

by Ed Pegg Jr

A new twist on an old riddle.

11 trees in threes

Some trees are planted in an orchard. What is the maximum possible number of distinct lines of three trees? In his 1821 book Rational Amusement for Winter Evenings, J. Jackson put it this way:

Fain would I plant a grove in rows
But how must I its form compose
            With three trees in each row;
To have as many rows as trees;
Now tell me, artists, if you please:
            ’Tis all I want to know.

Those familiar with tic-tac-toe, three-in-a-row might wonder how difficult this problem could be, but it’s actually been looked at by some of the most prominent mathematicians of the past and present. This essay presents many new solutions that haven’t been seen before, shows a general method for finding more solutions and points out where current best solutions are improvable.

Various classic problems in recreational mathematics are of this type:

  1. Plant 7 trees to make 6 lines of 3 trees.
  2. Plant 8 trees to make 7 lines of 3 trees.
  3. Plant 9 trees to make 10 lines of 3 trees.
  4. Plant 10 trees to make 12 lines of 3 trees.
  5. Plant 11 trees to make 16 lines of 3 trees.

Here is a graphic for the last problem, 11 trees with 16 lines of 3 trees. Subsets[points,{3}] collects all sets of 3 points. Abs[Det[Append[#,1]&/@#]] calculates the triangle area of each set. The sets with area 0 are the lines.

11 points
Module[{points, lines},
 points = {{-1, -1}, {-1, 1}, {-1, -2 + Sqrt[5]}, {0, -1}, {0, 0}, {0,
     1/2 (-1 + Sqrt[5])}, {1, -1}, {1,
    1}, {1, -2 + Sqrt[5]}, {-(1/Sqrt[5]), -1 + 2/Sqrt[5]}, {1/Sqrt[
    5], -1 + 2/Sqrt[5]}};
 lines = Select[Subsets[points, {3}],
   Abs[Det[Append[#, 1] & /@ #]] == 0 &];
 Graphics[{EdgeForm[{Black, Thick}], Line[#] & /@ lines, White,
   Disk[#, .1] & /@ points}, ImageSize -> 540]]

This solution for 12 points matches the known limit of 19 lines, but uses simple integer coordinates and seems to be new. Lines are found with GatherBy and RowReduce, which quickly find a canonical line form for any 2 points in either 2D or 3D space.

11 trees with 16 lines of 3 trees - solution
Module[{name, root, vals, points, lines, lines3, lines2g},
 name = "12 Points in 19 Lines of Three";
 points = {{0, 0}, {6, -6}, {-6, 6}, {-2, -6}, {2, 6}, {6,
    6}, {-6, -6}, {-6, 0}, {6, 0}, {0, 3}, {0, -3}};
 lines = Union[Flatten[#, 1]] & /@
   GatherBy[Subsets[points, {2}], RowReduce[Append[#, 1] & /@ #] &];
 lines3 = Select[lines, Length[#] == 3 &];
 lines2g = Select[lines, Length[#] == 2 &&
     (#[[2, 2]] - #[[1, 2]])/(#[[2, 1]] - #[[1, 1]]) == -(3/2) &];
    Row[{"Point ", Style["\[FilledCircle]", Green, 18],
      " at infinity"}],
     Graphics[{Thick, EdgeForm[Thick], Line[Sort[#]] & /@ lines3,
      Green, InfiniteLine[#] & /@ lines2g, { White, Disk[#, .5] } & /@
        points}, ImageSize -> 400,
     PlotRange -> {{-7, 7}, {-7, 7}} ]}, Alignment -> Center]]

This blog goes far beyond those old problems. Here’s how 27 points can make 109 lines of 3 points. If you’d like to see the best-known solutions for 7 to 27 points, skip to the gallery of solutions at the end. For the math, code and methodology behind these solutions, keep reading.

27 points on 109 lines
With[{n = 27},
   If[orchardsolutions[[n, 2]] > orchardsolutions[[n, 3]],
    orchardsolutions[[n, 6]],
    Quiet@zerotripsymm[orchardsolutions[[n, 4]], Floor[(n - 1)/2]]],
   n, {260, 210} 2]]

What is the behavior as the number of trees increases? MathWorld’s orchard-planting problem, Wikipedia’s orchard-planting problem and the On-Line Encyclopedia of Integer Sequences sequence A003035 list some of what is known. Let m be the number of lines containing exactly three points for a set of p points. In 1974, Burr, Grünbaum and Sloane (BGS) gave solutions for particular cases and proved the bounds:

BGS solutions

Here’s a table.

BGS table
droppoints = 3;
      Transpose[{Range[7, 28],
        Drop[#[[2]] & /@ orchardsolutions, 6], {6, 7, 10, 12, 16, 19,
         22, 26, 32, 37, 42, 48, 54, 60, 67, 73, 81, 88, 96, 104,
         113, 121},
        (Floor[# (# - 3)/6] + 1) & /@ Range[7, 28],
        Min[{Floor[#/3 Floor[(# - 1)/2]],
            Floor[(Binomial[#, 2] - Ceiling[3 #/7])/3]}] & /@
         Range[7, 28],
        {2, 2, 3, 5, 6, 7, 9, 10, 12, 15, 16, 18, 20, 23, 24, 26, 28,
         30, 32, "?", "?", "?"},
        {2, 2, 3, 5, 6, 7, 9, 10, 12, 15, 16, 18, 28, 30, 31, 38, 40,
         42, 50, "?", "?", "?"}
        }], {"points", "maximum known lines of three",
       "proven upper bound", "BGS lower bound", "BGS upper bound",
       "4-orchard lower bound",
       "4-orchard upper bound"}], -droppoints]],
   Dividers -> {{2 -> Red}, {2 -> Red, 4 -> Blue, 6 -> Blue}}], 12]

Terence Tao and Ben Green recently proved that the maximum number of lines is the BGS lower bound most of the time (“On Sets Defining Few Ordinary Lines”), but they did not describe how to get the sporadic exceptions. Existing literature does not currently show the more complicated solutions. For this blog, I share a method for getting elegant-looking solutions for the three-orchard problem, as well as describing and demonstrating the power of a method for finding the sporadic solutions. Most of the embeddings shown in this blog are new, but they all match existing known records.

For a given number of points p, let q = ⌊ (p–1)/2⌋; select the 3-subsets of {–q,–q+1,…,q} that have a sum of 0 (mod p). That gives ⌊ (p–3) p/6⌋+1 3-subsets. Here are the triples from p=8 to p=14. This number of triples is the same as the lower bound for the orchard problem, which Tao and Green proved was the best solution most of the time.

Tao and Green table
Text@Grid[Prepend[Table[With[{triples =
        Subsets[Range[-Floor[(p - 1)/2], Ceiling[(p - 1)/2]], {3}],
        Mod[Total[#], p] == 0 &]}, {p, Length[triples],

              ToString[Abs[#]], {Red, Darker[Green], Blue}[[
               If[# == p/2, 2, Sign[#] + 2]]], 25 - p] & /@ #] & /@
        triples, Spacer[1]]}], {p, 8, 14}], {" \!\(\*
StyleBox[\" \",\nFontSlant->\"Italic\"]\)", " lines ", Row[
     {" triples with zero sum (mod \!\(\*
StyleBox[\"p\",\nFontSlant->\"Italic\"]\)) with \!\(\*
StyleBox[\"red\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\*
StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\*
StyleBox[\"negative\",\nFontColor->RGBColor[1, 0, 0]]\), \!\(\*
StyleBox[\"green\",\nFontColor->RGBColor[0, 1, 0]]\)\!\(\*
StyleBox[\" \",\nFontColor->RGBColor[0, 1, 0]]\)\!\(\*
StyleBox[\"zero\",\nFontColor->RGBColor[0, 1, 0]]\) and \!\(\*
StyleBox[\"blue\",\nFontColor->RGBColor[0, 0, 1]]\)\!\(\*
StyleBox[\" \",\nFontColor->RGBColor[0, 0, 1]]\)\!\(\*
StyleBox[\"positive\",\nFontColor->RGBColor[0, 0, 1]]\)"}]}],
  Spacings -> {0, 0}, Frame -> All]

Here’s a clearer graphic for how this works. Pick three different numbers from –8 to 8 that have a sum of zero. You will find that those numbers are on a straight line. The method used to place these numbers will come later.

Number circles

That’s not the maximum possible number of lines. By moving these points some, the triples that have a modulus-17 sum of zero can also be lines. One example is 4 + 6 + 7 = 17.

17 points on 40 lines
With[{n = 17},
   If[orchardsolutions[[n, 2]] > orchardsolutions[[n, 3]],
    orchardsolutions[[n, 6]],
    Quiet@zerotripsymm[orchardsolutions[[n, 4]], Floor[(n - 1)/2]]],
   n, {260, 210} 2]]

Does this method always give the best solution? No—there are at least four sporadic exceptions. Whether any other sporadic solutions exist is not known.

Four sporadic exceptions
  zerosumGraphic[orchardsolutions[[#, 6]], #, {260, 210}] & /@ {7, 11,
     16, 19}, 2]]

More Than Three in a Row

There are also problems with more than three in a row.

  1. Plant 16 trees to make 15 lines of 4 trees.
  2. Plant 18 trees to make 18 lines of 4 trees.
  3. Plant 25 trees in 18 lines of 5 points.
  4. Plant 112 trees in 3D to make 27 lines of 7 trees.

Fifteen lines of four points using 15 points is simple enough. RowReduce is used to collect lines, with RootReduce added to make sure everything is in a canonical form.

15 lines of four points using 15 points
Module[{pts, lines},
 pts = Append[
   Join[RootReduce[Table[{Sin[2 Pi n/5], Cos[2 Pi n/5]}, {n, 0, 4}]],
     1/2 (3 - Sqrt[5]) Table[{Sin[2 Pi n/5], -Cos[2 Pi n/5]}, {n, 0,
        4}]], RootReduce[(1/2 (3 - Sqrt[5]))^2 Table[{Sin[2 Pi n/5],
        Cos[2 Pi n/5]}, {n, 0, 4}]]], {0, 0}];
 lines = Union[Flatten[#, 1]] & /@
     SortBy[Subsets[pts, {2}],
      RootReduce[RowReduce[Append[#, 1] & /@ #]] &],
     RootReduce[RowReduce[Append[#, 1] & /@ #]] &], Length[#] > 3 &];
 Graphics[{Thick, Line /@ lines, EdgeForm[{Black, Thick}], White,
   Disk[#, .05] & /@ pts}, ImageSize -> 520]]

Eighteen points in 18 lines of 4 points is harder, since it seems to require 3 points at infinity. When lines are parallel, projective geometers say that the lines intersect at infinity. With 4 points on each line and each line through 4 points, this is a 4-configuration.

18 points in 18 lines of four points
Module[{config18, linesconfig18, inf},
 config18 = {{0,
    Root[9 - 141 #1^2 + #1^4 &, 1]}, {1/4 (-21 - 9 Sqrt[5]),
    Root[9 - 564 #1^2 + 16 #1^4 &, 4]}, {1/4 (21 + 9 Sqrt[5]),
    Root[9 - 564 #1^2 + 16 #1^4 &, 4]}, {0, -2 Sqrt[3]}, {-3, Sqrt[
    3]}, {3, Sqrt[3]}, {0, Sqrt[3]}, {3/
    2, -(Sqrt[3]/2)}, {-(3/2), -(Sqrt[3]/2)}, {1/4 (3 + 3 Sqrt[5]),
    Root[9 - 564 #1^2 + 16 #1^4 &, 4]}, {1/4 (9 + 3 Sqrt[5]),
    Root[225 - 420 #1^2 + 16 #1^4 &, 1]}, {1/2 (-6 - 3 Sqrt[5]), -(
     Sqrt[3]/2)}, {0,
    Root[144 - 564 #1^2 + #1^4 &, 4]}, {1/2 (21 + 9 Sqrt[5]),
    Root[9 - 141 #1^2 + #1^4 &, 1]}, {1/2 (-21 - 9 Sqrt[5]),
    Root[9 - 141 #1^2 + #1^4 &, 1]}};
 linesconfig18 = SplitBy[SortBy[Union[Flatten[First[#], 1]] & /@
     (Transpose /@ Select[
         SortBy[{#, RootReduce[RowReduce[Append[#, 1] & /@ #]]} & /@
           Subsets[config18, {2}], Last], Last], Length[#] > 1 &]),
    Length], Length];
 inf = Select[
     RootReduce[slope[Take[#, 2]]] &],
    RootReduce[slope[Take[#, 2]]] &], Length[#] > 3 &];
 Graphics[{Thick, Line /@ linesconfig18[[2]], Red,
   InfiniteLine[Take[#, 2]] & /@ inf[[1]], Green,
   InfiniteLine[Take[#, 2]] & /@ inf[[2]], Blue,
   InfiniteLine[Take[#, 2]] & /@ inf[[3]], EdgeForm[Black], White,
   Disk[#, .7] & /@ config18}, ImageSize -> {520, 460}]]

If you do not like points at infinity, arrange 3 heptagons of 7 points to make a 4-configuration of 21 lines through 21 points. That isn’t the record, since it is possible to make at least 24 lines of 4 with 21 points.

21 lines through 21 points, none at infinity
Module[{pts, lines},
 21 linepts =
  4 {{0, -b}, {0, (b c)/(
      a - c)}, {2 a, -b}, {0, -((b c)/(2 a + c))}, {0, (b c)/(
      3 a - c)}, {-a, -b}, {a, -b}, {-c, 0}, {-(c/3), 0}, {c/3,
      0}, {c, 0}, {-((3 a c)/(3 a - 2 c)), (2 b c)/(3 a - 2 c)}, {(
      a c)/(3 a - 2 c), (2 b c)/(3 a - 2 c)}, {(3 a c)/(3 a - 2 c), (
      2 b c)/(3 a - 2 c)}, {(a c)/(5 a - 2 c), (2 b c)/(
      5 a - 2 c)}, {(a c)/(-5 a + 2 c), (2 b c)/(5 a - 2 c)}, {(
      a c)/(-3 a + 2 c), (2 b c)/(
      3 a - 2 c)}, {-((a c)/(a + 2 c)), -((2 b c)/(a + 2 c))}, {(
      a c)/(a + 2 c), -((2 b c)/(a + 2 c))}, {-((a c)/(
       3 a + 2 c)), -((2 b c)/(3 a + 2 c))}, {(a c)/(
      3 a + 2 c), -((2 b c)/(3 a + 2 c))}} /. {a -> 2, c -> 1, b -> 1};
 lines = Union[Flatten[#, 1]] & /@
     SortBy[Subsets[pts, {2}], RowReduce[Append[#, 1] & /@ #] &],
     RowReduce[Append[#, 1] & /@ #] &], Length[#] > 3 &];
 Graphics[{Line /@ lines, EdgeForm[Black], White,
   Disk[#, .3] & /@ pts}, ImageSize -> 500]]

The best-known solution for 25 points has 32 lines, but this solution seems weak due to the low contribution made by the last 3 points. Progressively remove points labeled 25, 24, 23 (near the bottom) to see the best-known solutions that produce 30, 28, 26 lines.

25 point solution
Module[{pts, lines},
 pts = {{0, 1/4}, {0, 3/4}, {-1, 1/2}, {1, 1/2}, {-1, 1}, {1, 1}, {0,
    0}, {0, 3/8}, {-(1/3), 1/3}, {1/3, 1/3}, {-(1/3), 1/6}, {1/3, 1/
    6}, {-(1/5), 2/5}, {1/5, 2/5}, {-(1/5), 1/2}, {1/5, 1/
    2}, {-1, -(1/2)}, {1, -(1/2)}, {-1, -1}, {1, -1}, {-(1/3), 2/
    3}, {1/3, 2/3}, {-(1/3), -(2/3)}, {1/3, -(2/3)}, {9/5, -(6/5)}};
 lines = SplitBy[SortBy[
    (Union[Flatten[#, 1]] & /@ SplitBy[SortBy[Subsets[pts, {2}],
        RowReduce[Append[#, 1] & /@ #] &],
       RowReduce[Append[#, 1] & /@ #] &]), Length], Length];
 Graphics[{InfiniteLine[Take[#, 2]] & /@ lines[[3]],
   White, EdgeForm[Black],
   Table[{Disk[pts[[n]], .04], Black,
       Style[Text[n, pts[[n]]], 8]}, {n, 1, Length[pts]}] & /@ pts,
   Black}, ImageSize -> {520}]]

The 27 lines in space are, of course, the Clebsch surface. There are 12 points of intersection not shown, and some lines have 9 points of intersection.

Output 24
Module[{lines27, clebschpoints},
 lines27 =
  Transpose /@ Flatten[Join[Table[RotateRight[#, n], {n, 0, 2}] & /@
      {{{-(1/3), -(1/3)}, {1, -1}, {-1, 1}}, {{0,
         0}, {1, -(2/3)}, {-(2/3), 1}}, {{1/3, 1/
         3}, {1, -(1/3)}, {-(1/3), 1}}, {{0, 0}, {4/
         9, -(2/9)}, {1, -1}}, {{0, 0}, {1, -1}, {4/9, -(2/9)}}},
     Permutations[#] & /@ {{{30, -30}, {35 - 19 Sqrt[5], -25 +
           17 Sqrt[5]}, {5 + 3 Sqrt[5], 5 - 9 Sqrt[5]}}/
        30, {{6, -6}, {-3 + 2 Sqrt[5], 6 - Sqrt[5]}, {-7 + 4 Sqrt[5],
          8 - 5 Sqrt[5]}}/6}], 1];
 clebschpoints = Union[RootReduce[Flatten[With[
        {sol =
          Solve[e #[[1, 1]] + (1 - e) #[[1, 2]] ==
            f #[[2, 1]] + (1 - f) #[[2, 2]]]},
        If[Length[sol] > 0, (e #[[1, 1]] + (1 - e) #[[1, 2]]) /. sol,
         Sequence @@ {} ]] & /@ Subsets[lines27, {2}], 1]]];
    Sphere[#, .04] & /@ Select[clebschpoints, Norm[#] < 1 &]},
   Tube[#, .02] & /@ lines27, Opacity[.4],
     81 (x^3 + y^3 + z^3) -
       189 (x^2 y + x^2 z + x y^2 + x z^2 + y^2 z + y z^2) +
       54 x y z + 126 (x y + x z + y z) - 9 (x^2 + y^2 + z^2) -
       9 (x + y + z) + 1 == 0, {x, -1, 1}, {y, -1, 1}, {z, -1, 1},
     Boxed -> False][[1]]}, Boxed -> False, SphericalRegion -> True,
  ImageSize -> 520, ViewAngle -> Pi/8]]

I’m not sure that’s optimal, since I managed to arrange 149 points in 241 lines of 5 points.

Output 26
Module[{majorLines, tetrahedral, base, points, lines},
 majorLines[pts_] := ((Drop[#1, -1] &) /@ #1 &) /@
   Select[(Union[Flatten[#1, 1]] &) /@
     SplitBy[SortBy[Subsets[(Append[#1, 1] &) /@ pts, {2}],
       RowReduce], RowReduce], Length[#1] > 4 &];
 tetrahedral[{a_, b_, c_}] :=
  Union[{{a, b, c}, {a, -b, -c}, {b, c, a}, {b, -c, -a}, {c, a,
     b}, {c, -a, -b}, {-c, a, -b}, {-c, -a, b}, {-b, c, -a}, {-b, -c,
     a}, {-a, b, -c}, {-a, -b, c}}];
 base = {{0, 0, 0}, {180, 180, 180}, {252, 252, -252}, {420, 420,
    420}, {1260, 1260, -1260}, {0, 0, 420}, {0, 0, 1260}, {0, 180,
    360}, {0, 315, 315}, {0, 360, 180}, {0, 420, 840}, {0, 630,
    630}, {0, 840, 420}, {140, 140, 420}, {180, 180, -540}, {252, 252,
     756}, {420, 420, -1260}};
 points = Union[Flatten[tetrahedral[#] & /@ base, 1]];
 lines = majorLines[points];
 Graphics3D[{Sphere[#, 50] & /@ points,
   Tube[Sort[#], 10] & /@ Select[lines, Length[#] == 5 &]},
  Boxed -> False, ImageSize -> {500, 460}]]

The 3D display is based on the following 2D solution, which has 25 points in 18 lines of 5 points. The numbers are barycentric coordinates. To use point 231, separate the digits (2,3,1), divide by the total (2/6,3/6,1/6) and simplify (1/3,1/2,1/6). If the outer triangle has area 1, the point 231 extended to the outer edges will make triangles of area (1/3,1/2,1/6).

2D solution
Module[{peggpoints, elkpoints, elklines, linecoords},
 peggpoints = Sort[#/Total[#] & /@
    Flatten[(Permutations /@ {{0, 0, 1}, {0, 1, 1}, {0, 1, 2}, {0, 4,
         5}, {1, 1, 2}, {1, 2, 2},
        {1, 2, 3}, {1, 2, 6}, {1, 4, 4}, {2, 2, 3}, {2, 2, 5}, {2, 3,
         4}, {2, 3, 5}, {2, 5, 5}, {2, 6, 7}, {4, 5, 6}}), 1]];
 elkpoints = Sort[#/Total[#] & /@
    Flatten[(Permutations /@ {{1, 1, 1}, {0, 0, 1}, {1, 2, 3}, {1, 1,
         2}, {0, 1, 1}, {1, 2, 2}, {0, 1, 2}}), 1]];
 elklines =
  First /@ Select[
    SortBy[Tally[BaryLiner[#] & /@ Subsets[elkpoints, {2}]], Last],
    Last[#] > 4 &];
 linecoords =
  Table[FromBarycentrics[{#[[1]], #[[2]]}, tri] & /@
    Select[elkpoints, elklines[[n]].# == 0 &], {n, 1, 18}];
 Graphics[{AbsoluteThickness[3], Line /@ linecoords,
   With[{coord = FromBarycentrics[{#[[1]], #[[2]]}, tri]}, {Black,
       Disk[coord, .12], White, Disk[coord, .105], Black,
       Style[Text[StringJoin[ToString /@ (# (Max[Denominator[#]]))],
         coord], 14, Bold]}] & /@ elkpoints},
  ImageSize -> {520, 450}]]

A further exploration of this is at Extreme Orchards for Gardner. There, I ask if a self-dual configuration exists where the point set is identical to the line set. I managed to find the following 24-point 3-configuration. The numbers 021 represent {0,2,–1}, with blue = positive, red = negative and green = zero. In barycentric coordinates, a line {a,b,c} is on point {d,e,f} if the dot product {a,b,c}.{d,e,f}==0. For point {0,2,–1}, the lines {{–1,1,2},{–1,2,4},{0,1,2}} go through that point. Similarly, for line {0,2,–1}, the points {{–1,1,2},{–1,2,4},{0,1,2}} are on that line. The set of 24 points is identical to the set of 24 lines.

Extreme Orchards for Gardner example
FromBarycentrics[{m_, n_,
    o_}, {{x1_, y1_}, {x2_, y2_}, {x3_, y3_}}] := {m*x1 +
    n*x2 + (1 - m - n)*x3, m*y1 + n*y2 + (1 - m - n)*y3};
tri = Reverse[{{Sqrt[3]/2, -(1/2)}, {0,
    1}, {-(Sqrt[3]/2), -(1/2)}}]; With[{full =
   Union[Flatten[{#, RotateRight[#, 1], RotateLeft[#, 1]} & /@
      {{-1, 0, 2}, {-1, 1, 2}, {-1, 2, 0}, {-1, 2, 1}, {-1, 2,
        4}, {-1, 4, 2}, {0, 1, 2}, {0, 2, 1}}, 1]]},
 Graphics[{EdgeForm[Black], Tooltip[Line[#[[2]]], Style[Row[
        Switch[Sign[#], -1, Style[ToString[Abs[#]], Red], 0,
           Style[ToString[Abs[#]], Darker[Green]], 1,
           Style[ToString[Abs[#]], Blue]] & /@ #[[1]]], 16, Bold]] & /@
     Table[{full[[k]], Sort[FromBarycentrics[#/Total[#], tri] & /@
        Select[full, full[[k]].# == 0 &]]}, {k, 1, Length[full]}],
   White, {Disk[FromBarycentrics[#/Total[#], tri], .15], Black,
        Row[Switch[Sign[#], -1, Style[ToString[Abs[#]], Red], 0,
            Style[ToString[Abs[#]], Darker[Green]], 1,
            Style[ToString[Abs[#]], Blue]] & /@ #],
        FromBarycentrics[#/Total[#], tri]], 14, Bold]} & /@ full},
  ImageSize -> 520]]

With a longer computer run, I found an order-27, self-dual 4-configuration where the points and lines have the same set of barycentric coordinates.

Another solution to the Extreme Orchards for Gardner problem
With[{full =
   Union[Flatten[{#, RotateRight[#, 1],
        RotateLeft[#, 1]} & /@ {{-2, -1, 4}, {-2, 1, 3}, {-1, 1,
        1}, {-1, 2, 0}, {-1, 2, 1}, {-1, 3, 2}, {-1, 4, 2}, {0, 1,
        2}, {1, 1, 2}}, 1]]},
 Graphics[{EdgeForm[Black], Tooltip[Line[#[[2]]], Style[Row[
        Switch[Sign[#], -1, Style[ToString[Abs[#]], Red], 0,
           Style[ToString[Abs[#]], Darker[Green]], 1,
           Style[ToString[Abs[#]], Blue]] & /@ #[[1]]], 16, Bold]] & /@
      Sort[FromBarycentrics[#/Total[#], tri] & /@
        Select[full, full[[k]].# == 0 &]]}, {k, 1, Length[full]}],
   White, {Tooltip[Disk[FromBarycentrics[#/Total[#], tri], .08],
         Switch[Sign[#], -1, Style[ToString[Abs[#]], Red], 0,
            Style[ToString[Abs[#]], Darker[Green]], 1,
            Style[ToString[Abs[#]], Blue]] & /@ #], 16, Bold]]} & /@
    full}, ImageSize -> 520]]

And now back to the mathematics of three-in-a-row, frequently known as elliptic curve theory, but I’ll mostly be veering into geometry.

Cubic Curves and Zero-Sum Geometries

In the cubic curve given by y = x3, all the triples from {–7,–6,…,7} that sum to zero happen to be on a straight line. The Table values are adjusted so that the aspect ratio will be reasonable.

First curve
simplecubic = Table[{x/7, x^3 /343}, {x, -7, 7}];
Graphics[{Cyan, Line[Sort[#]] & /@ Select[Subsets[simplecubic, {3}],
    Abs[Det[Append[#, 1] & /@ #]] == 0 &], {Black, Disk[#, .07],
     White, Disk[#, .06], Black, Style[Text[7 #[[1]], #], 16] } & /@
   simplecubic}, ImageSize -> 520]

For example, (2,3,–5) has a zero-sum. For the cubic curve, those numbers are at coordinates (2,8), (3,27) and (–5,–125), which are on a line. The triple (–∛2, –∛3, ∛2 + ∛3) also sums to zero and the corresponding points also lie on a straight line, but ignore that: restrict the coordinates to integers. With the curve y = x3, all of the integers can be plotted. Any triple of integers that sums to zero is on a straight line.

Traditional form
 Row[{Det[MatrixForm[{{2, 8, 1}, {3, 27, 1}, {-5, -125, 1}}]], " = ",
   Det[{{2, 8, 1}, {3, 27, 1}, {-5, -125, 1}}]}]]

We can use the concept behind the cubic curve to make a rotationally symmetric zero-sum geometry around 0. Let blue, red and green represent positive, negative and zero values. Start with:

First table

To place the values 3 and 4, variables e and f are needed. The positions of all subsequent points up to infinity are forced.

Second table

Note that e and f should not be 0 or 1, since that would cause all subsequent points to overlap on the first five points.

Instead of building around 0, values can instead be reflected in the y = x diagonal to make a mirror-symmetric zero-sum geometry.

Third table

Skew symmetry is also possible with the addition of variables (m,n).

Fourth table

The six variables (a,b,c,d,e,f) completely determine as many points as you like with rotational symmetry about (0,0) or mirror symmetry about the line y = x. Adding the variables (m,n) allows for a skew symmetry where the lines os1 and os2 intersect at (0,0). In the Manipulate, move 1 to change (a,b) and 2 to change (c,d). Move ef horizontally to change e and vertically to change f. For skew symmetry, move mn to change the placements of 1 and 2.

 Module[{ halfpoints, triples, initialpoints, pts2, candidate2},
  halfpoints = Ceiling[(numberofpoints - 1)/2];
  triples =
   Select[Subsets[Range[-halfpoints, halfpoints], {3}],
    Total[#] == 0 &];
  initialpoints =
   rotational /. Thread[{a, b, c, d, e, f} -> Flatten[{ab, cd, ef}]];
  If[symmetry == "mirror",
   initialpoints =
    mirror /. Thread[{a, b, c, d, e, f} -> Flatten[{ab, cd, ef}]]];
  If[symmetry == "skew",
   initialpoints =
    skew /. Thread[{a, b, c, d, e, f, m, n} ->
       Flatten[{ab, cd, ef, mn}]]];
  pts2 = Join[initialpoints, Table[{{0, 0}, {0, 0}}, {46}]];
     index]] = (LineIntersectionPoint33[{{pts2[[1, #]],
          pts2[[index - 1, #]]}, {pts2[[2, #]],
          pts2[[index - 2, #]]}}] & /@ {2, 1}),
   {index, 5, 50}];
  If[showcurve, candidate2 = NinePointCubic2[First /@ Take[pts2, 9]],
   Sequence @@ {}];
     ContourPlot[Evaluate[{candidate2 == 0}], {x, -3, 3}, {y, -3, 3},
       PlotPoints -> 15][[1]], Sequence @@ {}],
    If[showlines, If[symmetry == "mirror",
       Line[pts2[[Abs[#], (3 - Sign[#])/2 ]] & /@ #] & /@
        Select[triples, Not[MemberQ[#, 0]] &],
          pts2[[Abs[#], (3 - Sign[#])/
              2 ]] & /@ #] & /@ (Drop[#, {2}] & /@
          Select[triples, MemberQ[#, 0] &])},
       Line[If[# == 0, {0, 0},
             pts2[[Abs[#], (3 - Sign[#])/2 ]]] & /@ #] & /@
        triples}], Sequence @@ {}],
    If[extrapoints > 0,
     Table[{White, Disk[pts2[[n, index]], .03]}, {n, halfpoints + 1,
       halfpoints + extrapoints}, {index, 1, 2}], Sequence @@ {}],
    Table[{White, Disk[pts2[[n, index]], .08], {Blue, Red}[[index]],
      Style[Text[n, pts2[[n, index]]] , 12]}, {n, halfpoints,
      1, -1}, {index, 1, 2}],
    If[symmetry != "mirror", {White, Disk[{0, 0}, .08], Green,
      Style[Text[0, {0, 0}] , 12]}, Sequence @@ {}],
{RGBColor[1, 1, 0], EdgeForm[{GrayLevel[0], Thickness[Large]}],
         DiskBox[{0, 0}],
{RGBColor[0, 0, 1],
StyleBox[InsetBox["\", {0.05, -0.05}],
ImageSize->{24, 24}]\), ab], Inset[\!\(\*
{RGBColor[1, 1, 0], EdgeForm[{GrayLevel[0], Thickness[Large]}],
         DiskBox[{0, 0}],
{RGBColor[0, 0, 1],
StyleBox[InsetBox["\", {0.07, -0.05}],
ImageSize->{24, 24}]\), cd], Inset[\!\(\*
{RGBColor[0, 1, 0], EdgeForm[{GrayLevel[0], Thickness[Large]}],
         DiskBox[{0, 0}],
StyleBox[InsetBox["\", {0, 0}],
ImageSize->{21, 21}]\), ef], If[symmetry == "skew", Inset[\!\(\*
{RGBColor[1, 0, 1], EdgeForm[{GrayLevel[0], Thickness[Large]}],
          DiskBox[{0, 0}],
StyleBox[InsetBox["\", {0, 0}],
ImageSize->{21, 21}]\), mn], Sequence @@ {}]},
    ImageSize -> {380, 480},
   PlotRange ->
    Dynamic[(3/2)^zoom {{-2.8, 2.8} - zx/5, {-2.5, 2.5} - zy/5}]]],
 {{ab, {2, 2}}, {-2.4, -2.4}, {2.4, 2.4}, ControlType -> Locator,
  Appearance -> None},
 {{cd, {2, -2}}, {-2.4, -2.4}, {2.4, 2.4}, ControlType -> Locator,
  Appearance -> None},
 {{ef, {.7, .13}}, {-2.4, -2.4}, {2.4, 2.4}, ControlType -> Locator,
  Appearance -> None},
 {{mn, {-2.00, -0.5}}, {-2.4, -2.4}, {2.4, 2.4},
  ControlType -> Locator, Appearance -> None},
 Row[{Control@{{symmetry, "rotational", ""}, {"rotational", "mirror",
      "skew"}, ControlType -> PopupMenu}}],
 "points shown",
 {{numberofpoints, 15, ""}, 5, 30, 2, ControlType -> PopupMenu},
 "extra points",
 {{extrapoints, 0, ""}, 0, 20, 1, ControlType -> PopupMenu},
 "move zero",
 Row[{Control@{{zx, 0, ""}, -10, 10, 1, ControlType -> PopupMenu},
   " 5", Style["x", Italic]}],
 Row[{Control@{{zy, 0, ""}, -10, 10, 1, ControlType -> PopupMenu},
   " 5", Style["y", Italic]}],
 "zoom exponent",
 {{zoom, 0, ""}, -2, 3, 1, ControlType -> PopupMenu},
 "show these",
 Row[{Control@{{showlines, True, ""}, {True, False}}, "lines"}],
 Row[{Control@{{showcurve, False, ""}, {True, False}}, "curve"}],
  TrackedSymbols :> {ab, cd, ef, mn, zx, zy, symmetry,
   numberofpoints, extrapoints, zoom},
 ControlPlacement -> Left,
 Initialization :>  (
   Clear[a]; Clear[b]; Clear[c]; Clear[d]; Clear[e]; Clear[f];
   Clear[m]; Clear[n];
   NinePointCubic2[pts3_] :=
    Module[{makeRow2, cubic2, poly2, coeff2, nonzero, candidate},
        Total[Abs[RowReduce[#][[3]]]] & /@
         Subsets[Append[#, 1] & /@ pts3, {4}]] > 0,
      makeRow2[{x_, y_}] := {1, x, x^2, x^3, y, y x, y x^2, y^2,
        y^2 x, y^3};
      cubic2[x_, y_][p_] := Det[makeRow2 /@ Join[{{x, y}}, p]];
      poly2 = cubic2[x, y][pts3];
      coeff2 = Flatten[CoefficientList[poly2, {y, x}]];
      nonzero = First[Select[coeff2, Abs[#] > 0 &]];
      candidate = Expand[Simplify[ poly2/nonzero]];
      If[Length[FactorList[candidate]] > 2, "degenerate", candidate],
   LineIntersectionPoint33[{{a_, b_}, {c_, d_}}] := (
    Det[{a, b}] (c - d) - Det[{c, d}] (a - b))/Det[{a - b, c - d}];
   skew = {{{a, b}, {a m, b m}}, {{c, d}, {c n,
       d n}}, {{a e m - c (-1 + e) n, b e m - d (-1 + e) n}, {(
       a e m + c n - c e n)/(e m + n - e n), (b e m + d n - d e n)/(
       e m + n - e n)}}, {{a f m - ((-1 + f) (a e m - c (-1 + e) n))/(
        e (m - n) + n),
       b f m - ((-1 + f) (b e m - d (-1 + e) n))/(e (m - n) + n)}, {(
       c (-1 + e) (-1 + f) n + a m (e + e f (-1 + m - n) + f n))/(
       1 + f (-1 + e m (m - n) + m n)), (
       d (-1 + e) (-1 + f) n + b m (e + e f (-1 + m - n) + f n))/(
       1 + f (-1 + e m (m - n) + m n))}}};
   rotational = {#, -#} & /@ {{a, b}, {c, d}, {c (-1 + e) - a e,
       d (-1 + e) - b e}, {c (-1 + e) (-1 + f) + a (e - (1 + e) f),
       d (-1 + e) (-1 + f) + b (e - (1 + e) f)}};
   mirror = {#, Reverse[#]} & /@ {{a, b}, {c, d}, {d (1 - e) + b e,
       c (1 - e) + a e}, {(c (1 - e) + a e) (1 - f) +
        b f, (d (1 - e) + b e) (1 - f) + a f}};),
 SynchronousInitialization -> False, SaveDefinitions -> True]

In the rotationally symmetric construction, point 7 can be derived by finding the intersection of lines 16, 25 and 34.

Traditional form simplified
 FullSimplify[{h zerosumgeometrysymmetric[[2,
        2]] + (1 - h) zerosumgeometrysymmetric[[5, 2]] } /.
    Solve[h zerosumgeometrysymmetric[[2,
          2]] + (1 - h) zerosumgeometrysymmetric[[5, 2]] ==
       j zerosumgeometrysymmetric[[3,
          2]] + (1 - j) zerosumgeometrysymmetric[[4, 2]] , {h, j}][[

The simple cubic had 15 points 7 to 7 producing 25 lines. That falls short of the record 31 lines. Is there a way to get 6 more lines? Notice 6 triples with a sum of 0 modulus 15:

6 triples with a sum of zero
Select[Subsets[Range[-7, 7], {3}], Abs[Total[#]] == 15 &]

We can build up the triangle area matrices for those sets of points. If the determinant is zero, the points are on a straight line.

Building up the triangle matrices
matrices15 =
  Append[zerosumgeometrysymmetric[[#, 1]], 1] & /@ # & /@ {{2, 6,
     7}, {3, 5, 7}, {4, 5, 6}};
Row[TraditionalForm@Style[MatrixForm[#]] & /@ (matrices15),

Factor each determinant and hope to find a shared factor other than bcad, which puts all points on the same line. It turns out the determinants have –e + e2 + fe f + f2e f2 + f3 as a shared factor.

Factor each determinant
Column[FactorList[Numerator[Det[#]]] & /@ matrices15]

Are there any nice solutions for –e + e2 + fe f + f2e f2 + f3 = 0? Turns out letting e=Φ (the golden ratio) allows f = –1.

Nice solution
   Table[FindInstance[-e + e^2 + f - e f + f^2 - e f^2 + f^3 == 0 &&
      e > 0 && f > ff, {e, f}, Reals], {ff, -2, 2, 1/15}]],
  LeafCount], 6]

Here’s what happens with base points (a,b) = (1,1), (c,d) = (1,–1) and that value of (e,f).

Nice solution with base points
points15try =
  RootReduce[zerotripsymm[{1, 1, 1, -1, (1 + Sqrt[5])/2, -1}, 7]];
zerosumGraphic[points15try/5, 15, 1.5 {260, 210}]

The solution’s convex hull is determined by points 4 and 2, so those points can be moved to make the solution more elegant.

Points 4 and 2 moved
RootReduce[({{w, x}, {y, z}} /.
      Solve[{{{w, x}, {y, z}}.points15try[[2, 1]] == {1, 1},
         {{w, x}, {y, z}}.points15try[[4, 1]] == {-1, 1}}][[
       1]]).# & /@ {points15try[[1, 1]],
   points15try[[2, 1]]}]

The values for (a,b,c,d) do not need to be exact, so we can find the nearest rational values.

Exact values
nearestRational[#, 20] & /@
 Flatten[{{9 - 4 Sqrt[5], 5 - 2 Sqrt[5]}, {1, 1}}]

That leads to an elegant-looking solution for the 15-tree problem. There are 31 lines of 3 points, each a triple that sums to 0 (mod 15).

15 tree problem
points15 =
  RootReduce[zerotripsymm[{1/18, 9/17, 1, 1, (1 + Sqrt[5])/2, -1}, 7]];
zerosumGraphic[points15, 15, 1.5 {260, 210}]

The 14-point version leads to polynomial equation 2e – 2e2f + e f + ee f2 = 0, which has the nice solution {e->1/2,f-> (–1+√17)/4}. A point at infinity is needed for an even number of points with this method.

14 point problem
{{{1, 1}, {-1, -1}}, {{1, -1}, {-1, 1}}, {{-1, 0}, {1,
   0}}, {{1/2 (3 - Sqrt[17]),
   1/4 (1 - Sqrt[17])}, {1/2 (-3 + Sqrt[17]),
   1/4 (-1 + Sqrt[17])}}, {{1/4 (5 - Sqrt[17]),
   1/8 (-1 + Sqrt[17])}, {1/4 (-5 + Sqrt[17]),
   1/8 (1 - Sqrt[17])}}, {{1/8 (-3 + 3 Sqrt[17]),
   1/16 (7 + Sqrt[17])}, {1/8 (3 - 3 Sqrt[17]),
   1/16 (-7 - Sqrt[17])}}}

The solution on 15 points can be tweaked to give a match for the 16-point, 37-line solution in various ways. The 8 is not particularly meaningful here. The last example is done with skew symmetry, even though it seems the same.

16 points
    zerotripsymm[{5 - 2 Sqrt[5], 9 - 4 Sqrt[5], 1, 1,
      1/2 (1 + Sqrt[5]), -1}, 7], 15, {260, 210}],
    zerotripsymm[{5 - 2 Sqrt[5], 9 - 4 Sqrt[5], 1, 1,
      1/2 (1 + Sqrt[5]), -1}, 7], 16, {260, 210}],
    zerotripsymm[{1, 1, 1, -1, 3 - Sqrt[5], 1/2 (3 - Sqrt[5])}, 7],
    16, {260, 210}],
       1 - Sqrt[5], -3 + Sqrt[5], -3 + Sqrt[5], -1 + Sqrt[5],
       1/2 (1 + Sqrt[5]), 1/2 (-1 + Sqrt[5]), 1/2 (1 + Sqrt[5])},
      7]], 16, {260, 210}]}, 2]]

The first solution is a special case of the 15-solution with an abnormal amount of parallelism, enough to match the sporadic 16-point solution. How did I find it?

Orchard-Planting Polynomials

Here are coordinates for the positive points up to 4 in the mirror-symmetric and skew-symmetric cases. They quickly get more complicated.

    Prepend[Transpose[First /@ Take[zerosumgeometrymirror, 4]],
     Range[1, 4]]], {"number", x, y}],
  Dividers -> {{2 -> Green}, {2 -> Green}}]
      Prepend[First /@ Take[zerosumgeometryskew, 4], {0, 0}]],
     Range[0, 4]]], {"number", x, y}],
  Dividers -> {{2 -> Blue}, {2 -> Blue}}]

Here are coordinates for the positive points up to 7 in the rotationally symmetric case. These are more tractable, so I focused on them.

      Prepend[First /@ Take[zerosumgeometrysymmetric, 7], {0, 0}]],
     Range[0, 7]]], {"number", x, y}],
  Dividers -> {{2 -> Red}, {2 -> Red}}]

For 14 and 15 points, the polynomials 2e – 2e2f + e f + e2 fe f2 and –e + e2 + fe f + f2e f2 + f3 appeared almost magically to solve the problem. Why did that happen? I have no idea, but it always seems to work. I’ll call these orchard-planting polynomials. It’s possible that they’ve never been used before to produce elegant solutions for this problem, because we would have seen them. Here are the next few orchard-planting polynomials. As a reminder, these are shared factors of the determinants generated by forcing triples modulo p to be lines.

     With[{subs =
        Select[Subsets[Range[-Floor[n/2], Floor[n/2]], {3}],
         Mod[ Abs[Total[#]], n ] == 0 &&
           Not[MemberQ[#, -(n/2)]] &]}, {n, Length[subs],
       Select[subs, Min[#] > 0 && Max[#] < 13 && Max[#] < n/2 &],
         Apply[Intersection, (First[Sort[FullSimplify[{#, -#}]]] & /@
              First /@ FactorList[Numerator[#]] & /@
                Append[zerosumgeometrysymmetric[[#, 1]],
                   1] & /@ #] & /@
               Min[#] > 0 && Max[#] < 13 && Max[#] < n/2 &]])],
         LeafCount]]}], {n, 11, 16}], {"trees", "lines",
     "triples needing modulus", "orchard planting polynomial"}]], n]

Here is the major step for the solution of 14 trees. The item showing up in the numerator generated by (3,5,6) happens to be the denominator of item 7 = (3 + 5 + 6)/2.

Major step
With[{mat =
   Append[zerosumgeometrysymmetric[[#, 1]], 1] & /@ {3, 5, 6}},
  Row[{Det[MatrixForm[mat]], " = ", Factor[Det[mat]] == 0,
    "\n compare to ",
    Expand[-Denominator[zerosumgeometrysymmetric[[7, 1, 1]] ]]}]]]

But I should have expected this. The solution for 18 points is next. The point 9 is at infinity! Therefore, level 9 needs 1/0 to work properly.

18 points
zerosumGraphic[zerotripsymm[orchardsolutions[[18, 4]], 8], 18,
 2 {260, 210}]

Here's a contour plot of all the orchard-planting polynomials up to order 28. The number values give the location of a particularly elegant solution for that number of points.

Contour plot
allorchardpolynomials =
 Table[orchardsolutions[[ff, 5]] == 0, {ff, 11, 27,
   2}]; Graphics[{ContourPlot[
    Evaluate[allorchardpolynomials], {e, -3/2, 2}, {f, -3/2, 2},
    PlotPoints -> 100][[1]], Red,
  Table[Style[Text[n, Take[orchardsolutions[[n, 4]], -2]], 20], {n,
    11, 28}]}]

Recall from the construction that e and f should not be 0 or 1, since that would cause all subsequent points to overlap on the first five points, causing degeneracy. The curves intersect at these values.

We can also plot the locations where the e f values lead to lines of two points having the same slope. Forcing parallelism leads to hundreds of extra curves. Do you see the lower-right corner where the green curve is passing through many black curves? That's the location of the sporadic 16-point solution. It's right there!

slope[{{x1_, y1_}, {x2_, y2_}}] := (y2 - y1)/(x2 - x1);
theslopes = {# - 1,
        First /@ Take[zerosumgeometrysymmetric, 11], {0,
         0}][[#]]]]} & /@
    10], {2}]; sameslope = {#[[2, 1]], #[[1]]} & /@ (Transpose /@
    SplitBy[SortBy[{#[[1]], #[[2, 1]] ==
          Simplify[#[[2, 2]]]} & /@ ({#[[1]], Flatten[#[[2]]]} & /@
                 1]], {Length[#[[2]]]}], (List @@@ # & /@ #[[
                  2]])}] & /@
                Solve[{#[[2, 1]] == #[[2, 2]], d != (b c)/a , e != 0,
                  e != 1, f != 0, f != 1}]} & /@
              Take[SortBy[(Transpose /@
                  Select[Subsets[theslopes, {2}],
                   Length[Union[Flatten[First /@ #]]] == 4 &]),
                Total[Flatten[#[[1]]]] &], 150],
                  "Complex"]] == 0 && Length[#[[2]]] > 0 &], 1],
          Last]), Last], Last]);
     Evaluate[sameslope[[n, 1]]], {e, -3/2, 2}, {f, -3/2, 2},
     PlotPoints -> 50, ContourStyle -> Black][[1]], {n, 1, 162}], Red,
     Evaluate[allorchardpolynomials[[n]]], {e, -3/2, 2}, {f, -3/2,
      2}, PlotPoints -> 50, ContourStyle -> Green][[1]], {n, 1, 18}],
  Tooltip[Point[#], #] & /@ Tuples[Range[-6, 6]/4, {2}] }]

That's my way to find sporadic solutions. The mirror and skew plots have added levels of messiness sufficient to defy my current ability to analyze them.

Is there an easy way to generate these polynomials? I have no idea. Here are plots of their coefficient arrays.

Coefficient plots
   Grid[{Range[11, 22],
     With[{array = CoefficientList[#, {e, f}]},
        With[{rule = Thread[Apply[Range, MinMax[Flatten[array]]] ->

               Table[ RGBColor[1, 1 - z/Abs[Min[Flatten[array]]],
                 1 - z/Abs[Min[Flatten[array]]]], {z, 1,
              {RGBColor[1, 1, 1]},
              Table[ RGBColor[1 - z/Abs[Max[Flatten[array]]], 1,
                1], {z, 1, Abs[Max[Flatten[array]]]}]]]},
         ArrayPlot[array, ColorRules -> rule,
          ImageSize -> Reverse[Dimensions[array]] {7, 7},
          Frame -> False ]]] & /@ (#[[5]] & /@
        Take[orchardsolutions, {11, 22}])}, Frame -> All],
  Text@Grid[{Range[23, 28],
     With[{array = CoefficientList[#, {e, f}]},
        With[{rule = Thread[Apply[Range, MinMax[Flatten[array]]] ->

               Table[ RGBColor[1, 1 - z/Abs[Min[Flatten[array]]],
                 1 - z/Abs[Min[Flatten[array]]]], {z, 1,
              {RGBColor[1, 1, 1]}, 

              Table[ RGBColor[1 - z/Abs[Max[Flatten[array]]], 1,
                1], {z, 1, Abs[Max[Flatten[array]]]}]]]},
         ArrayPlot[array, ColorRules -> rule,
          ImageSize -> Reverse[Dimensions[array]] {7, 7},
          Frame -> False ]]] & /@ (#[[5]] & /@
        Take[orchardsolutions, {23, 28}])}, Frame -> All]},
 Alignment -> Center]

Graphics of Orchard Solutions

Graphics of orchard solutions
     If[orchardsolutions[[n, 2]] > orchardsolutions[[n, 3]],
      orchardsolutions[[n, 6]],
      Quiet@zerotripsymm[orchardsolutions[[n, 4]],
        Floor[(n - 1)/2]]], n, {260, 210}], {n, 9, 28}], 2]]

Download the full notebook to see all the code used for finding elegant-looking solutions.

Unsolved Problems

Looking for unsolved problems of the orchard-planting variety? Here are several I suggest:

  1. Do more sporadic solutions exist for the three-orchard problem?
  2. Can 11- and 19-point solutions be found with partial zero-sum geometry?
  3. Do better solutions exist for four-orchard solutions on 17 or more points?
  4. Do smaller 3- and 4-configurations exist where the sets of the barycentric coordinates for the points and lines are the same?
  5. Does a 5-configuration exist where the sets of the barycentric coordinates for the points and lines are the same?
  6. What are best solutions for the five-orchard problem?
  7. Is there a good method for generating orchard-planting polynomials?

And if you'd like to explore more recreational mathematics, check out some of the many entries on the Wolfram Demonstrations Project.

13 Feb 16:57

Check out this remarkable view of New York City captured by the...


Wow! That is an astonishing view!

Check out this remarkable view of New York City captured by the DigitalGlobe Worldview-3 satellite at an extremely low-angle. We’re pumped to announce that we just added this shot to our Printshop along with four others. You can check out what we added here: particular shot is made possible due to the focal length of the camera in this satellite that is roughly 32 times longer than that of a standard DSLR camera. Within the full expansive Overview, many of the city’s landmarks are clearly visible, including the Statue of Liberty, both JFK and LaGuardia airports, the Freedom Tower, the skyscrapers of Midtown, Central Park, and the George Washington Bridge.

07 Feb 22:13

1,800 Digitial Drawings Reveal Our Ability to Remember Popular NFL Team Logos

by /u/joka86

This is fascinating!

29 Jan 17:07

More Odd Fiction

by Greg Ross

I love interesting books like this. A 120 page book which is ONE sentence (or another which is 517 pages!).

Peter Carey’s True History of the Kelly Gang contains no commas. (“I lost my own father at 12 yr. of age and know what it is to be raised on lies and silences my dear daughter you are presently too young to understand a word I write but this history is for you and will contain no single lie may I burn in Hell if I speak false.”)

Vanessa Place’s Dies: A Sentence is a single sentence of 120 pages.

Mathias Enard’s Zone is a single sentence of 517 pages.

Michel Thaler’s Le Train de Nulle Part contains no verbs. (“Quelle aubaine! Une place de libre, ou presque, dans ce compartiment. Une escale provisoire, pourquoi pas! Donc, ma nouvelle adresse dans ce train de nulle part: voiture 12, 3ème compartiment dans le sens de la marche. Encore une fois, pourquoi pas?”)

Christine Brooke-Rose’s Amalgamemnon is a “pragmatic lipogram” — all its verbs are conditional, future, subjunctive, etc., so that nothing is actually happening in the present: “I shall soon be quite redundant at last despite of all, as redundant as you after queue and as totally predictable, information-content zero.”

Adam Adams’ 2008 novel Unhooking a DD-Cup Bra Without Fumbling contains no Es.

My notes say that Iegor Gran’s Les Trois Vies de Lucie can be read straight through, recto pages only, or verso pages only, yielding three different stories, but I haven’t managed to find a copy to check.

29 Jan 17:05

The Wolfram Language Bridges Mathematics and the Arts

by Christopher Carlson

Beautiful intersections of math and art!

Every summer, 200-some artists, mathematicians and technologists gather at the Bridges conference to celebrate connections between mathematics and the arts. It’s five exuberant days of sharing, exploring, puzzling, building, playing and discussing diverse artistic domains, from poetry to sculpture.

Bridges conference

The Wolfram Language is essential to many Bridges attendees’ work. It’s used to explore ideas, puzzle out technical details, design prototypes and produce output that controls production machines. It’s applied to sculpture, graphics, origami, painting, weaving, quilting—even baking.

In the many years I’ve attended the Bridges conferences, I’ve enjoyed hearing about these diverse applications of the Wolfram Language in the arts. Here is a selection of Bridges artists’ work.

George Hart

George Hart is well known for his insanely tangled sculptures based on polyhedral symmetries. Two of his recent works, SNO-Ball and Clouds, were puzzled out with the help of the Wolfram Language:


This video includes a Wolfram Language animation that shows how the elements of the Clouds sculpture were transformed to yield the vertically compressed structure.

One of Hart’s earliest Wolfram Language designs was for the Millennium Bookball, a 1998 commission for the Northport Public Library. Sixty wooden books are arranged in icosahedral symmetry, joined by cast bronze rings. Here is the Wolfram Language design for the bookball and a photo of the finished sculpture:

Book sculpture graphicMillennium Bookball

One of my favorite Hart projects was the basis of a paper with Robert Hanson at the 2013 Bridges conference: “Custom 3D-Printed Rollers for Frieze Pattern Cookies.” With a paragraph of Wolfram Language code, George translates images to 3D-printed rollers that emboss the images on, for example, cookie dough:


It’s a brilliant application of the Wolfram Language. I’ve used it myself to make cookie-roller presents and rollers for patterning ceramics. You can download a notebook of Hart’s code. Since Hart wrote this code, we’ve added support for 3D printing to the Wolfram Language. You can now send roller designs directly to a printing service or a local 3D printer using Printout3D.

Christopher Hanusa

Christopher Hanusa has made a business of selling 3D-printed objects created exclusively with the Wolfram Language. His designs take inspiration from mathematical concepts—unsurprising given his position as an associate professor of mathematics at Queens College, City University of New York.

Hanusa’s designs include earrings constructed with mesh and region operations:


… a pendant designed with transformed graphics primitives:


… ornaments designed with ParametricPlot3D:


… and a tea light made with ParametricPlot3D, using the RegionFunction option to punch an interesting pattern of perforations into the cylinder:

Tea light graphicTea light

Hanusa has written about how he creates his designs with the Wolfram Language on his blog, The Mathematical Zorro. You can see all of Hanusa’s creations in his Shapeways shop.

William F. Duffy

William F. Duffy, an accomplished traditional sculptor, also explores forms derived from parametric equations and cast from large-scale resin 3D prints. Many of his forms result from Wolfram Language explorations.

Here, for example, are some of Duffy’s explorations of a fifth-degree polynomial that describes a Calabi–Yau space, important in string theory:


Duffy plotted one instance of that function in Mathematica, 3D-printed it in resin and made a mold from the print in which the bronze sculpture was cast. On the left is a gypsum cement test cast, and on the right the finished bronze sculpture, patinated with potassium sulfide:

Cement scupltureBronze sculpture

On commission from the Simons Center for Geometry and Physics, Duffy created the object on the left as a bronze-infused, stainless steel 3D print. The object on the right was created from the same source file, but printed in nylon:


Duffy continues to explore functions on the complex plane as sources for sculptural structures:

Complex plane

You will be able to see more of Duffy’s work, both traditional and mathematical, on his forthcoming website.

Robert Fathauer

Robert Fathauer uses the Wolfram Language to explore diverse phenomena, including fractal structures with negative curvature that are reminiscent of natural forms. This print of such a form was exhibited in the Bridges 2013 art gallery:

Negative curvature

Fathauer realizes the ideas he explores in meticulously handcrafted ceramic forms reminiscent of corals and sponges:


One of Fathauer’s Mathematica-designed ceramic works consisted of 511 cubic elements (!). Here are shots of the Wolfram Language model and its realization, before firing, as a ceramic sculpture:


Unfortunately, in what Fathauer has confirmed was a painful experience, the sculpture exploded in the kiln during firing. But this structure, as well as several other fractal structures designed with the Wolfram Language, is available in Fathauer’s Shapeways shop.

Martin Levin

Martin Levin makes consummately crafted models that reveal the structure of our world—the distance, angular and topological relationships that govern the possibilities and impossibilities of 3D space:

Wire sculptureWire sculpture

What you don’t—or barely—see is where the Wolfram Language has had the biggest impact in his work. The tiny connectors that join the tubular parts are 3D printed from models designed with the Wolfram Language:

Wire sculptureWire sculpture

Wire sculptureWire sculpture

Levin is currently designing 3D-printed modules that can be assembled to make a lost-plastic bronze casting of a compound of five tetrahedra:


The finished casting should look something like this (but mirror-reversed):

Input 1

Henry Segerman

Henry Segerman explored some of the topics in his engaging book Visualizing Mathematics with 3D Printing with Wolfram Language code. While the forms in the book are explicitly mathematical, many have an undeniable aesthetic appeal. Here are snapshots from his initial explorations of surfaces with interesting topologies…


… which led to these 3D-printed forms in his Shapeways shop:

Topology sculptureTopology sculptureTopology sculpture

His beautiful Archimedean Spire

Archimedean Spire

… was similarly modeled first with Wolfram Language code:


In addition to mathematical models, Segerman collaborates with Robert Fathauer (above) to produce exotic dice, whose geometry begins as Wolfram Language code—much of it originating from the Wolfram MathWorld entry “Isohedron”:


Elisabetta Matsumoto

In addition to constructing immersive virtual reality hyperbolic spaces, Elisabetta Matsumoto turns high-power mathematics into elegant jewelry using the Wolfram Language. This piece, which requires a full screen of mathematical code to describe, riffs on one of the earliest discovered minimal surfaces, Scherk’s second surface:

Surface graphsPendant

Continuing the theme of hyperbolic spaces, here’s one of Matsumoto’s Wolfram Language designs, this one in 2D rather than 3D:

2D hearts

You can see Matsumoto’s jewelry designs in her Shapeways shop.

Koos and Tom Verhoeff

Father and son Koos and Tom Verhoeff have long used the Wolfram Language to explore sculptural forms and understand the intricacies of miter joint geometries and torsion constraints that enable Koos to realize his sculptures. Their work is varied, from tangles to trees to lattices in wood, sheet metal and cast bronze. Here is a representative sample of their work together with the underlying Wolfram Language models, all topics of Bridges conference papers:

Three Families of Mitered Borromean Ring Sculptures

Borromean ring graphicBorromean ring sculpture

Mitered Fractal Trees: Constructions and Properties

Fractal treeFractal tree sculpture

Folded Strips of Rhombuses, and a Plea for the Square Root of 2 : 1 Rhombus

Folded strip of rhombus graphicRhombus sculpture

Tom Verhoeff’s YouTube channel has a number of Wolfram Language videos, including one showing how the last of the structures above is developed from a strip of rhombuses.

In 2015, three Verhoeff sculptures were installed in the courtyard of the Mathematikon of Heidelberg University. Each distills one or more mathematical concepts in sculptural form. All were designed with the Wolfram Language:

Math concept sculptureMath concept graphicMath concept graphic

Math concept sculptureMath concept sculptureMath concept graphic

Math concept sculptureMath concept graphic

You can find detailed information about the mathematical concepts in the Mathematikon sculptures in the Bridges 2016 paper “Three Mathematical Sculptures for the Mathematikon.”

Edmund Harriss

Edmund Harriss has published two best-selling thinking person’s coloring books, Patterns of the Universe and Visions of the Universe, in collaboration with Alex Bellos. They’re filled with gorgeous mathematical figures that feed the mind as well as the creative impulse. Edmund created his figures with Mathematica, a tribute to the diversity of phenomena that can be productively explored with the Wolfram Language:

Harriss patternHarriss designHarriss pattern

Harriss pattern

Loe Feijs and Marina Toeters

Loe Feijs and Marina Toetters are applying new technology to traditional weaving patterns: puppytooth and houndstooth, or pied-de-poule. With Wolfram Language code, they’ve implemented cellular automata whose patterns tend toward and preserve houndstooth patterns:

Houndstooth patternHoundstooth pattern

By adding random elements to the automata, they generate woven fabric with semi-random patterns that allude to houndstooth:

Houndstooth quiltHoundstooth coat

This video describes their houndstooth work. You can read the details in their Bridges 2017 paper, “A Cellular Automaton for Pied-de-poule (Houndstooth).”

Caroline Bowen

You can hardly find a more direct translation from mathematical function to artistic expression than Caroline Bowen’s layered Plexiglas works. And yet her craftsmanship and aesthetic choices yield compelling works that transcend mere mathematical models.

The two pieces she exhibited in the 2016 Bridges gallery were inspired by examples in the SliceContourPlot3D documentation (!). All of the pieces pictured here were created using contour-plotting functions in Mathematica:

Contour slicesContour slices

In 2017, Bowen exhibited a similarly layered piece with colors that indicate the real and imaginary parts of the complex-valued function ArcCsch[z4]+Sec[z2] as well as the function’s poles and branch cuts:

Bowen art

Jeannine Mosely

Paper sculptor Jeannine Mosely designs some of her origami crease patterns with the Wolfram Language. In some cases, as with these tessellations whose crease patterns require the numerical solution of integrals, the Wolfram Language is essential:

Tessellations artTessellations art

Mosely created these “bud” variations with a parametric design encapsulated as a Wolfram Language function:

Bud variationBud variationBud variation

Bud sculpture

If you’d like to try folding your own bud, Mosely has provided a template and instructions.

Helaman Ferguson

The design and fabrication of Helaman Ferguson’s giant Umbilic Torus SC sculpture was the topic of a Bridges 2012 paper authored with his wife Claire, “Celebrating Mathematics in Stone and Bronze: Umbilic Torus NC vs. SC.”

The paper details the fabrication of the sculpture (below left), an epic project that required building a gantry robot and carving 144 one-ton blocks of sandstone. The surface of the sculpture is textured with a Hilbert curve, a single line that traverses the entire surface, shown here in a photo of an earlier, smaller version of the sculpture (right):

Hilbert Curve sculptureHilbert Curve sculpture

The Hilbert curve is not just surface decoration—it’s also the mark left by the ball-head cutting tool that carved the curved surfaces of the casting molds. The ridges in the surface texture are the peaks left between adjacent sweeps of the cutting tool.

Ferguson attacked the tasks of modeling the Hilbert curve tool path and generating the G-code that controlled the CNC milling machine that carved the molds with Mathematica:

Ferguson's computer screen

Christopher Carlson

I too participate in the Bridges conferences, and I use the Wolfram Language nearly every day to explore graphical and sculptural ideas. One of the more satisfying projects I undertook was the basis of a paper I presented at the 2015 Bridges conference, “Algorithmic Quilting,” written in collaboration with Theodore Gray and Nina Paley.

The paper describes an algorithmic method we used to generate a wide variety of single-line fills for quilts. Starting with a distribution of points, we make a graph on the points, extract a spanning tree from it and render a fill by tracing around the tree:

Quilt image

We tested the algorithm by generating a variety of backgrounds for a quilt based on frames of Eadweard Muybridge’s horse motion studies:


Here’s an animation of the frames in the quilt:

Horse quilt animation

If you’re an artist, designer or architect who uses the Wolfram Language in your work, I’d like to hear about what you do. If you’re looking for a mathematical artist, we know lots of them. In either case, drop me a line at
22 Jan 18:19

Stars within 50 light years visualized in 3d plane in (radial ,transverse ,z-axis)

by /u/Aad1tya23

There are some very nifty diagrams on this website!

19 Jan 19:00

Favourite maps from 2017

by Kenneth Field

Nice collection of maps!

I've been a little busy writing my book this year so blog posts have been a bit thin on the ground. It was only as I was packing up for a short Christmas vacation that I realised I hadn't even compiled my list of favourite maps from the year. So, with some of the world already embarking on 2018 here's a selection of maps that piqued my interest in no particular order.

Trump's World by Phoebe McLean (age 15)
There probably isn't a better summary of the world in 2017 than this lovely hand-drawn map which won an ICA Children's map competition award

Planet Brewdog by Craig Fisher
It's just a map of Brewdog locations but it's massive and a perfect way to fill up an otherwise plain wall in a modern industrial brewery facility. Here, in the Columbus OH tap room.

Winter Map of Montana by Kevin Nelstead
I particularly like the halos on the white labels :-)

Tactile Atlas of Switzerland by Anna Vetter
Beautifully produced atlas for the blind and partially sighted using raised printing.

Cinemaps by Andrew Degraff
Stunning axonometric maps of over 30 films charting major plot lines and characters as they move through the film's landscape.

The new Swiss World Atlas by the Institute of Cartography and GeoInformation at ETH Zurich
A stunningly beautiful, rich and detailed atlas for secondary school children...actually, for anyone!

Blue and White Dream by anon (China)
Making a map with only a single hue is hard. This is visually stunning, especially set within a large Chinese wall hanging. Apologies, I don't know who created it.

Where the Animals Go by James Cheshire and Oliver Uberti
OK, so the UK version was published in 2016 but the American version was definitely published in 2017 and therefore qualifies. After the success of London: The Information Capital, James and Oliver hit gold again with this award-winning atlas of over 50 great maps plotting animal movement.

San Diego Emoji map by Warren Vick and Europa Technologies
Using gridded emoji is a great idea for a one-off map.

Fifty years of cyclone paths inside the Philippines by David Garcia
Just the lines drawn by the data but revealing the shape of the islands and, with it, the scale of the phenomena.

World Happiness by National Geographic Magazine
I'm a sucker for a multivariate Dorling cartogram Chernoff Face combo.

Lights On and Lights Out by John Nelson
Simple idea mapping the difference between NASA's 2012 and 2017 Earth at Night imagery. Exquisitely rendered.

The best places to see the eclipse by Josh Stevens and NASA
The use of clouds to show, err, the likelihood of cloudcover (and the inverse, clear skies) for the 2017 Solar Eclipse. Simple. Effective.

The Melting of Antarctica by Lauren Tierney
Stunning spread in National Geographic. Great composition and use of angle and projection to tell this story.

U.S. Airport ID requirements by The Washington Post
Neat, interactive use of the gridded cartogram

Dirk's Lego World map by Dirk
Because...maps AND Lego!!!

Hand-stitched London Underground by Tasha Wade
Gifted to me. Unique. One-of-a-kind. Thank you :-)

Trump's Ties by Kenneth Field
It's my list so here's my effort...I still quite like it. Won the Society of Cartographers Wallis Award too :-)

10 Jan 15:03

President Roosevelt's Reading Habits While in Office

by /u/hpmetsfan

Fascinating! A collection of books that Teddy Roosevelt read, along with letters he sent to the authors!

10 Jan 14:32

Trump’s Lawsuits over three decades.

by /u/LazzzyButtons

USA Today did a surprisingly good job here! Usually their dataviz is among the worst, but this is clear, factual, and well designed. Good job!

15 Dec 14:00

Since Florida won't implement a restaurant grading system, I pulled the public records and made one myself. [OC]

by /u/cpare

For anyone who eats at restaurants in Florida.

07 Dec 19:53

12 ideas to become a competent data visualization thinker

by Jorge Camoes

Some very solid advice.

It began with a tweet:

In spite of being a notorious Excel Brute Forcer (thanks, Elijah!), I was invited for a presentation at JMP and was working on it (and answering 5 interesting questions for them). This tweet felt like a great starting point because, as I said to Lindsey, “becoming a data viz thinker” is not a common formulation. I ended up structuring my presentation around 12 ideas that could be relevant for this goal.

The presentation was yesterday, 26 October, and it was recorded, so I’ll add a link here as soon as it becomes available.  Meanwhile, let me summarize those 12 ideas, many of them can be found in my book, but not all. Please note that JMP users are mostly scientists, engineers and similar fauna.

  1. I couldn’t care less about data visualization. Starting with a bang but I really mean it: not everything needs to be visualized. Often there are other methods of data exploration and communication and they complement each other. That’s why in the Anscombe Quartet you need both the charts and the statistical metrics. If you have to make a chart, make it count. Don’t replace information overload with chart overload.
  2. Data matters. The expression “data visualization” was carefully designed to make you think that (counting the letters) you’ll spend more than 70% of your time designing cool “visualizations”, while in reality the opposite is true: you’ll spend most of your time minimizing errors, structuring the data, making sure the concepts are the right ones, and much more. Often, managers or clients fail to understand the resource-intensive nature of the task. They think it magically happens.
  3. Perception and society matter. Being aware of internal mechanisms (the eye-brain system) and external mechanisms (social rules, corporate culture, peer pressure, audience profile) should impact how we communicate visually.
  4. Data mapping and design. Creating new chart types is easy because we basically map data points to a 2D plane and after that everything is design. Thinking at that level of abstraction is interesting not only because your communication can become more flexible but also helps when moving between tools.
  5. Data is interpretation. From the moment you collect the data to the moment you read someone else’s chart interpretation is always present. Torture the data to come up with multiple interpretations and points of view. Even Minard’s Napoleon March, in spite of all variables, is an interpretation (that the Russians will probably disagree with). What makes a good chart is how good it is at saying what what it wants to say. Among other things, this means that it should be a good data pre-processing system that allows the brain to focus on higher level tasks. But data visualization is not enough: you have to have the contextual knowledge to detect and interpret patterns.
  6. Data visualization is a process. Not a linear one. Be aware of the questions you ask. They often reveal not only what you want to know but also what you actually know. Better questions mean better understanding. It’s interesting to have a classification of questions and see how they can be paired to chart types (better: chart designs). A pie chart with 50 slices is not necessarily bad: usually a visualization fails not because there are too many data points but because the author doesn’t understand the data or doesn’t care about the message.
  7. Rules of engagement. Attracting people’s attention with decoration is lazy. There are other effective methods that should be considered first (the data itself, chart titles, avoiding defaults, self-interest…)
  8. Aesthetics and emotions. Stephen Few and David McCandless. Nuff said.
  9. Emotional tone. Define a subdued emotional framework for multiple charts, never The Crying Boy style. Match tone and data (fun with the Titanic data set?). Be aware of the addiction to sugary data visualization.
  10. Complex simplicity. Simplicity is not minimalism or removing junk. Remove the irrelevant, minimize the accessory, adjust the necessary and add the useful.
  11. Using color. Avoid cliches like the plague and color to prettify. Think of it as stimuli that should be managed (intensity, function, symbolic meaning). The aesthetic dimension of color is an afterthought for non-designers. Use a professionally designed color palette and never the default one.
  12. Go beyond the single graph. Structured, matrix style visualizations: small multiples, trellis displays. Animation as stacked small multiples. For free-form visualizations (dashboards, infographics) find a coherent narrative or visual landscape. Use Ben Schnidermans’ Visual Information-Seeking Mantra. For the overview, use gateway charts (simple, perhaps playful charts like pies or gauges that can lead to more addictive and complex charts). Never use gateway charts by themselves. When exploring, often focus + context is often better than filtering.

So, this is a summary of my presentation in 26 October at SAS/JMP in London. I did have a great time there and people were very nice. I had no previous contact with JMP and the people behind it, except Xan Gregg, with whom I talk from time to time on Twitter.

Full disclosure: I was payed for this presentation. At no time I was asked to talk about the product and I have no financial motivation to do so. I will probably write about it in the future, just like I talk about Excel, Tableau or PowerBI. If there is any change I’ll disclose it as well.

The original post is titled 12 ideas to become a competent data visualization thinker , and it came from The Excel Charts Blog .

05 Dec 17:14



Sounds like an interesting short film!

Canadian indie filmmaker K.S. Kuperis has made a short film of my story "Axiomatic" (17 min, free to watch online).
05 Dec 17:12

bigblueboo: fooled ya brain


Oh this is a good one!


fooled ya brain

04 Dec 15:57

Random Access CharacterProject from GLKT generates surreal...


This is surreal and whimsical.

Random Access Character

Project from GLKT generates surreal walking characters made with random objects and can save your results in GIF format:

Random Access Character is a procedural character generator.

It lets you generate an infinite number of different characters, made from various objects and textures.  Morphology, colors, movements, patterns are mixed together to create a unique blend and generate a unique character every time.

You can save an animated GIF of your favorite find, that will be upoaded to imgur. You can then share your encounter to the world !

It is available for PC, Mac and Linux here

GLKT have a tumblr blog @glkitty here

30 Nov 14:08

Winners of the 2017 Information is Beautiful Awards

by /u/GreenFrog76