如何在绘图轴上显示因子id以及在图例中显示因子id和值?

时间:2014-12-04 17:57:25

标签: r

我有一个情节,其中request是一个长值的因子,所以它们不会显示在char轴上。

 plot( time_taken ~ request )

这种情况下的数据如下:

   time_taken              request
1           7 /servlet1/endpoint2/
2           2            /session/
3          10 /servlet1/endpoint3/
4           2 /servlet1/endpoint2/
5           8 /servlet4/endpoint2/
6           5            /session/
...

问题:有没有办法在x轴上绘制因子级别id,以及图例中的因子级别id +因子完整字符串?

2 个答案:

答案 0 :(得分:2)

可能的解决方案使用ggplot2。下面是一些示例数据。

df <- data.frame(factor = c("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 
                        "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
                        "ccccccccccccccccccccccccccccccccccccc"),

             time = c(5, 7, 9))

library(ggplot2)
qplot(data = df, factor, time) + scale_x_discrete(labels = abbreviate)

您还可以直接在数据框中的因子级别上使用函数abbreviate,以便您可以使用缩写标签,如果您不熟悉,也可以避免使用ggplot2它。 看看?abbreviate

答案 1 :(得分:2)

你问题中的代码会生成一个箱形图,所以我认为这就是你想要的。以下是四种方法。

这将生成一个箱形图,其中x轴编号,图例中的全名。

library(ggplot2)
ggplot(df) + 
  geom_boxplot(aes(x=as.integer(request),y=time_taken, color=request))+
  labs(x="request")

如下所示,使用ggplot标签是可辨别的(至少在示例中)。

ggp <- ggplot(df) + geom_boxplot(aes(x=request,y=time_taken))
ggp

在这样的情况下,我倾向于旋转情节。

ggp + coord_flip()

最后,这里是基地R的一种方式,虽然IMO是最不吸引人的选择。

plot(time_taken~factor(as.integer(request)),df, xlab="request")
labs <- with(df,paste(as.integer(sort(unique(request))),sort(unique(request)),sep=" - "))
legend("topright",legend=labs)