【发布时间】:2014-11-17 06:35:53
【问题描述】:
我试图在我的图表上突出显示一个 x 轴值,我可以根据这个 example 执行此操作,但是当我尝试解决问题时遇到了问题。刻面沿 x 轴具有不同的大小和顺序。这最终使事情变得复杂。我还怀疑每个方面的 x 轴必须相同,但是我希望有人可以证明我的不同。
我的例子是纯样本数据,我的集合的大小有点大,所以如果我在真实数据集上测试它会导致更多问题,我现在很抱歉。
数据
library(data.table)
dt1 <- data.table(name=as.factor(c("steve","john","mary","sophie","steve","sophie")),
activity=c("a","a","a","a","b","b"),
value=c(22,32,12,11,25,32),
colour=c("black","black","black","red","black","red"))
dt1[,myx := paste(activity, name,sep=".")]
dt1$myx <- reorder(dt1$myx, dt1$value,sum)
根据this SO question 帮助在 x 轴上对项目进行排序的函数。
roles <- function(x) sub("[^_]*\\.","",x )
图表
ggplot() +
geom_bar(data=dt1,aes(x=myx, y=value), stat="identity") +
facet_grid( ~ activity, scales = "free_x",space = "free_x") +
theme(axis.text.x = element_text(colour=dt1[,colour[1],by=myx][,V1])) +
scale_x_discrete(labels=roles)
您可以看到,即使“红色”分配给了 sophie,格式也应用于 john。其中一些与数据集的排序有关。
图表2
如果我添加setkey,我会接近正确的结果
setkey(dt1,myx)
ggplot() +
geom_bar(data=dt1,aes(x=myx, y=value), stat="identity") +
facet_grid( ~ activity, scales = "free_x",space = "free_x") +
theme(axis.text.x = element_text(colour=dt1[,colour[1],by=myx][,V1])) +
scale_x_discrete(labels=roles)
不幸的是,我们看到第二个方面的 x 轴项目以红色突出显示。我认为这是因为它从第一个图表中获取格式并在第二个图表中以相同的顺序应用它。
任何关于如何将格式应用到同一个人存在于活动中或一个人只存在于一项活动中的工作的想法将不胜感激。
【问题讨论】: