Shared posts

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
28 Nov 18:53

up / dn


This is clever.

up / dn

10 Nov 14:02

The Trump Effect - visualizing the impact of Trump's first year in office

by /u/LMGagne

Really nice policy-based data visualization. Not character - this focuses on policy. High quality material.

06 Nov 14:04

Visual comparison showing how Trump responds to terror attacks.

by /u/2big_2fail

Not surprising, but this isn't anything new. Before Trump this seems an accurate portrayal of how the network news stations responded.

06 Nov 14:02

[Do not drink and drive. Book a cab or call a friend]. Percentage of US car crash fatalities where driver blood alcohol level was .01 and above, 1999–2012

by /u/daldablade

Don't drink and drive please.

06 Nov 14:02

Database of every politician and their involvement in the Paradise Papers

by /u/fuckyousir69

Saving this for later.

06 Nov 13:48

visualizing change via slopegraph

by Cole Nussbaumer Knaflic

Slopegraphs are great.

Elizabeth Ricks recently joined the storytelling with data team after spending the past decade in various analytical roles in the healthcare, manufacturing, retail and payments processing industries. Most recently, she was Assistant Vice President of Analytics for Bank of America Merchant Services, where she strengthened her data storytelling skills by using the key lessons covered in the storytelling with data workshop. Elizabeth has a passion for helping her audience understand the "so-what?" when communicating with data. Join me in welcoming Elizabeth and her first blog post here! You can connect with her on LinkedIn or Twitter.  

Communicating the “so what?” is fundamental to telling a story with data and I can’t overemphasize the importance of choosing an intuitive visual. Often our story is lost, simply because because we’ve chosen a graph that forces the audience to do more work than necessary. Today’s post illustrates this transformation with a real-world (de-identified!) example.

Imagine you’re a marketing analyst tasked with evaluating your product’s market share and communicating the growth opportunity to your senior marketing leadership team. You’ve gathered the data on the 14 states in which you operate and visualized your market share over the past decade in this bar chart:


This graph is functionally adequate. It’s thoughtfully designed using pre-attentive attributes. The color blue cues us where to look first (that’s our market share now!), which allows our second series (our market share then) to fade to the back.  

Additionally, horizontal bar charts have many visual advantages as outlined in storytelling with data:

  • Familiar and easy to read

  • Useful for long category names

  • Align well to how we typically process information: starting from top left and zig-zagging across the page so that we process the category names before interpreting the data

We see this final point demonstrated here, as a quick vertical scan makes it relatively easy to see that our product’s market share is down in every state, except Michigan and Oregon.

That’s fantastic if that’s the end of the story. However our task is twofold: we also need to communicate how our market share has changed over time and our recommendation for the opportunity. With the current design, how easily can you see which state(s) had the greatest decline in market share? Between Michigan and Oregon, which had the greatest improvement?  


As the designer of this information, we are asking our time-crunched marketing executives to do a lot of work to scan the graph and make 14 different comparisons. Never make the audience do more work than necessary to understand a graph! Perhaps a different visual would make the task easier.

Enter the slopegraph.  

The slopegraph is a visually intuitive way to see what’s changing in your data. For a deeper analysis of the beauty of slopegraphs, check out this post.

Let’s instead connect the data points with a line. Notice where your eyes go first now.    


A few interesting things emerge. We can immediately see that some states have higher rates of change than others, both positive and negative. That’s the "so-what" what we want our audience to understand!

We can further improve by using color to focus our audience’s attention on specific takeaways. For example, we might use blue to highlight the positive story: we’ve improved in 2 states!


Or we could focus attention on Texas, the state with the greatest market share decline.  


Finally, we’d add a call to action emphasizing how the audience should use this information. Remember, we always want our audience to do something!


In conclusion, if your “so-what?” is what’s changed over time, then the slopegraph can be an extremely effective visual. If interested, you can download the Excel file with the above graphs.  

From a formatting standpoint, slopegraphs can take some time to set up. However, that’s time well invested if it means your audience clearly understands the story. Here’s a handy Excel template to get you started.   

06 Nov 13:48

how you would visualize hurricanes

by Cole Nussbaumer Knaflic

An amazing array of Hurricane data visualization!


A few weeks ago, I posted a visual from The Economist on hurricanes and invited readers to makeover the graph and let me know what headline they would put on it. I was excited by the variety (and number!) of responses from all over the world. Thanks for your patience awaiting this follow-up post: it took a bit of time to pull 60 makeovers together in a sensible way!

First, let me summarize some of what I saw. People used a variety of tools (mainly Excel and Tableau, but also R/ggplot2, D3, Python, STATA, PowerBI, and others). Folks also visualized the data in various ways (lines, bars, stacked bars, area, bubbles, dot plots, maps, and more). Many people used multiple graphs. Some pulled in other data points (e.g. barometric pressure, wind, number of deaths, cost of damage). Many people chose to highlight the lack of pattern/trend in the data or otherwise changed the headline and takeaway(s) called out.

Here is the original graph from The Economist:


Common points raised about the above included:

  • Belief that the original headline ("Hurricanes in America have become less frequent") was misleading.
  • Raising doubt as to whether the way hurricanes are measured/categorized has been consistent enough through history to start with such an early point in time.
  • Unease at the inconsistent time intervals on x-axis.
  • Uncertainty regarding years with no hurricanes (whether missing data or really no hurricanes, whether/how this is accounted for in original graph).
  • Questioning of the value/validity of the trend lines, given that the apparent (and calculated) lack of correlation. Uncertainty expressed at why recent data points weren't included.

