这与您想要的接近,但颜色过渡可能不够平滑。希望其他人能进一步改进:
代码修改自此处。
d = expand.grid(h=seq(0,1,0.01), s=seq(0,1,0.05), v=1)
p1 = ggplot() +
coord_polar(theta="x") +
scale_x_continuous(breaks=NULL) +
scale_y_continuous(breaks=NULL) +
scale_fill_identity() +
geom_rect(data=d, mapping=aes(xmin=h, xmax=h+resolution(h),
ymin=s, ymax=s+resolution(s),
fill=hsv(h,s,v)))
通过使用更细的网格来定义h
和s
值,可以获得更平滑的颜色过渡效果,但绘制图表需要很长时间。您可以通过将v
的值设置在0到1之间来改变亮度。(根据@BrodieG的评论,将v= 1/2以获得Hadley's ggplot2书中图形的亮度级别。)
下面是一个版本的图表,使用0.001的步幅来定义h
值(同时保持s
的步幅为0.05)。这个图花费了几分钟来在我的比较新的Macbook Pro上绘制,但是h
坐标轴上的颜色过渡相当平滑:
png("Colour wheel.png", 2000, 2000)
p1
dev.off()
要获得颜色表,您可以使用hsv()
函数,该函数返回十六进制颜色值。例如:
colors = data.frame(h=seq(0.1,0.5,length.out=6),
s=seq(0.5,0.9,length.out=6),
v=c(.5,.5,.5,.9,.9,.9))
apply(colors, 1, function(x) hsv(x[1],x[2],x[3]))
[1] "#806640" "#7A8036" "#50802B" "#3CE642" "#29E68B" "#17E6E6"
plot(1:6,rep(1,6), pch=15, cex=5, col=apply(colors, 1, function(x) hsv(x[1],x[2],x[3])))
ggplot_build(qplot(displ, hwy, data=mpg, colour=factor(cyl)))$data[[1]]
相对接近(并基于挖掘ggplot的工作原理)。 - Brian Diggs