【问题标题】:stacked bar graph with log conversion of data or axis R具有数据或轴 R 对数转换的堆积条形图
【发布时间】:2013-06-11 06:03:20
【问题描述】:

我正在尝试创建一个水平堆叠条形图,以可视化在一系列值上表现最佳的模型之间的转换。我遇到问题的一点是,我希望我的值轴(最初是 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 魔法会很好。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定你的问题是否有意义。对数刻度对于条形图没有多大意义,因为条形图变为 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()
    

    【讨论】:

    • 通常情况下,我同意,但这不是您的正常条形图,也许我需要条形图以外的东西来满足我的需求。如果我提供更多背景信息,也许会有所帮助。我从 6 个具有 14 年预测误差的模型开始。对于每一年,如果误差为负,则误差乘以 a,如果误差为正,则乘以 b,以确定这些年的总成本。我正在绘制每个 value.best 总成本最低的模型。 Value.best 是 a:b 的比率,所以我不想要一个从 0(无意义)到 4 的条形,我想要它从 0.25(比率为 0.25:1 到 4:1,中间为 1:1。
    猜你喜欢
    • 2018-12-15
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多