It's clear you had fun with this. There were a number of comments simply expressing excitement about the challenge and it seemed folks found it to be a stimulating exercise. I'm happy you thought so and would love to do more of these. Stay tuned on that front. I should mention also that I did not personally participate in this challenge—it would have been unfair after seeing all of your amazing remakes and I decided my time would be better spent compiling and sharing back all of the great work you've done.

A couple notes to those who submitted makeovers: first off, THANK YOU for taking the time and sharing your work. In my copying/pasting/condensing, if I've misrepresented anything or failed to include a social media profile you'd like to have linked, please send a note with specifics to and I'll take care of it. The makeovers are posted below in alphabetical order by first name + last initial (I omitted full last names in respect of those who would rather remain anonymous). If you thought you submitted a makeover but don't see it here, please send a note with your makeover to the address above and I'll add it (I think I got them all, but you never know). Also, I'll apologize up front for any fuzzy visuals—that's my doing (not yours)—getting everything into a common form for posting here was more challenging than one might imagine! 


Adolfo H.

Adolfo visualized cumulative hurricanes in an annotated line graph:


Alex I.

Alex (LinkedIn) from Warsaw, Poland, recapped the following changes in Excel: "aggregated into 2 groups (major, non-major), tried to communicate 2 things with title: 1) about trend in overall number and majors; 2) long time gap since last major, pushed back/out non-data (gridlines, non-major series, subtitles), eye-catchy color for majors, labels for majors—to see that trend is stable for them, extra callout for recent majors back in 2005, downward sloping trendline for total number (although, here it's kinda cheaty, since last decade is only 6 years, but I decided not to reveal this cheat), and made order with Y axis (more clear I guess)."


Alessandro N.

Alessandro said he'd group categories together, as illustrated below, and accompany this graph with the following 50-year stats:

1900-1950: -3.1% total number of hurricanes, +60% hurricanes force >=4, -6.5% hurricane force <=3

1950 - 2000: - 24.2% total number of hurricanes, -12.5% hurricanes force >=4, -24.4% hurricanes force <=3


Andrew E.

Andrew chose a view that focused on major hurricanes with a line graph:


Andrew M.

Andrew illustrated the hurricane data through three views, plotting both actual (bars) and moving average (lines) for number of storms, number of strong storms, and wind speed.

Hurricane_Andrew1.png Hurricane_Andrew2.png Hurricane_Andrew3.png

Andy C.

Andy (Twitter | LinkedIn) likened hurricane predictions to flipping coins in his colorful view of the data:


Ariane M. & Marina C. & Luciana B.

Ariane, Marina, and Luciana decided to keep the headline but group the years in a different way. They said: "We are using 5 because we don't have complete information for our current decade (2011 - 2020). So we're afraid of comparing apples and oranges. Another option of our group was not to mention the growing trend for category 3 hurricanes. We believe it would change the headlines completely!"


Ben B.

Ben (Twitter) used Tableau to visualize the hurricane data. Here is the Tableau Public version.


Billy W.

Billy (Reddit) was the very first to submit a makeover for this challenge. He writes, "There’s no significant trend on that chart (definitely not a downward one!), and the author does his/her readers a disservice by implying otherwise."


Bridge M.

Bridge (Twitter) created two views of the data, along with the following explanation.

