【问题标题】:ggplot2 stacked area line charts producing odd lines and holesggplot2堆积面积折线图产生奇数线和孔
【发布时间】:2016-01-21 06:42:05
【问题描述】:

我有一个结构如下的数据集:

year    color   toyota  honda   ford
2011    blue    66      75      13
2011    red     75      91      62
2011    green   65      26      57
2012    blue    64      23      10
2012    red     84      8       62
2012    green   67      21      62
2013    blue    31      74      49
2013    red     48      43      35
2013    green   57      62      74
2014    blue    59     100      32
2014    red     72      47      67
2014    green   97      24      70
2015    blue    31       0      79
2015    red     60      35      74
2015    green   51       2      28

(我的实际数据,显示在下面的图表图像中,要大得多,并且有 100 种“颜色”,但我在这里进行了简化,以便您仅了解结构。)

我正在尝试制作一个堆积面积折线图,显示随着时间的推移为特定公司生产的每种颜色的汽车数量。 (即每家公司都有自己的图表,其中 x 轴 = 年份,y 轴 = 生产的汽车)。

我运行这段代码:

qplot(year, toyota, data = dataName, fill = color, group = color, geom= "area", position = "stack") 
+ geom_area() + theme(legend.position = "none")

但是,每家公司的图表都有问题。看似随机的切割孔以及穿过层顶部的线条。

company1_chart

company2_chart

我很困惑为什么会发生甚至可能发生这种情况(尤其是漏洞......数据不会堆积吗?)如果我让公司的数据结构长而不是宽,会有所帮助吗?

【问题讨论】:

  • 您是否检查过您的数据是否存在某些年份和颜色的空白?例如。 1983 年等没有蓝色?
  • 我的数据确实有很多空白。那会是个问题吗?如果是这样,我可以确保每年都有同一组 200 种颜色的行。
  • 不完全确定,但我猜想在没有价值的地方出现空白......如果没有价值,ggplot2 应该绘制或显示什么?
  • 给我们数据来理解结构是不够的。例如,问题可能与列的数据类型有关(例如因子与数字),而我们无法从您发布的表格中看到这一点。此外,您应该确保您发布的数据确实导致了一个包含您想要消除的漏洞的图。所以你应该产生一个尽可能小的数据集,但仍然显示你想要解决的问题。然后,运行dput(dataName) 并发布输出。
  • 我认为@user3293236 关于差距是正确的。如果在绘图时从测试数据集中删除第一行,您可以看到差距。如果设置为 0,则没有问题。

标签: r ggplot2 stacked stacked-area-chart


【解决方案1】:

即使是 0 值,也不应该出现这些错误。我拿了你的数据,偶尔在 honda 列中添加了 0。

代码(使用ggplot2)

library(ggplot2)
df <- read.csv("cartest.csv", header = TRUE)

ggplot(data=df,aes(x=year,y=h,fill=color)) + 
  geom_area() + 
  ggtitle("car test")

如果您将数据作为 CSV 或 TSV 导入,并且您的数据列是数字,那么您应该不会遇到此问题。如果它是作为 .character 导入的,您可以使用以下方法进行转换:

df$h <- as.numeric(df$h)

【讨论】:

  • 嗯,所以我的“toyota”变量是数字,“year”变量是整数,“color”变量是因子。我完全按照您输入的方式输入了 ggplot 代码(交换了我在数据集中拥有的实际变量),但在顶部图表上仍然得到基本上相同的奇数填充和随机线,就像我在我的 qplot 中所做的那样最初的帖子。
  • @Jim 正如 aosmith 上面已经确认的那样,问题是您的数据框有间隙,即内部数据转换后的 NA 值。您可以通过在代码中使用 na.omit 来改变它。试试这个 sn-p: ggplot(data=na.omit(df),aes(x=year,y=h,fill=color)) + geom_area() + ggtitle("car test") 不完全确定是否会工作,但试一试......
猜你喜欢
  • 2013-04-10
  • 2019-08-08
  • 1970-01-01
  • 2016-07-30
  • 2012-04-06
  • 2017-03-22
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多