As I was cruising through the RSS feeds this morning, I came across this post by Daniel Kennedy on the 451 Research blog that included this chart:
Now, 451 is my personal favorite industry research firm both as a data dude and as a former F100 executive. They’ve got some of the smartest SMEs and are one of the best data-driven analyst firms out there. Even just looking at this chart, all of the “chart junk” has been removed and they applied a decent color scheme (which aligns to their logo colors). But, even as pie charts go, it needs some help.
We here at DDSEC tend to spew out a fair chunk of R code in our posts, and I realize that R is not exactly a first-class citizen on the desktops of most security practicioners (which is one reason we only used Excel in the “dashboards” chapter of our book), so let’s give this chart a makeover only using Excel.
Pies are never my go-to chart for anything, but the only thing really wrong with this pie (besides the fact that it is a pie) is the lack of starting at noon. So, let’s fix that first:
and we can stop there (it’s nigh perfect insofar as pie charts are concerned). Having said that, I think this data is just begging for bar chart:
Rather than post a screen-cast or series of step-by-step screen shots, I’ve provided an Excel file that has data tables and corresponding charts you can just use or explore/modify.
As an aside, the verbose R
ggplot method (which I could not resist including below) of making a similar chart is really nothing more than using individal text statements/directives to set the same graph configuration options you’re using a mouse to do in Excel (with the added benefit of being able to run 100 charts through the same code without wearing out your mouse battery or left-click button).
library(ggplot2) library(scales) dat <- data.frame(measure=c("Availability", "Time to\nRecovery", "Project\nCompletion", "Informal", "Response\nTime", "Usage", "Responsiveness"), value=c(0.47, 0.15, 0.15, 0.15, 0.07, 0.01, 0.01), inout=c(1.15, 1.15, 1.15, 1.15, 1.15, -0.15, -0.15), lab=c("black", "black", "white", "white", "white", "black", "black"), col=c("#d0d1e6", "#a6bddb", "#74a9cf", "#3690c0", "#0570b0", "#045a8d", "#023858")) gg <- ggplot(dat, aes(x=reorder(measure, value), y=value)) gg <- gg + geom_bar(stat="identity", aes(fill=col), width=0.45) gg <- gg + geom_text(aes(label=percent(value), hjust=inout, color=lab), size=5) gg <- gg + coord_flip() gg <- gg + scale_color_identity() gg <- gg + scale_fill_identity() gg <- gg + scale_y_continuous(expand=c(0,0)) gg <- gg + labs(x=NULL, y="% of network managers interviewed", title="Measurements in Third-party Service SLAs") gg <- gg + theme_bw() gg <- gg + theme(legend.position="none") gg <- gg + theme(panel.grid=element_blank()) gg <- gg + theme(panel.border=element_blank()) gg <- gg + theme(axis.ticks.x=element_blank()) gg <- gg + theme(axis.text=element_text(size=14)) gg <- gg + theme(axis.text.x=element_blank()) gg <- gg + theme(axis.ticks.y=element_blank()) gg <- gg + theme(axis.title.y=element_text(size=12, face="plain")) gg <- gg + theme(plot.title=element_text(size=16, face="bold")) gg