No Result
View All Result
Simon Angling
  • Home
  • About Me
  • Cyber Security
  • Productivity
  • Blog
    • Cyber Security
    • Design
    • Education
    • Learning Out Loud
    • Microsoft
    • Productivity
    • Technology
  • Contact Me
Simon Angling
  • Home
  • About Me
  • Cyber Security
  • Productivity
  • Blog
    • Cyber Security
    • Design
    • Education
    • Learning Out Loud
    • Microsoft
    • Productivity
    • Technology
  • Contact Me
No Result
View All Result
Simon Angling
No Result
View All Result
Home Design

From a Neutron Star to a Record Sleeve

Simon Angling by Simon Angling
May 10, 2026
in Design, Learning Out Loud, Microsoft
From a Neutron Star to a Record Sleeve

The Data Behind Unknown Pleasures

I have a side project called jonzed.com. It is a small print-on-demand t-shirt shop – built around the desire to recreate some of the home-made t-shirts that I made in the 80s with a homemade feel. The idea is slowly expanding in a fairly simple idea: take images that sit at the intersection of science, data, and design, and put them on things you can wear.

The image that started it was the pulsar plot from the cover of Joy Division’s Unknown Pleasures. If you know it, you know it immediately: stacked white lines on black, each one a slightly different shape, building into something that looks almost geological. What most people don’t realise is that the original 1979 album cover carried no text at all – no band name, no album title, just the image, small and centred on a black sleeve. That was Peter Saville’s decision, and it was a deliberate one. (I was lucky enough to meet Saville briefly at a typography conference in London in the eighties – but that is a story for another time.)

The reason Jonzed exists is partly a reaction to what happened to that image afterwards. If you see it on a t-shirt today, it almost certainly has “Joy Division” printed above it in block capitals. Which is understandable – people want to signal what they’re wearing – but it goes against the grain of what Saville was doing. The whole point was that the image stood alone. So jonzed sells the image the way it was originally intended: no band name, no label, just the data. Whether that counts as more faithful or merely more obscure probably depends on who you ask.

To produce the version I needed for print, I found the original dataset on GitHub, tried to reproduce the image in Excel, hit its limits, fell back on some R code from the same repository, and then refined the result in Affinity Designer before sending it to print. That process – and the questions it left me with – is what this series is about. But first, the origin story.

The pulsar

The story begins in November 1967, at the Mullard Radio Astronomy Observatory in Cambridge. Jocelyn Bell Burnell, then a postgraduate student, detected an anomalous repeating signal whilst analysing data from a radio telescope she had helped to build. The signal was regular to an almost unsettling degree – pulsing every 1.337 seconds – and it briefly attracted the nickname LGM-1, for “Little Green Men”, because nobody could immediately rule out an artificial origin. It was, of course, natural: a rapidly rotating neutron star, the collapsed remnant of a supernova, emitting a beam of electromagnetic radiation that swept through space like a lighthouse. It was the first pulsar ever observed, catalogued initially as CP 1919 and later reclassified as PSR B1919+21.

The data

A couple of years later, Harold D. Craft Jr., a doctoral student at Cornell, was working at Arecibo – at that point the most sensitive radio telescope in the world – trying to understand whether there was structure within the pulsar’s individual pulses. Were they perfectly regular? Did subpulses drift? Was there a pattern beneath the pattern?

To investigate, he needed to visualise a large number of pulses at once. He had something the Manchester astronomers didn’t: access to a computer. Specifically, a Control Data Corporation 3200 laboratory mainframe, which he used to digitise the incoming radio signals rather than recording them as analogue strip charts in real time.

What he did with that digitised data was to segment the continuous signal into temporal windows centred on each pulse – approximately 120 milliseconds each – and stack them vertically, one row per pulse, 80 pulses in total, each with 300 data samples. He tilted the stack slightly so that the rows read like a hillside viewed from below, and he wrote a fill routine to white out the area beneath each curve, preventing overlapping lines from obscuring each other. The result is what we now call a ridgeline plot. In some circles it is also called a joyplot, for reasons that will be obvious.

Craft didn’t find the pattern he was looking for. But as a byproduct of that failed search, he produced one of the most recognisable data visualisations in history.

The journey to the sleeve

Craft’s plot appeared in his doctoral dissertation in September 1970. It was reproduced shortly afterwards – rendered in white on cyan – in the January 1971 issue of Scientific American, in an article on the nature of pulsars. It then reappeared in the 1977 Cambridge Encyclopaedia of Astronomy, credited to the Arecibo Radio Observatory.

