【问题标题】:R - ggplot2 change in sorting in geom_bar (?)R - ggplot2 在 geom_bar 中排序的变化(?)
【发布时间】:2016-12-02 09:09:30
【问题描述】:

昨天我制作了一些旧图表,很惊讶 geom_bar 中的排序 - 条形图和饼图发生了变化。

不久前我发布了这个问题

R - Strange pie chart behavior in ggplot

在开头我展示了一个示例 - 相同的短代码现在生成不同的图表。 我是不是误会了什么?这对我来说是相当令人惊讶的。

感谢任何cmets。

代码:

library(ggplot2)
library(data.table)

c1 <- c(2,3)
c2 <- c("second","third")
c2 <- factor(c2, levels = c("first","second","third","fourth"))
c3 <- c(0.7,0.3)
cs <- data.frame(c1,c2,c3)
ct <- data.table(cs)
colx <- c("blue","red")
midpoint <- cumsum(ct$c3) - ct$c3/2

ct

keycols = c("c1")
setkeyv(ct,keycols)


vysg <- ggplot(ct, aes(x=1,y=c3,fill=c2)) + 
          geom_bar(stat="identity",width=2) + 
          coord_polar(theta='y')+
          theme(axis.ticks=element_blank(), axis.title=element_blank(), 
            axis.text.y = element_blank(), panel.grid  = element_blank(),
            axis.text.x = element_text(color=colx,size=15,hjust=0))+ 
        scale_y_continuous(breaks = midpoint, labels = ct$c2)  + 
        scale_fill_manual(values=colx) +
        scale_x_continuous(limits=c(-1,2.5))
vysg

它会生成这个图表

而原始图表(由完全相同的代码生成,看起来像这样)

我注意到订单语句的结尾,但它不应该影响这个例子。

感谢任何 cmets,我可能只是对明显的事情视而不见。

【问题讨论】:

  • 刚刚运行你的代码,我得到了第二个数字。
  • 我确实在 ggplot 2.2.0 和 R 3.3.2 上获得了第一个。
  • 我刚刚在另一台 R 版本较旧的 PC 上尝试过。它生成第二个图表,而我 PC 上的 R 生成第一个。
  • 如果你能可靠地重现,你应该file an issue

标签: r ggplot2


【解决方案1】:

我已按照 Axeman 的提示在 Github 上提问。

原因是堆叠条形图的顺序发生了变化。

http://ggplot2.tidyverse.org/articles/releases/ggplot2-2.2.0.html

为了保持与之前相同的结果,有必要应对这种情况。链接中提示了几种可能性。 在我的情况下,我改变了 coord_polar 的方向并改变了中点

breaks = 1-midpoint #instead of: midpoint
coord_polar(theta='y', direction=-1)  #instead of: coord_polar(theta='y')

整个脚本:

library(ggplot2)
library(data.table)

c1 <- c(2,3)
c2 <- c("second","third")
c2 <- factor(c2, levels = c("first","second","third","fourth"))
c3 <- c(0.7,0.3)
cs <- data.frame(c1,c2,c3)
ct <- data.table(cs)
colx <- c("blue","red")
midpoint <- cumsum(ct$c3) - ct$c3/2

ct

keycols = c("c1")
setkeyv(ct,keycols)


vysg <- ggplot(ct, aes(x=1,y=c3,fill=c2)) + 
          geom_bar(stat="identity",width=2) + 
          coord_polar(theta='y', direction=-1)+
          theme(axis.ticks=element_blank(), axis.title=element_blank(), 
            axis.text.y = element_blank(), panel.grid  = element_blank(),
            axis.text.x = element_text(color=colx,size=15,hjust=0))+ 
        scale_y_continuous(breaks = 1-midpoint, labels = ct$c2)  + 
        scale_fill_manual(values=colx) +
        scale_x_continuous(limits=c(-1,2.5))
vysg

现在在 ggplot 2.2.0 中提供与 ggplot 1.0.1 中的原始脚本相同的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2021-10-02
    • 2019-02-06
    • 2017-09-12
    相关资源
    最近更新 更多