jlh*_*ard 11
想知道如何做到这一点coord_polar(),因为Wickham的书的例子显然没有.事实证明你可以使用geom_point(...).
library(ggplot2)
r <- seq(0,1,length=201)
th <- seq(0,2*pi, length=201)
d <- expand.grid(r=r,th=th)
gg <- with(d,data.frame(d,x=r*sin(th),y=r*cos(th),
z=hcl(h=360*th/(2*pi),c=100*r, l=65)))
ggplot(gg) +
geom_point(aes(x,y, color=z), size=3)+
scale_color_identity()+labs(x="",y="") +
coord_fixed()
Run Code Online (Sandbox Code Playgroud)

这会在几秒钟内呈现.该参考表明默认亮度l = 65.
这与您正在寻找的内容很接近,但颜色过渡可能不够顺畅.希望其他人可以改进这一点:
代码改编自此处.
# Create hsv grid
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)))
Run Code Online (Sandbox Code Playgroud)
通过为h和s值使用更精细的网格,可以获得更平滑的颜色过渡,但渲染绘图需要很长时间.您可以通过设置v0到1之间的值来更改亮度.(按@ BrodieG的注释,设置v = 1/2以获得Hadley的ggplot2书中图形的亮度级别.)
下面是使用步长为0.001的图表的版本h(同时将s步长保持为0.05).这需要花几分钟时间在我相对较新的Macbook Pro上渲染,但沿h坐标的过渡非常平滑:
png("Colour wheel.png", 2000, 2000)
p1
dev.off()
Run Code Online (Sandbox Code Playgroud)

要获取颜色表,可以使用hsv()返回十六进制颜色值的函数.例如:
# Make up some hsv colors
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))
# Convert to hexadecimal
apply(colors, 1, function(x) hsv(x[1],x[2],x[3]))
[1] "#806640" "#7A8036" "#50802B" "#3CE642" "#29E68B" "#17E6E6"
# Plot them to see what they look like
plot(1:6,rep(1,6), pch=15, cex=5, col=apply(colors, 1, function(x) hsv(x[1],x[2],x[3])))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3245 次 |
| 最近记录: |