1

我正在尝试创建一个水平堆叠条形图,以可视化在一系列值上表现最佳的模型之间的转换。我遇到问题的一点是,我希望我的值轴(最初是 y,但我用 coord_flip() 将其翻转到 x)是一个对数刻度,这样 0.25 是我的下限,1 在中间, 4是我的上限。我想保持模型和轴值之间的转换之间的对应关系。

这是我的数据

stock.best<-c("ESTU","ESTU","ESTU","ESUM","ESUM","ESUM","SUMM","LLAT","LLAT","LLAT")
model.best<-c("D","T","Q","D","TQ","T","TQ","D","R","Q")
value.best<-c(1.18166,0.15034,2.668,0.6771123,1.408938,1.91395,4,0.2966743,1.143973,2.559352)
ALF.best<-data.frame(stock.best,model.best,value.best)
ALF.best$stock.best <- factor(ALF.best$stock.best, levels = c("LLAT", "SUMM", "ESUM", "ESTU"))
ALF.best$model.best <- factor(ALF.best$model.best, levels = c("D", "TQ", "T", "R","Q","NMA"))

以及我对条形图的最佳尝试。

qplot(stock.best, data=ALF.best, geom="bar", weight = value.best, fill=factor(model.best), xlab="", ylab="UH:UE ratio") 
+ scale_y_continuous(breaks = c(0.25,0.5,0.75,1,2,3,4)) + coord_flip()

这个图几乎是完美的,我的模型转换与轴上的正确值对齐。例如,在 ESTU 因子中,从模型 D 到模型 T 的转变发生在 1.18。但是,我希望我的轴在 0.25 和 1 之间具有与 1 和 4 相同的间距。我可以通过制作两个图形来人工获得它,一个是 coord_flip(ylim = c(0.25,1)),另一个是 coord_flip(ylim = c(1,4)) 并将它们彼此相邻粘贴,但是如果不使用 powerpoint 魔法就可以了。

4

1 回答 1

0

我不确定你的问题是否有意义。对数刻度对于条形图没有多大意义,因为条形图变为0

这是另一个版本的加权条形图,使用stat_summary. 就个人而言,我更喜欢这个,因为你可以看到真正发生的事情并且你有更多的灵活性(例如玩 fun.y)。

  ggplot(data=ALF.best,
       aes(x=stock.best,y=value.best,fill=model.best,group=model.best))+
  geom_bar(stat = "summary",fun.y=sum) + 
  coord_flip()

在此处输入图像描述

于 2013-06-11T06:53:38.630 回答