【问题标题】:How do I create a mirrored barplot in ggplot2 with 2 distinct classes?如何在 ggplot2 中创建具有 2 个不同类的镜像条形图?
【发布时间】:2018-09-20 14:28:59
【问题描述】:

我有以下示例数据框:

`特征类值

Trait Class Value
1     A     3
1     B     4
2     A     7
2     B     8

我想用 ggplot2 创建一个条形图,其中每个类的值都镜像在 x 轴上。

当我尝试这样绘制时,

ggplot(cali_gca, aes(x=Trait, y=Value, fill=Class)) + 
 geom_bar(stat="identity", position="identity")

我没有在 x 轴上得到任何镜像(请参阅带有我的实际数据的图像 与玩具数据集的结构完全相同)。

有人知道为什么吗?

非常感谢您!

这是我想要的用油漆绘制的图: Graphic I want

【问题讨论】:

  • 请在 Paint 或任何其他软件中绘制您预期的情节并将其添加到您的问题中
  • 您可能正在寻找类似thisthis 的东西?

标签: r ggplot2 bar-chart


【解决方案1】:

您可以获取要镜像的部分数据,将其乘以 (-1) 并将其附加到数据框:

library(tidyverse)

df <- tribble(
  ~year, ~country, ~value,
  2001, "France", 55, 
  2002, "France", 53, 
  2003, "France", 31, 
  2004, "France", 10, 
  2005, "France", 30, 
  2006, "France", 37, 
  2007, "France", 54, 
  2008, "France", 58, 
  2009, "France", 50, 
  2010, "France", 40, 
  2011, "France", 49, 
  2001, "USA", 55,
  2002, "USA", 53,
  2003, "USA", 64,
  2004, "USA", 40,
  2005, "USA", 30,
  2006, "USA", 39,
  2007, "USA", 55,
  2008, "USA", 53,
  2009, "USA", 71,
  2010, "USA", 44,
  2011, "USA", 40
)

ggplot(df, aes(year, value, fill = country)) +
  geom_col()

df <- df %>% 
  bind_rows(df %>% 
              filter(country == "France") %>% 
              mutate(value = -value,
                     country = "-France"))

ggplot(df, aes(year, value, fill = country)) +
  geom_col()

产生:

【讨论】:

  • 我做到了,我试图提升你的答案,但我没有足够的声誉:D
猜你喜欢
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多