Skip to content

Instantly share code, notes, and snippets.

@semerj
Last active January 3, 2016 10:38
Show Gist options
  • Save semerj/8450328 to your computer and use it in GitHub Desktop.
Save semerj/8450328 to your computer and use it in GitHub Desktop.
Pretty pie charts using k-means clustering of images in R
# adapted from http://is-r.tumblr.com/post/36660147376/dominant-color-palettes-with-k-means
library(ggplot2)
library(reshape2)
library(EBImage)
imageLoader <- function(lib) {
rd <- readImage(lib)
longImage <- melt(rd)
rgbImage <- reshape(longImage, timevar="Var3", idvar=c("Var1", "Var2"), direction="wide")
rgbImage$Var1 <- -rgbImage$Var1
return(rgbImage)
}
# find image URL
rgbImage <- imageLoader("http://www.tate.org.uk/art/images/work/T/T03/T03254_10.jpg")
kColors <- 5
kMeans <- kmeans(rgbImage[, 3:5], centers=kColors)
zp1 <- qplot(factor(kMeans$cluster), geom="bar", fill=factor(kMeans$cluster))
zp1 <- zp1 + scale_fill_manual(values=rgb(kMeans$centers))
approximateColor <- kMeans$centers[kMeans$cluster, ]
ggplot(as.data.frame(kMeans$cluster), aes(x=factor(1), fill=factor(kMeans$cluster))) +
geom_bar(width=1) +
scale_fill_manual(values=rgb(kMeans$centers)) +
coord_polar(theta="y") +
theme(panel.background=element_blank(),
axis.title=element_blank(),
axis.ticks=element_blank(),
panel.grid=element_blank(),
axis.text.y=element_blank(),
legend.position="none",
axis.text.x=element_blank()) +
ylab("") +
xlab("")
ggsave(file="prettypie.png")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment