相关疑难解决方法(0)

ggplot2受异常值影响的色标

我对一些异常值有困难,使得色标无用.

我的数据有一个基于范围的Length变量,但通常会有一些更大的值.以下示例数据具有介于500和1500之间的95个值,以及超过50,000的5个值.当我想看到500到1500之间的颜色变化时,由此产生的颜色图例倾向于使用10k,20k,... 70k的颜色变化.真的,1300左右的任何东西应该是相同的纯色(可能是中位+/-疯狂),但我不知道在哪里定义.

我对任何ggplot解决方案持开放态度,但理想情况下,较低的值将是红色,中间白色和较高的蓝色(低值很差).在我自己的数据集中,date是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))
Run Code Online (Sandbox Code Playgroud)

添加trans ="log"或"sqrt"也不是很有效.

谢谢您的帮助!

gradient r scale outliers ggplot2

11
推荐指数
2
解决办法
3957
查看次数

是否可以在scale_fill_gradient2()中定义"mid"范围?

我正在创建一个热图使用ggplot(),并希望利用3色方案scale_fill_gradient2().我发现,中间颜色太宽,往往会显示我的一些数据(例如使用"黑色").是否可以定义被认为是"中间"的范围,以使其更窄?如果没有,是否有更好的方式可以这样做?

数据集:

structure(list(var1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, …
Run Code Online (Sandbox Code Playgroud)

r colors legend ggplot2

5
推荐指数
2
解决办法
7021
查看次数

使用scale_colour_gradient2不可见的小值变化

我想在这个情节中做出小回报更加明显.最合适的功能似乎是scale_colour_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 …
Run Code Online (Sandbox Code Playgroud)

r colors ggplot2

3
推荐指数
1
解决办法
1719
查看次数

标签 统计

ggplot2 ×3

r ×3

colors ×2

gradient ×1

legend ×1

outliers ×1

scale ×1