r - ggplot2 色标受异常值影响过度

标签 r ggplot2 scale gradient outliers

我遇到了一些异常值的问题,导致色标变得毫无用处。

我的数据有一个基于范围的长度变量,但通常会有一些更大的值。下面的示例数据有 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"也不太有效。

感谢您的帮助!

最佳答案

这是一个稍微棘手的选项:

#Create a new variable indicating the unusual values
x$Length1 <- "> 1500"
x$Length1[x$Length <= 1500] <- NA

#main plot
# Using fill - tricky!
g <- ggplot() +
  geom_point(data = subset(x,Length <= 1500),
             aes(x=date,y=factor(stateabbr),color=Length),size=4) + 
  geom_point(data = subset(x,Length > 1500),
             aes(x=date,y=factor(stateabbr),fill=Length1),size=4)+
  opts(title="Date and State") + xlab("Date") + ylab("State")

#problem
g + scale_color_gradient2("Length",midpoint=median(x$Length))

enter image description here

所以这里棘手的部分是在点上使用 fill ,以说服 ggplot 制作另一个图例。显然,您可以使用不同的标签和颜色来自定义填充比例。

还有一件事,阅读布兰登的回答。原则上,您可以通过获取外围值来组合这两种方法,使用 cut 为它们创建单独的分类变量,然后使用我的技巧与 fill 比例。这样您就可以指示多个外围点组。

关于r - ggplot2 色标受异常值影响过度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811866/

相关文章:

r - ggplot2 中 `geom_label` 的 y 值基于 `..count..` 变量

css - Div 未正确环绕内容(图片)- 包括边距、可能的 float /Bootstrap 问题

azure - 如何避免 Azure 应用服务计划自动缩小规模

r - 使用 if else 循环时出现错误 "the condition has length > 1 and only the first element will be used"

R 的 dput() 函数的 Python 等价物

r - 更改图例顺序以实现多种美学

r ggplot2堆叠条形图未绘制所有级别

r - knitr - 如何对齐代码并并排绘制

r - 在没有DOSbox的情况下启动R脚本(在Windows上)?

html - 如何在 css hack/媒体查询中扩展 Internet Explorer?