It was there that Bernard Sumner – Joy Division’s guitarist – came across it during a visit to Manchester Central Library. He brought it, along with a handful of other images, to Peter Saville. Saville inverted it to white on black (the band had asked for the opposite, which he quietly overrode on aesthetic grounds), stripped all text from the sleeve, and placed it on the cover of the band’s debut album, released in June 1979.

Craft found out about this when a colleague at Cornell mentioned it to him. He went out and bought a copy of the album and a poster. “Just for no particular reason,” he said, “except that it’s my image, and I ought to have a copy of it.”

The dataset

The underlying data is still available. A GitHub repository pachadotdev/cp1919: Radio Observations of the Pulse Profiles and Dispersion Measures of Twelve Pulsars (aka Joy Division plot) has the dataset as a CSV – 24,000 rows in three columns (x, y, z), representing 80 pulses each with 300 amplitude samples – along with R code to render it in several colour variants.

My first instinct, having no experience with R, was to see how far I could get in Excel. The answer turned out to be, further than expected, but not quite far enough.

The Excel attempt

The CSV loads cleanly into Excel via Power Query. Go to Data → Get Data → From File → From Text/CSV, navigate to cp1919.csv, and when the preview window appears click Transform Data rather than Load – this opens the Power Query editor rather than dumping the raw data straight onto a sheet.

The first challenge is that the data arrives in long format – 24,000 rows with one sample per row, which is the right shape for R but not for Excel’s chart engine. Excel wants wide format: one column per pulse, with the 300 sample values running down the rows. Power Query handles this pivot cleanly. In the editor, click on the y column to select it, then go to Transform → Pivot Column. Set the values column to z and the aggregation to Don’t Aggregate. Click OK.

What you get is a 300-row table with 81 columns – x in the first column, then one column per pulse numbered 1 through 80. Close and load this to a new sheet.

At this point, I’m not sure what I go – if anything.

I figured all the 80 pulses piled on top of each other on the same baseline. And most of the chart was obscured by access. I don’t know – it was a messs. Moving on…

Adding the offsets

In Craft’s plot he tilted the rows adding separation. In R, geom_ridgeline the code handles vertical separation automatically. In Excel, I had to do it by hand, so a bit of experiment and it wasn’t too complex. The idea was straightforward enough: add a fixed amount to every value in each pulse column, with that amount increasing as you move from pulse 80 up to pulse 1. Pulse 1 gets the largest offset (so it sits at the top), pulse 80 gets the smallest (so it sits at the bottom).

Create a new sheet – I called mine offsets – and set it up as follows:

  • Cell A1: label it offset_step
  • Cell A2: enter your offset step value. Start with 3 – you will tune this later.
  • Row 2, columns B onwards: enter a multiplier row. Cell B2 gets 80, C2 gets 79, D2 gets 78, and so on down to 1 in column BCC (the 81st column). This row controls how much offset each pulse receives.

Then in cell B4 (or wherever your data starts), enter the formula:

='cp1919'!B2 + ($A$2 * B$2)

This takes the raw pulse value from the pivoted sheet, and adds the offset step multiplied by that column’s multiplier. Copy this formula across all 80 pulse columns and down all 300 rows. The dollar signs on $A$2 lock the offset step reference; the B$2 locks to row 2 of the current column so the multiplier shifts correctly as you copy across.

With an offset step of 6 or 7, adjacent pulses separate cleanly without too much wasted space between them. The value is easy to tune – change the number in A2 and the entire table recalculates instantly.

Building the chart

Select all the data on the offsets sheet – everything except the multiplier row and the offset step cells, so starting from your first data row down through all 300 rows and across all 80 columns. Insert → Charts → Line → Line (the basic flat version, not stacked or 3D).

Excel produced a chart with 80 series; all now offset from each other vertically. It will look tangled in places, but the overall shape – the characteristic peak in the middle of the data – was starting to visible.

Formatting

Now strip everything back. Right click the chart area → Format Chart Area → set the fill to solid black and the border to none. Delete the chart title, the legend, the gridlines, and both axes. What remains should be 80 coloured lines on a black background.

The shape at this point is genuinely recognisable as the Joy Division image. The peak sits in the right place, the flatter pulses above and below it are visible, and the overall structure reads correctly.

