【问题标题】:R - Odd behaviour of ggplot. stacked area chart doesn't show correctlyR - ggplot 的奇怪行为。堆积面积图无法正确显示
【发布时间】:2019-04-09 07:18:10
【问题描述】:

我在 R 中遇到了 ggplot 和 geom_area 的问题。我的目的是生成一个堆积面积图,x 轴上的时间和 y 轴上的 p_gen 值就像这个一样(使用 Excel 制作,具有相同的数据):

堆积面积图示例:

我尝试使用如下代码绘制图形:

ggplot(pcpcen, aes(x=datetime, y=p_gen, fill = type)) + geom_area()

其中pcpcen对应这个数据框(不包括所有数据,但结构相同)

week,datetime,type,p_gen,is_ernc
376,2025-12-13 11:00:00,BESS,0.1,1
376,2025-12-13 11:00:00,BIO,302.49999999999994,1
376,2025-12-13 11:00:00,BOMBEO,0.0,1
376,2025-12-13 11:00:00,CARBON,2830.7999999999997,1
376,2025-12-13 11:00:00,COG,117.00000000000001,1
376,2025-12-13 11:00:00,DIESEL,0.0,1
376,2025-12-13 11:00:00,DIESEL_CC,0.0,1
376,2025-12-13 11:00:00,EOL,528.7,1
376,2025-12-13 11:00:00,GEO,48.0,1
376,2025-12-13 11:00:00,GLP,0.0,1
376,2025-12-13 11:00:00,GNL_CA,250.5,1
376,2025-12-13 11:00:00,GNL_CC,658.0,1
376,2025-12-13 11:00:00,HIDRO,2274.399999999999,1
376,2025-12-13 11:00:00,HIDRO_EMB,2352.2,0
376,2025-12-13 11:00:00,HIDRO_MINI,24.400000000000002,0
376,2025-12-13 11:00:00,SOL_CSP,31.5,1
376,2025-12-13 11:00:00,SOL_FV,2155.5,1
347,2025-05-22 10:00:00,BESS,0.1,1
347,2025-05-22 10:00:00,BIO,390.29999999999995,1
347,2025-05-22 10:00:00,BOMBEO,0.0,1
347,2025-05-22 10:00:00,CARBON,3865.5999999999995,1
347,2025-05-22 10:00:00,COG,117.00000000000001,1
347,2025-05-22 10:00:00,DIESEL,0.0,1
347,2025-05-22 10:00:00,DIESEL_CC,0.0,1
347,2025-05-22 10:00:00,EOL,862.8000000000001,1
347,2025-05-22 10:00:00,GEO,0.0,1
347,2025-05-22 10:00:00,GLP,37.0,1
347,2025-05-22 10:00:00,GNL_CA,255.1,1
347,2025-05-22 10:00:00,GNL_CC,1775.6,1
347,2025-05-22 10:00:00,HIDRO,1763.4000000000003,1
347,2025-05-22 10:00:00,HIDRO_EMB,2119.8999999999996,0
347,2025-05-22 10:00:00,HIDRO_MINI,25.000000000000004,0
347,2025-05-22 10:00:00,SOL_CSP,31.5,1
347,2025-05-22 10:00:00,SOL_FV,1501.1999999999991,1

但是在我运行命令之后,结果却不是我所期望的那样

如果我把x轴改成“周”列,输出就更奇怪了:

我在 Windows 10 x64 机器上使用 RStudio,这是 version 的输出:

platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          5.1                         
year           2018                        
month          07                          
day            02                          
svn rev        74947                       
language       R                           
version.string R version 3.5.1 (2018-07-02)
nickname       Feather Spray

【问题讨论】:

  • 如果没有在reproducible format 中看到您的数据,很难确定,但我猜这是数据类型问题。您可能将日期编码为因子,然后无法正确拆分日期时间轴
  • 尝试在将stringsAsFactors 设置为FALSE 的情况下读取您的数据,例如read.csv("pcpcen.csv", sep = ",", stringsAsFactors = FALSE)。这样做对我来说看起来很正常。

标签: r ggplot2


【解决方案1】:

datetime 设置为日期,和/或在导入数据时不要对因子进行不必要的设置。

library(ggplot2)
pcpcen <- read.csv("df.txt", sep = ",", stringsAsFactors = FALSE)
pcpcen$datetime <- as.Date(pcpcen$datetime, "%Y-%m-%d")
str(pcpcen)
ggplot(pcpcen) + geom_area(aes(x=datetime, y=p_gen, color = type, fill = type), position = "stack") + scale_x_date(labels = date_format("%Y-%m-%d"))
ggplot(pcpcen) + geom_area(aes(x=week, y=p_gen, fill = type))

【讨论】:

  • 效果很好。我必须使用 as_datetime() 函数来获得每小时分辨率,但我可以用 datetime 对象解决问题。
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2020-07-31
  • 2014-08-12
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多