gpt4 book ai didi

r - 如何使用 ggplot 填充 geom_area() 图?

转载 作者:行者123 更新时间:2023-12-02 23:42:25 33 4
gpt4 key购买 nike

我有一个 geom_area 图,如下所示:area plot

我想将 x 轴以上的所有内容着色为绿色,将 x 轴以下的所有内容着色为红色。我的数据中有一个类别列,其中包含所有正值的字符串“正”和所有负值的“负”,因此我尝试简单地执行 fill = Category 并使用scale_fill_manual 将正设置为绿色,将负设置为红色,但是这给了我这个: colored area plot

x 上方的绿色看起来正确,但轴下方的红色不正确。我检查了我的数据,没有出现 10 月 20 日之后呈红色的负数据点,并且使用 geom_point 代替我得到了正确的颜色。

这是我的数据示例:

created                 score   category
2011-10-19 21:26:19 2 positive
2011-10-19 22:50:33 -2 negative
2011-10-20 15:12:38 -2 negative
2011-10-20 17:19:24 -2 negative
2011-10-20 22:12:44 2 positive
2011-10-20 22:16:57 4 positive
2011-10-21 08:22:53 2 positive

这是我用来绘制绘图的代码:

ggplot(data = df, aes(x = 创建, y = 分数, color = 类别)) + geom_point(aes(fill = 类别)) + scale_fill_manual(values = c("正"= "绿色", "负"= "红色"))

我的问题可能与 this previous question 有关.

最佳答案

您需要为每个正/负分段创建一个新的分组变量。为了使过渡不那么“ block 状”,您可以首先插入数据:

require(ggplot2)

# Load data
df = read.table('data.txt', header=T)
df$created = as.POSIXct(df$created, tz='UTC')

# Interpolate data
lin_interp = function(x, y, length.out=100) {
approx(x, y, xout=seq(min(x), max(x), length.out=length.out))$y
}
created.interp = lin_interp(df$created, df$created)
created.interp = as.POSIXct(created.interp, origin='1970-01-01', tz='UTC')
score.interp = lin_interp(df$created, df$score)
df.interp = data.frame(created=created.interp, score=score.interp)

# Make a grouping variable for each pos/neg segment
cat.rle = rle(df.interp$score < 0)
df.interp$group = rep.int(1:length(cat.rle$lengths), times=cat.rle$lengths)

# Plot
dev.new(width=6, height=4)
ggplot(data = df.interp, aes(x = created, y = score, fill=score>0, group=group)) + geom_area() + scale_fill_manual(values = c('green', 'red'))

enter image description here

关于r - 如何使用 ggplot 填充 geom_area() 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883154/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com