R:ggplot2图例中的控制比例

时间:2011-10-25 16:46:52

标签: r ggplot2

我有以下R代码:

ggplot(data=curve,aes(x = expected, y=result/games)) + 
geom_point(aes(x=-expected, colour=games)) +
stat_function(fun=funx, geom="line", col="blue") + 
scale_colour_continuous(name="Number of games")

然而,在我的传奇中,我得到的价值如1e + 05,2e + 05 .. 6e + 05等。 我的问题是某些值非常低(从0到100),有些值非常大(高达600000)。我打算使用“break”来指定范围从0-10,11-100,1001-5000等。但是当我把它放到scale_colour_continuous中时,只有图例改变了,而不是我的图上的颜色。

更新:

我使用了建议的解决方案但是我收到错误:

Warning messages:
1: In Ops.factor(result, games) : / not meaningful for factors
2: In Ops.factor(result, games) : / not meaningful for factors
3: In Ops.factor(result, games) : / not meaningful for factors

2 个答案:

答案 0 :(得分:2)

如果您想要对比例进行离散化,那么最简单的方法是更改​​变量(或创建新变量)并使用该变量进行绘图。 ggplot本身不能将连续变量转换为离散变量。

curve$games.d <- cut(curve$games, breaks=c(0,10,100,5000,Inf), 
  labels=c("0-10", "11-100", "101-5000", "5000+"), include.lowest=TRUE)

然后使用colour=games.d进行绘图,如果您需要更多地调整比例(标签等),请使用scale_colour_discrete

更新

感谢dput输出。它清楚地说明了错误的位置。

> str(curve)
'data.frame':   223 obs. of  4 variables:
 $ expected: int  -402 -400 -391 -390 -386 -385 -383 -380 -379 -375 ...
 $ result  : Factor w/ 194 levels "0","0,5","1",..: 3 3 3 30 2 3 2 3 3 2 ...
 $ games   : int  1 1 1 2 1 1 2 1 1 1 ...
 $ colgame : Factor w/ 4 levels "0","100","5000",..: 1 1 1 1 1 1 1 1 1 1 ...

请注意result是一个因素。我假设你使用的是小数分隔符是逗号而不是句点的符号。这些必须转换为数字(稍后将进一步说明,以便首先避免这种情况)

curve$result <- as.numeric(gsub(",",".",as.character(curve$result)))

现在您的图表代码将是:(由于我没有您的函数stat_function,我注释了funx调用。)

ggplot(data=curve,aes(x = expected, y=result/games)) + 
geom_point(aes(x=-expected, colour=colgame)) +
#stat_function(fun=funx, geom="line", col="blue") + 
scale_colour_discrete(name="Number of games")

ggplot plot

关于如何首先避免这种情况,假设您从CSV文件中读取此内容,请查看read.csv2dec家族的read.table参数用于指定数字的十进制说明符的函数。

答案 1 :(得分:2)

如果你提供一个可重复的例子,我们会更容易提供帮助。而且我不确定你想要什么。但有些指针要做你想做的事。

如果您想使用休息符并更改颜色,则需要将颜色映射到美学。

来自Brian Diggs的借贷示例:

curve$games.d <- cut(curve$games, breaks=c(0,10,100,5000,Inf), 
  labels=c("0-10", "11-100", "101-5000", "5000+"), include.lowest=TRUE)

ggplot(data=curve,aes(x = expected, y=result/games, colour = games.d)) + 
geom_point(aes(x=-expected)) +
stat_function(fun=funx, geom="line", col="blue") + 
scale_colour_continuous(name="Number of games")

HTH