In this article I look at how well current AI models can visualise simple data. To make it interesting I am using real data on the most common first names of MOA Benchmarking users. The top five most common first names are summarised in Table 1. I asked a few AI chatbots to have a go at visualising the data. The results were more varied than I expected and I found that each model had its own strengths and weaknesses.
Prompt
Can you visualise this data?
FirstName,n
Michelle,153
Sarah,128
Karen,116
Lisa,100
Julie,91
Claude (Sonnet 4)

Visualisation technology: Recharts (javascript).
Good
- Claude visualises the data inside of the chat client, so I didn’t have to run any code.
- The chart was interactive, allowing me to hover over bars to see the counts.
Bad
- x-axis labels are on an angle making them harder to read.
- The y-axis doesn’t have a title.
- I would also avoid vertical grid lines for this bar chart as they don’t improve readability.
ChatGPT (GPT-4o)

Visualisation technology: matplotlib (Python).
ChatGPT (DALL-E 3)

Visualisation technology: ChatGPT-4o image generation powered by DALL-E 3.
Gemini (2.5 Pro)

Visualisation technology: matplotlib (Python).
Good
- Gemini is able to run Python code, so I did not have to run any code myself.
- Gemini shares the code used, which is quite readable. It was easy to modify the code to make improvements.
Bad
- x-axis labels are on an angle making them harder to read.
- x-axis title is unnecessary.
- y-axis title should be more descriptive than “n”.
My attempt without AI
Code
library(tidyverse)
library(showtext)
font_add('Neue-Montreal', regular = here::here('fonts/NeueMontreal-Regular.otf'),
bold = here::here('fonts/NeueMontreal-Bold.otf'))
showtext::showtext_auto(enable = TRUE)
top5 |>
ggplot(aes(fct_reorder(FirstName,n), n)) +
geom_bar(stat='identity', width = .8, fill='#432585') +
geom_text(aes(y=0,label=FirstName),nudge_y=2,hjust=0,
fontface = 'bold',family = 'Neue-Montreal',
size=10, colour='white') +
labs(y='Count') +
labs(title='The Five Most Common First Names Among MOA Benchmarking Users') +
theme_minimal(base_size = 22, base_family = 'Neue-Montreal') +
scale_y_continuous(breaks = scales::breaks_pretty(n=7)) +
scale_x_discrete(labels=paste0(5:1,'.')) +
theme(axis.title.y.left = element_blank(),
axis.text.y = element_text(margin=margin(r=-15), family = 'Neue-Montreal'),
panel.grid.major.y = element_blank(),
plot.title = element_text(face='bold', size=26, family = 'Neue-Montreal',
margin=margin(b=20)),
axis.title.x.bottom = element_text(margin=margin(t=15)),
plot.margin = margin(r=20),
plot.title.position = 'plot') +
coord_flip()
Visualisation technology: ggplot2 (R).
I tried to make the graph eye catching while avoiding unnecessary grid lines.
Conclusion
At the time of writing, my main takeaways are:
- I would recommend Claude if you want to analyse data within the chat interface.
- I would recommend Gemini for preparing shareable graphs if you don’t want to run code on your computer.
- If you are able to run the code yourself then any mainstream LLM chat interface will likely work fine, but in this experiment I would say ChatGPT (GPT-4o) produced the best results.
- ChatGPT-4o image generation (DALL-E 3) is unsuitable for graphing as it hallucinates and the process isn’t transparent.
- Using
ggplot2or your graphing library of choice without AI is still powerful and satisfying.
These tools are developing rapidly, so my findings may not be relevant a year from now. However, I think it is worth keeping an eye on this space as there is clearly great potential.