【发布时间】:2012-04-06 09:35:24
【问题描述】:
我在处理一些异常值时遇到了困难,使色标无用。
我的数据有一个长度变量,它基于一个范围,但通常会有一些更大的值。下面的示例数据有 95 个介于 500 和 1500 之间的值,以及 5 个超过 50,000 的值。当我想看到 500 到 1500 之间的颜色变化时,生成的颜色图例倾向于使用 10k、20k、... 70k 来表示颜色变化。实际上,超过 1300 的任何东西都应该是相同的纯色(可能是中值 +/- mad ),但我不知道在哪里定义。
我对任何 ggplot 解决方案持开放态度,但理想情况下,较低的值是红色、中间白色和较高的蓝色(低是不好的)。在我自己的数据集中,日期是 ggplot aes() 中带有 as.POSIXct() 的实际日期,但似乎不会影响示例。
#example data
date <- sample(x=1:10,size=100,replace=T)
stateabbr <- sample(x=1:50,size=100,replace=T)
Length <- c(sample(x=500:1500,size=95,replace=T),60000,55000,70000,50000,65000)
x <- data.frame(date=date,stateabbr=stateabbr,Length=Length)
#main plot
(g <- ggplot(data=x,aes(x=date,y=factor(stateabbr))) +
geom_point(aes(color=as.numeric(as.character(Length))),alpha=3/4,size=4) +
#scale_x_datetime(labels=date_format("%m/%d")) +
opts(title="Date and State") + xlab("Date") + ylab("State"))
#problem
g + scale_color_gradient2("Length",midpoint=median(x$Length))
添加 trans="log" 或 "sqrt" 也不是很有效。
感谢您的帮助!
【问题讨论】:
-
当我有异常值时,我的解决方法是使用对数刻度(或类似的东西)进行着色。但是,我很想知道是否有更好的方法!
-
是的,我已经尝试过了,但是对于这个例子来说它仍然是关闭的。希望有更好的方法出现!
-
您可以使用 ?cut 来为您的首选中断创建另一个变量,然后将
color=美学设置为该变量。
标签: r ggplot2 scale gradient outliers