ggplot2 geom_bar 填充美学

ggplot2 geom_bar fill aesthetic

我有以下代码来绘制不同国家/地区的合同。

Country <- CCOM$Principal.Place.of.Performance.Country.Name
Val <- CCOM$Action_Absolute_Value
split <- CCOM$Contract.Category

ggplot(CCOM, aes(x = Country, y = Val, fill = levels(split))) +
    geom_bar(stat = "identity")

我想要一个简单的堆叠条形图,其中条形图按合约类别着色,即变量 "split"(即 CCOM$Contract.Category)。

然而,当我 运行 代码生成下图时:

为什么 gplot 不将支出分成三个不同的块?为什么我的颜色部分散布在整个图表中。?我试过使用 factor(split) 和 levels(split) 但似乎不起作用。可能是我放错位置了。

按照您的建议order提供了解决方案:

ggplot(CCOM[order(CCOM$split), ], aes(x = Country, y = Val, fill = Contract.Category)) +
   geom_bar(stat = "identity")

我有一个类似的例子,我使用 fill 的等效项作为 Contact.Category,它仍然需要重新排序。

啊,我才反应过来怎么回事。你似乎害怕修改你的数据框,别这样!为 ggplot 创建外部向量是自找麻烦。与其将 CountryVal 创建为松散向量,不如将它们作为列添加到数据中:

CCOM$Country <- CCOM$Principal.Place.of.Performance.Country.Name
CCOM$Val <- CCOM$Action_Absolute_Value

那么你的剧情就很好很直接,不用担心顺序什么的。

ggplot(CCOM, aes(x = Country, y = Val, fill = Contract.Category)) +
    geom_bar(stat = "identity")