Version A: In sticking with the original headline (and not reading the article),  I came up with this (assuming I'd drop in the Source, and Major* qualifier would be included further below). 


Version B: In perhaps sensationalizing the headline, I took a slightly different approach, partially to better handle the white space, but also because it's what I'd actually imagine reading.


Budana P.

Budana's suggested headline is: "Major hurricanes in America have become more frequent." With the following graph and comments:

  • This is a time series data. So a line chart is the go to.
  • I did not see value added in the message conveyed by segregation of hurricanes categories into 5, instead I grouped them into 2.
  • I omitted the current 10 years data point since we are currently short by 3 years. Presenting this point (2011-2016) would be prone to bias interpretation of the trends.
  • I added an emphasis of upward trends since 1971 to the most recent data point, highlighting the upward trending of both minor and major hurricanes enclosed in a gray rectangle.

Cindy C. & Amanda D.

Cindy and Amanda worked together on a bar/line combo:


Colin W.

Colin (Twitter) created an interactive visual on Tableau Public (where you can hover over specific data points and see details). Below is a screenshot. He also posted about his work—and how he applied the storytelling with data process—on his blog.


Craig D.

Craig (Twitter) from Syndey posed the question, "Are severe hurricanes occurring more often?" He wrote about his process on his blog. Also check it out in interactive form on Tableau Public.


Dangfun P.

Dangfun plots total and percent Category 3 and above with lines and bars and the headline, "Fewer but Stronger."


Daniel H.

Daniel (blog) from Germany created the following in R, noting, "I decided early on that I wanted to do a visual that includes all data from the source (instead of showing only aggregated versions) to give a visual representation of all the noise and randomness we're seeing there. Also I trashed a few variations with additional data (like death count and damage for the hurricanes) feeling that it made the graph way too complicated to read. It should be possible to get a comparable result in Excel by adding transparency to the plot points (it makes scatterplots sooo much nicer and adds density information)." He also blogged about his approach.


Divya R.

Divya questions the original headline, writing: "Ignore the horrible overlapping interval labels (every 5 years), but you see how the slope for all categories is only slightly decreasing and in all cases the Standard Error band (colored haze) allows for the possibility of the trend line to go in the exact opposite direction? So one cannot strongly assert that hurricanes are decreasing across categories. I'm using same scale to show that even relative frequency (higher for low category earthquakes) doesn't dampen the possibility but actually has larger SE bands."

"I've seen a number of your posts point out the above effect where artificial precision induces a false accuracy. I'm approaching the same from a core stats perspective. [This] doesn't make for a very good graph, let alone for a headline, but in favor of effective data communication over pure viz, it's a point pertinent to convey."


Eduardo M.

Eduardo highlights a declining trend via 30-year buckets:


Gavin M.

Gavin also highlights a decreasing overall trend, but also comments on a slight increase in the most damaging storms:


Glenn K.

Glenn shows two views of the data, along with his comments: "Show the raw data as 10 year rolling averages. While this introduces a lag, it creates a trend that isn't dependent on grouping the data into decades, which is independent of the frequency. Only show total hurricanes and major hurricanes. Show the ratio of major to total, to see if hurricane intensity is increasing (it isn't, but total frequency is increasing)."

Hurricane_Glenn1.png Hurricane_Glenn2.png

Gregg F.

Gregg (Twitter) from the UK shows two views of the data, commenting, "I had a think about this graph and the biggest problem for me was the dataset used. While hurricanes making landfall in the US affect more people, this view misses the bigger trend of the total number of Atlantic hurricanes. If the trend of total Atlantic hurricanes is increasing then the trend of hurricanes hitting the US will increase as well."

"Second, I would include an additional graph to show that the storms making landfall in the US is random and that it follows a typical statistical distribution."

"I think that these charts show the key takeaway from the data: The number of storms and intensity of storms varies each year but is generally on the rise. It naturally follows the more storms instead of less will hit the US in the coming years."

Hurricane_Gregg1.png Hurricane_Gregg2.png

Heather A. 

Heather (Twitter) focuses attention on major hurricanes:


Ivett K.

Ivett (Twitter) from Budapest says, "I enjoyed redesigning that stacked bar chart because there was another reason why I read again Cleveland's Graphical Perception study and your book. By the way I also learned a lot about the hurricanes." She also blogged about her process and visual perception in dataviz


Jason C.

Jason plotted total and major hurricanes, drawing attention to and projecting a full decade for the final point of data:


Jon L.

Jon built a tool to explore the data in D3 and posted this plus his thoughts and some animated GIFs of the tool in action on GitHub.


Kat G.

Kat (Twitter) pulled together a couple graphs and annotations into a single view:


Kettki D.

Kettki in India writes, "The major concern of mine in ET_NOAA version was the absence of data, 'years when the hurricane did not made it to the landfall' and it’s an important part missing from the data. I thought seeing the pattern here is more important than the numbers, especially when we are analysing centuries of data together. And that the exploratory analysis would be the better approach to this. I agree that it is a challenging to showcase more than 150 years of information on small real-estate, and it made me thinking all over again. To begin with I was not in the favour of stack bar charts (as I did not think, adding # of storms would depict the right information) but now after working on this, it made me wonder."


Kevin K.

Kevin (Twitter | blog) created the following and posted on Tableau Public.


Kevin R.

Kevin R. created a line graph focusing on the decrease in total hurricanes over time.


Leonard M.

Leonard shared the following: "Since the goal of the chart was to show that major hurricane landfalls are trending upwards, I got rid of the background column chart showing hurricane counts per year. I found the column chart distracting: the counts fluctuate so wildly from decade to decade that it leads the viewer to question the accuracy of the trend. I also made the line continuous, rather than bucketed by decade."

"In my title, I would have coloured the words "major hurricane" to match the red line, perhaps negating the need for a legend altogether. The tool I used to do this (Power BI) doesn't have that option though."

"I do wonder how meaningful regression analysis is on such a dataset, given that measuring wind-speed in 1901 was surely less accurate than it was in 2001. Clearly, The Economist feels comfortable with it though."


Man H.

Man listed what was less than ideal in the original...

  1. Color bars of the hurricane categories look cluttered. At the first glance, it’s hard to tell what do these different colors tell.
  2. The blue/green bars are for the category 1-2 strong winds. Logically, people would think the green dashed line is for the category 1-2 winds too (just like the red dashed line for red Major Hurricane). However, this green line is for “All Hurricanes”. This is confusing.
  3. Headline says “all hurricanes become less frequent”. This misses the important fact that chart also tells: Major hurricanes increased.

...followed by what was done to simplify, make more readable, and deliver a clearer message:

  1. Drop the color bars for categories. Instead, I collapsed the categories into “strong winds” and “major hurricanes.” 
  2. Keep only one trend line for the Total Hurricane. Make the headline right inside the chart to make it more prominent.
  3. Drop the major hurricane trend line since I don’t think such trend is significant based on the data.

Marco H.

Marco did a ton of analysis in STATA, outlining a number of observations and illustrating in tabular and graphical form (I've included just a subset here), which he summarizes in the following: 

"For me the summary is, when we consider yearly data we find no evidence for statistically significant linear trends over time for major or all hurricanes over time. Moreover, different choices of periods of time or different starting points can produce different results: looking at the last ten decades shows us an almost significant downtick in major hurricanes." 

Marco also writes: 

  • The Economist shouldn’t have used that last half decade in the graphic. It’s not representing the same ten year brackets, so just misleads the eye. What does it add? We don’t have data for the rest of the decade yet.
  • They shouldn’t have said NOAA produced this data if The Economist is the analyst and NOAA is just the source.
  • The choice of linear regression line of best fit is pretty hard to justify in data that takes small positive integers as outcomes. Best to look at Poisson, negative binomial or even better, time series regressions like ARIMA that allow you to model subtle lags in the data (e.g. the last three years affect this year).
  • One could go on…

Mark E.

Mark (Twitter) writes, "I’m not sure the outcome is sensational enough to justify a headline, but if I were to offer one it would be something neutral, such as 'Around one in three hurricanes exceed 178mph.' " Mark also blogged about his process.


Matthew P.

Matthew chose a horizontal bar chart, emphasizing the most recent decade:


Meike G.

Meike points out, "Great example of how data can be used to push an agenda! That's why I chose 2 versions for my makeover—one keeping the original headline (replacing "America" with "US" though), and one to tell a different story."

"Some design decisions I took: changing the x-axis labels to make them easier to understand, removing the category 1-5 distinction and just showing one development per graph (Total vs. % Major Hurricanes/Total), removing y-axis labels and labelling first and last value instead, removing trend lines, removing gridlines. Apart from that, I chose to remove the 2010's in the second graph—because as recent events have sadly shown, the hurricanes have not stopped in 2016. I left it in in the first graph, though, because that's what was done in the original version and it reinforces that message."

Hurricane_Meike1.png Hurricane_Meinke2.png

Michelle M.

Michelle's headline would be, "September: The Most Violent Month For Hurricanes." She says, "I experimented with a few things, and the biggest pattern that I noticed was that most hurricanes occur in September. Not too surprising, but I had fun making the data interesting to play with anyway!" Here is the Tableau Public version.


Miguel C.

Miguel from Portugal created two views of the data in Excel:

Hurricane_Miguel1.png Hurricane_Miguel2.png

Mike C.

Mike (Twitter) writes, "The top half is the true re-viz of what The Economist was trying to say; the bottom half is a more in-depth interactive for viewers to engage with." Here is the Tableau Public version.


Min M.

Min (Twitter) chose a side-by-side layout and highlights the proportion of major hurricanes increasing:


Neil R.

Neil (Twitter) chose a "dumbbell" view, blogging about how to frame the title in dataviz and his process. You can also view this makeover on Tableau Public.


Nicolas D.

Nicolas chose a line graph to depict the data:


Olesia H.

Olesia used Python's matplotlib library, editing with Inkscape afterward. She says, "Unlike journalists from The Economist, I've decided to highlight the lack of pattern in hurricane data. Don't want to sound like climate change denialist but the trends shown in the Economist's graph may very well be just statistical flukes and the NOAA overview cited in the article explicitly says that 'It is premature to conclude that human activities – and particularly greenhouse gas emissions that cause global warming – have already had a detectable impact on Atlantic hurricane or global tropical cyclone activity.' "


Olivier C.

Olivier (LinkedIn) from Switzerland shared the following comments on the original graph:

  1. Misleading choice of data. While the world is speaking about hurricanes in the context of climate change, the Economist graph refers to hurricanes LANDING on US coast. And actually the online source implies a certain radius from a given point, limited to 200km so probably some counting in missing! On top of that, the data includes 2016 only. Considering that 2017 is already a record year (which would highly impact statistical averages and trends), not featuring 2017 is also misleading. Note also that while Hurricane Sandy (in 2012) was not recorded as major (downgraded to CAT2 just before landing) and did cause enormous damages... So data should have been based on total of hurricanes in the Atlantic rather than only ones hitting US coasts. And based on those data, the conclusion would have been much more relevant. The decrease in frequency since 2005 could actually be just a shift of route (hurricane not hitting US or hitting other lands before and thus declining).
  2. Misleading use of statistical tool which lead to wrong conclusion! The fitting curves are meaningless in this data. One year could very well unbalance the entire trend. As a matter of fact, adding 2017 is changing everything, and fitting curve trend inverse itself in 1950...! This is because the data shows a very consistent frequency rather than changing trend.
  3. Bad dataviz: cumulated bars + cumulated periods. Absolutely meaningless!
  4. Bad dataviz: the data was not including years with no hit. That shall be corrected before plotting a time-based axis.

Here is the online version of the makeover on Plotly.


Paul W.

Paul (LinkedIn) enjoyed trying to be a little artistic with it while still showcasing the analysis from the original version and adding a non-time based trend to it. You can view his makeover on Tableau Public.


Raf M.

Raf (Facebook) from Belgium shared the following view:


Rahul S.

Rahul (Twitter) said his story would have revolved around the following four views:

Hurricane_Rahul12.png Hurricane_Rahul34.png

Rebeca P.

Rebeca (LinkedIn) "basically merged the hurricanes into two categories (minor and major) and looked at both frequency and intensity by decade."


Rob B.

Rob (Twitter) writes, "The Economist writer is clearly trying to articulate that the incidence of severe hurricanes has increased over time. Possibly an agenda linked to climate change, arguing that climate change is making hurricane season worse for America. They've loosely managed to portray this—as the trend lines show a falling absolute number of hurricanes, and a rising absolute number of severe hurricanes. But why not just plot the relative frequency of severe hurricanes during each time period?" Here is his Tableau Public Dashboard.


Robert C.

Robert (Twitter | LinkedIn) wrote a 3-part series on his process (post 1, post 2, post 3), culminating in the following view. His interactive viz can be found here and he'd accompany with a headline like "Should we be concerned?"


Robert vO.

Robert (LinkedIn) felt the original headline was "plain misleading!" He goes on to say:

"Overall, there is no significant linear correlation between year and number of hurricanes (r=-0.12), although this you wouldn't expect a large correlation, this could mean something. However, the the correlation between year and category 3 plus hurricanes is just plain zero. So bascially, the data is going all over the place without a clear trent for heavy hurricanes. So you shouldn't show a trendline and if you do make sure it is flat."

"Although a bit boring, this is the most relevant conclusion which should be reflected in both the headline and graph. The headline could be something like 'Every era will suffer hurricane hits' or 'Hurricanes are as bad as they were 100 years ago'. Well, I'm obviously not a copywriter but you catch my drift."

"The graph itself is not that bad, I have definitely seen worse. The color coding makes sense, as does the packing of years. The legenda could be a bit more clear and the trend lines just have to go because there aren't any."

"I would do a couple of things differently to support the main idea that there is no trend in total number of hurricanes or 3 plus category hurricanes:

  1. Combining years in packages in 5 instead of 10 as it dilutes the variability in the data; some packaging makes sense to keep a sense of the bigger picture.
  2. Number 5 category should be up high the graph, number 1 should be down
  3. 2016 has to go, as it is just a single year, it would suggest a period of not much going on.

You could also just show the total number of hurricanes and the major one (second graph).

Hurricane_Robert1.png Hurricane_Robert2.png

Rody Z.

Rody wanted to focus on major vs minor hurricanes that make U.S. landfall, while giving scope of the total. Here is the Tableau Public version.


Ron P.

Ron notes, "I could see what they were trying to do. They were hoping to find a trend by filtering 166 years worth of data into decade-wide bins on a stacked bar graph. I liked the attempt, but wondered if there was a better way to filter the data. So, rather than binning it into ten-year buckets, I applied a 20-year moving average filter to all the data and plotted the results on separate line graphs." He shares the following two visuals:

Hurricane_Ron1.png Hurricane_Ron2.png

Ryan T.

Ryan left the historical data there for context, but focused attention on the more recent decades:


Sam B.

Sam writes, "I have tried to simplify it, while keeping the major features."


Sharon R.

Sharon's proposed title would be: "No significant change observed in hurricane frequency since 1851. Cost and damage of storms has increased markedly and since the early 1990s." She goes on to write the following.

"Here are the main things that concerned me with The Economist’s viz:

  1. It was hard to read and see any (real/significant) trends emerge because there was too much detail that could have been presented better. Instead of showing all 5 hurricane categories in a stack bar chart, the authors could have clustered the storms into “Major” - all hurricanes with a 3 or above measure on the Saffir-Simpson scale - and “Minor” (scoring <3). This makes it easier on the reader’s eyes with minimal loss of data integrity.
  2. The year grouping both looks sloppy (font size, year format) and skews the trend line. Removing any grouping (simply plotting all the years on the x-axis) reveals a very minimal decline in frequency for minor and negligible increase in major hurricanes over the entire period. It is questionable whether these changes are statistically significant based on the R2 values.
  3. There is a significant piece of data missing in the article and in the STORYTELLING: individual hurricane damage and how that trends over time. Specifically, some of the most damaging and costliest hurricanes measured 3 (Katrina, $105B estimated damage) or below (Harvey, category 2, est. damages at $180B). Therefore increases and other trends based on a hurricane's category assignment do not tell the full story, IMO. An article in Slate covers the topic of finding better metrics for measuring hurricanes."

"In my analysis I looked also at the damage data (in terms of cost) for the top 30 costliest tropical cyclones in the US (taken from NOAA, While damages are ascribed to only 30 of the 289 hurricanes in the data set (and this is less than ideal I realize), even with the limited data available it is clear the damages have increased dramatically over the last 60 years, across storm categories."

Hurricane_Sharon1.png Hurricane_Sharon2.png Hurricane_Sharon3.png

Srikanth P.

Srikanth shares the following views:


Teresa B.

Teresa (LinkedIn) says her headline would be “Hurricanes this half century on track with previous.” 


Thomas O.

Thomas (Profile | Twitter) from Austria used R (especially dplyr and ggplot2) to build the following hurricane timeline:


Tim F.

Tim (blog) shared the following:


Todd L.

Todd writes, "So this took me waay longer than it should have. I was trying to create a calculated field in the pivot table to show just Major Hurricanes so I would have two values columns (Total and Major) but I couldn't figure it out. I ended up just hardcoding the data, which is disappointing."

"I may have forgotten some of the ideas in your book/website so this is a good refresher.  [Here] is my best attempt. I wanted to extend the trend line more to the left but I can't seem to do it....but I at least think I'm in the right ballpark! PS. Grouping by 15 year increments seems to work better than 10 year increments b/c using the latter a) creates more bars and more clutter and b) creates a partial category for the last plot (2011-2016.)"

"FYI I realized after I sent it that the blue text could be worded better. Maybe something like 'Trend in total hurricanes doesn't align with climate change trends' is better. I just thought it needed a more impactful takeaway."


Ziwei Z.

Last, but not least, Ziwei shares the following stacked area graph, concluding "no strong trends"—


Huge thanks again to everyone who participated for taking the time and sharing your work!

06 Nov 13:46

Are Anti-Trump Republicans Really Anti-Trump?

by A FiveThirtyEight Chat

Look at the list for Dems... quite interesting.

Welcome to FiveThirtyEight’s weekly politics chat. The transcript below has been lightly edited.

micah (Micah Cohen, politics editor): Today’s topic: If you’re a Republican elected official, what qualifies you as anti-Trump?

Why are we talking about this? Well, there are plenty of GOP senators — Susan Collins, Lisa Murkowski, John McCain, Jeff Flake, Bob Corker, etc. — who have been critical of the president but haven’t necessarily done much about it legislatively. So many people on the left call the whole narrative that they’re standing up to Trump BS.

So, to start us off: How much do you think these elected Republicans are doing to restrain Trump?

natesilver (Nate Silver, editor in chief): Well, they weren’t doing very much at first. Then more signs of resistance emerged over the summer.

In some ways, we’re still waiting for the pivotal tests, though.

What if Trump fires special counsel Bob Mueller, who’s investigating his campaign and potential Russian collusion? What if he pardons Jared Kushner? What if he tries to appoint to his Cabinet someone who’s an obvious hack?

perry (Perry Bacon Jr., senior writer): The Russia sanctions bill was significant in that Congress passed it despite administration objections. The hearing with fired FBI Director James Comey was too. So was prominent GOP senators basically all-but-ordering the president not to fire Attorney General Jeff Sessions. Republicans, particularly in the Senate, are doing more to resist Trump than the liberal conventional wisdom seems to hold.

harry (Harry Enten, senior political writer): Yeah, you are seeing some more outward signs of resistance. You have both Flake and Corker not running for re-election in order, it seems, to be able to critique Trump to their fullest ability. And just this week, McCain put out this tweet:

Now, do those count? Otherwise, I think the Russia bill was the first step, so I concur with Mr. Bacon.

natesilver: Wait — so Flake and Corker not running for re-election is a sign of resistance?

Not sure I buy that, Enten.

harry: I see it that way. Here’s why: Yes, they didn’t run, probably in part because they thought they might lose. That’s especially the case for Flake. But they could have decided to change course. They could have sucked up to Trump. Instead, they chose not to run and to criticize the president.

perry: If you think Trump will go down as the worst president in modern U.S. history and that he breaks lots of important norms along the way, then they are still not doing nearly enough. If you grade them based on their deep desire to 1. get re-elected, 2. please the Fox News base, and 3. get tax cuts and conservative judges, then the level of resistance in the GOP that we’re seeing seems more significant, with Collins/Corker/Flake/McCain at the more resisting end of the spectrum.

harry: I wonder if any of them think Trump is the worst president.

natesilver: Well, Flake was probably going to lose anyway. But Corker is popular enough that he could have stayed in the Senate as a sort of Susan Collins type.

harry: Corker’s numbers slid. I’m not sure he would have won necessarily if he really wanted to critique Trump.

micah: Yeah, isn’t the idea that he would have become far more unpopular by speaking out against Trump?

perry: I think many of these Republican senators believe Trump is uniquely terrible. That is what Flake and Corker are getting at: Let’s use our inside voices outside. If he is terrible, let’s tell people.

natesilver: Corker might have lost. But now you’re almost guaranteed to have someone more Trump-friendly in that Senate seat.

micah: So much of this comes down to how big of a threat you think the president is, right? If you’re on the left and you see Trump as a clear and present danger, then of course you’d be underwhelmed by the anti-Trumpiness of the GOP.

perry: Right.

micah: But let me introduce another element here …


Nate, can you give the people a snappy description of what this is?

natesilver: It’s how often a member of Congress votes the way that Trump wants.

That’s it. It’s pretty simple. It’s a measure of roll-call votes.

micah: So people have been throwing around Flake’s and McCain’s and Corker’s Trump scores — which are all very high — as evidence that their criticism of Trump is hollow.

That seems silly to me, but what do you all think?

natesilver: It’s certainly possible that you could agree with Trump on his legislative priorities but also think he’s a danger to the Republic. In that case, you might have a high Trump score, since most of what’s reflected in it is legislation.

harry: Can I just note that there’s nothing new about measures like the Trump score? People have been tracking stuff like this for years. What’s different here is that we’re doing it in real time. It’s more about the interpretation that some people are taking.

natesilver: Yeah. We’re doing it in real time. And our scores are more transparent — it’s more obvious what they mean.

perry: Micah and I have had this debate a lot internally. So we can have it publicly now.

I appreciate the work of my colleagues in creating this tool. And it explains some things really well. But I see these liberals saying, “Well, Trump is with Flake 90 percent of the time.” Flake wrote a book trashing Trump. Trump wanted Flake out of the Senate. Something is not being captured there.

And the other challenge is that Trump is often very disengaged from the legislative process. So the things that get voted on are really the Paul Ryan-Mitch McConnell priorities, or put differently, the Koch brothers agenda. I know why we are calling it a Trump score, but I at times worry that that communicates to the audience that Trump has defined priorities on a lot of legislation, some of which I doubt he knows exist.

natesilver: I don’t know. It’s a tool. Like any tool, it can be misused.

micah: Perry has outlined the fairest criticism.

But like … don’t the Trump scores simply show that Trump hasn’t pushed an agenda distinct from normal GOP orthodoxy?

perry: Right.

I think people are misusing/misunderstanding the tool.

micah: We could rename it the “GOP Congress-Trump Legislative Agreement Score.”

natesilver: I mean, the scores show that the Republican agenda and the Trump agenda have become pretty well aligned.

The lowest Trump score among Republicans (Collins at 81 percent) is much higher than the highest Trump score among Democrats (Joe Manchin at 54 percent).

harry: Also, the Republican senators with the lowest Trump scores aren’t surprising; they tend to be the senators widely recognized as the most anti-Trump: Collins, Rand Paul, McCain, Corker, etc.

GOP senators by Trump score
1 Roy Blunt Missouri 96.2%
2 John Boozman Arkansas 96.2
3 Bill Cassidy Louisiana 96.2
4 Thad Cochran Mississippi 96.2
5 John Cornyn Texas 96.2
6 Orrin Hatch Utah 96.2
7 John Hoeven North Dakota 96.2
8 Pat Roberts Kansas 96.2
9 Mike Rounds South Dakota 96.2
10 John Thune South Dakota 96.2
11 Thom Tillis North Carolina 96.2
12 Roger Wicker Mississippi 96.2
13 Richard Burr North Carolina 96.1
14 Mitch McConnell Kentucky 96.1
15 Marco Rubio Florida 96.1
16 Dan Sullivan Alaska 95.9
17 Johnny Isakson Georgia 94.4
18 John Barrasso Wyoming 94.2
19 Ted Cruz Texas 94.2
20 Cory Gardner Colorado 94.2
21 James Inhofe Oklahoma 94.2
22 Tim Scott South Carolina 94.2
23 Richard Shelby Alabama 94.2
24 Shelley Moore Capito West Virginia 94.1
25 Jerry Moran Kansas 94.1
26 David Perdue Georgia 94.1
27 Lamar Alexander Tennessee 94.0
28 Tom Cotton Arkansas 92.3
29 Mike Crapo Idaho 92.3
30 Steve Daines Montana 92.3
31 Mike Enzi Wyoming 92.3
32 Joni Ernst Iowa 92.3
33 Deb Fischer Nebraska 92.3
34 Chuck Grassley Iowa 92.3
35 Ron Johnson Wisconsin 92.3
36 John Kennedy Louisiana 92.3
37 James Lankford Oklahoma 92.3
38 Rob Portman Ohio 92.3
39 Todd Young Indiana 92.3
40 Dean Heller Nevada 90.4
41 Mike Lee Utah 90.4
42 James Risch Idaho 90.4
43 Ben Sasse Nebraska 90.2
44 Pat Toomey Pennsylvania 90.2
45 Jeff Flake Arizona 90.0
46 Luther Strange Alabama 90.0
47 Lindsey Graham South Carolina 88.5
48 Bob Corker Tennessee 86.3
49 Lisa Murkowski Alaska 86.3
50 John McCain Arizona 84.0
51 Rand Paul Kentucky 84.0
52 Susan Collins Maine 80.8

natesilver: Yeah, it does a pretty decent job.

perry: Yeah, that actually is perfect in capturing the anti-Trump wing in the Senate. Although, it is strange that Luther Strange is there.
But broader point: I don’t expect someone like Flake, who is quite conservative, to vote against tax cuts because Trump supports them.

natesilver: Right, but it’s reasonable to point out that someone like Collins — despite occasionally disagreeing with Trump, including on important issues — is still quite an asset to him, compared with a Democrat from Maine.

micah: Well, this gets us back to how you judge Republican resistiness — there are people who think Trump is such a threat to the nation that Republicans should be blocking appointments/legislation even if they support them on substance. There are people who think they should switch parties! If you subscribe to that theory, then the Trump score does count as evidence that the McCains and Flakes of the world haven’t done much.

As Nate just said, Collins is still an asset overall.

natesilver: There haven’t been many appointments lately — and Trump has mostly sidestepped making controversial ones.

harry: I mean, these are still Republicans.

perry: This is an interesting question. Tom Price had a bunch of controversial behavior well before he was confirmed as health and human services secretary and well before he resigned after the plane stuff. Should Flake/Corker/McCain have not voted for him? (They did.) Would they do that today?

natesilver: That’s why I’m saying the big tests are still ahead.

harry: What are the big tests? Do we know them yet?

natesilver: Ultimately, some of the resistance will have to come in the form of roll-call votes — like rebuffing his Cabinet nominees or (gulp) even voting to impeach him.

perry: Right, but taxes is the wrong issue on which to judge GOP resistance. Nominations and appointments are right. So are U.S. attorneys, foreign policy appointments, people who could be involved in Russia stuff: Like if Secretary of State Rex Tillerson were to leave and Trump wanted to appoint an even more pro-Russia person. Or if his U.S. attorney appointment in New York seems to be someone with obvious ties to Trump who won’t prosecute crimes by Trump allies.

natesilver: Congress could pass legislation that would make it more difficult to fire Mueller. The fact that they haven’t yet is a good point for the critics.

micah: Or Congress could pass laws aimed at curbing Trump’s potential corruption/conflict of interest stuff.

perry: Yes.

harry: Of course, a number of GOP senators have also said that Trump shouldn’t fire Mueller.

perry: Like this is a serious idea: Republicans should join with Democrats to block any U.S. attorney nominee who Trump has personally met with.

And, yeah, the fact that the pro-Mueller bills have not moved is telling.

natesilver: People are also within their rights to be skeptical of Republicans standing up to Trump based on how the 2016 primaries went down. Trump, famously, received very few endorsements from Republican elected officials. But as we learned, there’s a big difference between failing to endorse and actually resisting someone.

harry: By the way, Flake has not signed onto a bill that would make it harder for Trump to fire Mueller.

micah: I think what we’re seeing is a number of Republican senators who are anti-Trump on non-policy issues (protecting Mueller/rule of law/etc.) and pro-Trump on policy (which is basically just pro-GOP). … BUT they’re active on the policy things and passive on the non-policy things.

That’s the key: active vs. passive.

natesilver: Right. There’s been an impressive amount of passive resistance to Trump and not (yet) very much active resistance.

perry: I guess it’s somewhat hard to be active on non-policy things, since Congress doesn’t really vote on those, right?

micah: Couldn’t they, though?

perry: Is active resistance politically possible in the Republican Party of today?

Politicians perhaps should do things that are political risks. But they almost never do.

micah: That’s a hard question to answer, Perry. My first instinct is “no.”

But maybe that’s simply a case of expectations.

What would happen if every Republican senator up for re-election in 2018 simultaneously came out and broke with Trump in a sustained way?

perry: Well, on Russia sanctions it happened.

He whined, signed the bill and the party people won the fight.

If every senator up for re-election did that, they would all increase their chances of losing to a Steve-Bannon-backed candidate. There is no safety in numbers when the number is fairly small — only six Senate Republicans are up in 2018 (not counting Flake, Corker or the Alabama special election). If every House Republican did that, that would be different. It would be something like 240 people.

harry: I think we’re seeing a major resistance to resisting Trump in that fashion. Look what’s happening in the Alabama Senate race. Roy Moore has said a lot of stuff outside the mainstream, and he was welcomed into Washington with open arms before he’s even won the seat. The fear of losing is really, really powerful. Distancing themselves from that part of the Republican base is not tenable because it would mean, in their mind, losing the election.

perry: A good test will be if Mitt Romney ever says a negative thing about Trump again, since he is rumored to be considering a Senate run in Utah if Orrin Hatch retires.

micah: Clare is on vacation, but in her honor I feel compelled to say …


Anyway, give me a little more detail on what we would see the key tests being for Republicans in Congress.

natesilver: I continue to think the three nuclear-level events are:

  1. Trump firing Mueller.
  2. Trump pardoning people in his inner circle.
  3. Mueller returning with an obstruction of justice finding or something equally severe against Trump.

micah: Let’s talk short of nuclear-level, though.

What would the ramp-up tests be?

natesilver: Part of the problem is that there aren’t that many ramp-up tests.

micah: Interesting!

harry: Again, what are you breaking with Trump on? The GOP Congress and Trump agree on most major policy questions — hence those high Trump scores.

micah: The Federal Reserve chair has to be confirmed by the Senate, right?

Other appointments?

And what about investigations?

Proactive anti-corruption laws?

Seems like there are a lot of options?

harry: I mean, if they started passing those anti-corruption laws, that would be a sign of something.

natesilver: If Trump tried to appoint, say, Rudy Giuliani to something, that would be interesting. But Trump has actually played it pretty carefully on appointments so far.

perry: Giuliani. New Jersey Gov. Chris Christie.

I think it will be fairly hard to have clear votes on things because McConnell will signal to the White House when the votes are there and when they’re not.

micah: You think the Senate would balk at Christie?

perry: Let’s not debate Christie. He will not be nominated.

micah: Lol.

natesilver: Yeah, and that’s another flaw with roll-call measures — they don’t measure things that never get to the floor.

harry: Why the hate toward Mr. 14 Percent Approval? (Also known as Chris Christie.)

natesilver: BTW, Congress could be doing a lot more on its own to investigate Trump, and they could make more of those investigations public.

micah: Yeah, that would qualify as a ramp-up test to me.

natesilver: Mueller — and the media — have devoted a lot of resources to investigating Trump, obviously, but that doesn’t mean that Congress couldn’t ramp up its investigations too.

perry: And that is an important place where Congress is not pushing back on Trump.

In fact, Republicans in Congress have moved in a pro-Trump, anti-Hillary Clinton direction in terms of investigations.

harry: That’s why I think you said to watch Richard Burr, right, Perry? To watch some of those investigations.

perry: GOP super-partisans have basically captured all of the committees but Burr’s. That’s important.

micah: OK, final question: Is it accurate to call Collins, Flake, Corker, McCain or any other Senate Republican “anti-Trump”?

perry: I call them Trump-skeptical. Maybe that’s cautious, but it’s more accurate, I think.

micah: I like that terminology.

harry: My problem with this is it’s difficult to call someone anti-Trump when they are agreeing with him a lot on policy. I would call some of them Trump-headaches. I know, lame phrase.

natesilver: You could call them “anti-Trump-curious.”

micah: lol

perry: Jennifer Rubin and Bill Kristol are anti-Trump. I can’t think of a Republican member of Congress who is really anti-Trump.

They are anti-Trumpism.

If we think of Trumpism as being more about nationalism, white identity politics, norms-bashing, institution-breaking, media-slamming, then Flake, Corker, etc., are against that. But not really Trump policies.

harry: For an anti-Trumper, the disagreements with Trump’s behavior, etc., have to override policy agreement. I don’t think we see that yet in Congress.

micah: Yeah, the passive vs. active seems like the dividing line.

Let’s call them “passively anti-Trump curious.”

01 Nov 12:56

A 'joyplot' of doom: After mass shootings and terrorist attacks, spikes of global attention fade quickly

by /u/laughlander

Excellent article about attention spans after violent tragedies.