The remaining problem is the line colours. Excel assigns each of the 80 series its own colour from the default palette, cycling through blues, oranges, greens, reds, and so on. To match the original, you want all lines white. The correct approach is to click each series in turn, open Format Data Series, and change the line colour to white – using the arrow keys to cycle through series without closing the pane makes this faster, but it is still 80 repetitions. In practice, this is where patience ran out.

The result – with Excel’s default colour gradient intact – looks like this:

It is, unexpectedly, not without charm. The gradient from white at the top through to blue at the bottom reads a little like the white-on-cyan Scientific American version rather than the album cover, which is a reasonable accident to have stumbled into.

But it is clearly not suitable for print: the line colours are wrong, and more fundamentally, the absence of the masking effect – where each curve whites out the area below it to prevent overlapping lines from bleeding through – means adjacent pulses cross and tangle in a way the original does not. Excel can approximate the ridgeline plot, but it cannot fully replicate it.

If you want to explore the Excel file yourself, I have uploaded it to GitHub here: sangling/cp1919-visualisation: Visualising the CP1919 pulsar dataset – the data behind the Joy Division Unknown Pleasures album cover – using Excel and the Microsoft Azure stack.

The R route

Having established where Excel falls short, I went back to the R code in the pachadotdev repository. The code is remarkably concise – it uses ggplot2 and the ggridges package, and the key function is geom_ridgeline, which handles the stacking, offsetting, and masking in a single call. The album cover version is produced with the following:

library(ggplot2)
library(ggridges)

pulsar <- readr::read_csv("cp1919.csv")

col1 <- "black"
col2 <- "white"

ggplot(pulsar, aes(x = x, y = y, height = z, group = y)) +
  geom_ridgeline(
    min_height = min(pulsar$z),
    scale = 0.2,
    linewidth = 0.5,
    fill = col1,
    colour = col2
  ) +
  scale_y_reverse() +
  theme_void() +
  theme(
    panel.background = element_rect(fill = col1),
    plot.background = element_rect(fill = col1, color = col1),
  )

What that produces is a clean, accurate reproduction – the masking works correctly, the line weight is fine, and the output is exportable as an SVG. From there, Affinity Designer (which has largely replaced Adobe Illustrator in my workflow since moving away from the Creative Cloud subscription) handles the vector file cleanly and gives enough control over line weight, margins, and export resolution to produce something suitable for print.

The end result is on jonzed.com.

What comes next

Working through this process left me with a question that this blog is reasonably well placed to explore: is there a better route to this result within the Microsoft and Azure ecosystem? Not just better than Excel – that bar is not especially high – but genuinely competitive with R in terms of output quality and ease of use?

The next posts in this series will work through the options in roughly ascending order of capability: Python in an Azure notebook or Microsoft Fabric, then Power BI, and eventually Azure Data Explorer. The dataset is small, clean, and well understood, which makes it a good test case for comparing tools against each other – not just on output quality, but on how much work each one requires to get there.

If you have done something similar, or spot anything above that needs correcting, let me know in the comments below.


References

  • Craft, H.D. Jr., Radio Observations of the Pulse Profiles and Dispersion Measures of Twelve Pulsars, Cornell University PhD dissertation, September 1970
  • pachadotdev, CP1919 dataset and R code – https://github.com/pachadotdev/cp1919
  • Wikipedia, Unknown Pleasures – https://en.wikipedia.org/wiki/Unknown_Pleasures

Previous Post

Simes’ Jonathan Richman Pages

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Table of Contents

  • The Data Behind Unknown Pleasures
    • The pulsar
    • The data
    • The journey to the sleeve
    • The dataset
    • The Excel attempt
      • Adding the offsets
      • Building the chart
      • Formatting
    • The R route
    • What comes next
    • References

Popular Posts

No Content Available

Categories

  • Africa Overland
  • Archive
  • Asides
  • Cyber Security
  • Design
  • Education
  • Learning Out Loud
  • Microsoft
  • Personal
  • Productivity
  • Quotes
  • South Africa
  • Technology
  • Web Development
  • Privacy Policy
  • Cookie Policy

© 2024 Simon Angling

No Result
View All Result
  • Home
  • About Me
  • Cyber Security
  • Productivity
  • Blog
    • Cyber Security
    • Design
    • Education
    • Learning Out Loud
    • Microsoft
    • Productivity
    • Technology
  • Contact Me

© 2024 Simon Angling