R 增加接近零的值的色阶分辨率
我想让这个图中的小收益更明显。最合适的函数似乎是R 增加接近零的值的色阶分辨率,r,colors,ggplot2,R,Colors,Ggplot2,我想让这个图中的小收益更明显。最合适的函数似乎是scale\u color\u gradient2,但这会冲掉经常发生的小回报。使用limits有帮助,但我无法确定如何设置oob(越界),因此它将只有一个“饱和”值,而不是灰色。而对数变换只会让小值脱颖而出。有没有其他人想出了如何优雅地做到这一点 library(zoo) library(ggplot2) library(tseries) spx <- get.hist.quote(instrument="^gspc", start="2
scale\u color\u gradient2
,但这会冲掉经常发生的小回报。使用limits
有帮助,但我无法确定如何设置oob(越界),因此它将只有一个“饱和”值,而不是灰色。而对数变换只会让小值脱颖而出。有没有其他人想出了如何优雅地做到这一点
library(zoo)
library(ggplot2)
library(tseries)
spx <- get.hist.quote(instrument="^gspc", start="2000-01-01",
end="2013-12-14", quote="AdjClose",
provider="yahoo", origin="1970-01-01",
compression="d", retclass="zoo")
spx.rtn <- diff(log(spx$AdjClose)) * 100
rtn.data <- data.frame(x=time(spx.rtn),yend=spx.rtn)
p <- ggplot(rtn.data) +
geom_segment(aes(x=x,xend=x,y=0,yend=yend,colour=yend)) +
xlab("") + ylab("S&P 500 Daily Return %") +
theme(legend.position="null",axis.title.x=element_blank())
# low returns invisible
p + scale_colour_gradient2(low="blue",high="red")
# extreme values are grey
p + scale_colour_gradient2(low="blue",high="red",limits=c(-3,3))
# log transform returns has opposite problem
max_val <- max(log(abs(spx.rtn)))
values <- seq(-max_val, max_val, length = 11)
library(RColorBrewer)
p + scale_colour_gradientn(colours = brewer_pal(type="div",pal="RdBu")(11),
values = values
, rescaler = function(x, ...) sign(x)*log(abs(x)), oob = identity)
图书馆(动物园)
图书馆(GG2)
图书馆(tseries)
spx那么:
p + scale_colour_gradient2(low="blue",high="red",mid="purple")
或
这是另一种可能性,使用比例\颜色\梯度n
。使用值=重缩放(…)
设置颜色的映射
,以便接近零的值的分辨率更高。我在这里看了一些色阶:。我选择了一个5级分色方案,RdBu,通过近白色从红色到蓝色。可能还有其他更适合你需要的量表,这只是为了说明基本原则
# check the colours
library(RColorBrewer)
# cols <- brewer_pal(pal = "RdBu")(5) # not valid in 1.1-2
cols <- brewer.pal(n = 5, name = "RdBu")
cols
# [1] "#CA0020" "#F4A582" "#F7F7F7" "#92C5DE" "#0571B0"
# show_col(cols) # not valid in 1.1-2
display.brewer.pal(n = 5, name = "RdBu")
谢谢Troy,我试过了,它确实有效,但我想保持白色作为“中心”中性色。太好了!该解决方案是完全灵活的,因为我可以将映射函数设置为围绕零区域的更细粒度。非常感谢你,Henrik,你为我节省了数小时(更多)的实验时间!
# check the colours
library(RColorBrewer)
# cols <- brewer_pal(pal = "RdBu")(5) # not valid in 1.1-2
cols <- brewer.pal(n = 5, name = "RdBu")
cols
# [1] "#CA0020" "#F4A582" "#F7F7F7" "#92C5DE" "#0571B0"
# show_col(cols) # not valid in 1.1-2
display.brewer.pal(n = 5, name = "RdBu")
library(ggplot2)
library(scales) # needed for rescale
ggplot(rtn.data) +
geom_segment(aes(x = x, xend = x, y = 0, yend = yend, colour = yend)) +
xlab("") + ylab("S&P 500 Daily Return %") +
scale_colour_gradientn(colours = cols,
values = rescale(c(-10, -1, 0, 1, 10)),
guide = "colorbar", limits=c(-10, 10)) +
theme(legend.position = "null", axis.title.x = element_blank())