我试图添加一个geom_line到这个情节,但没有运气。
geom_line
如果x轴不是分类类型(chr),这可能会起作用。我试了一下,没有效果:geom_line(aes(y=nettoforandring_mellan_ar_1_och_2, group=arsintervall))其中nettoforandring_mellan_ar_1_och_2是我的列。每个分类yr的堆叠条的netto,arsintervall是分类x轴。
geom_line(aes(y=nettoforandring_mellan_ar_1_och_2, group=arsintervall))
nettoforandring_mellan_ar_1_och_2
arsintervall
-〉任何想法?
谢谢!
sy5wg1nm1#
OP,请在将来添加一个可再现的示例(* 数据和完整的代码本身就可以生成一个示例图来展示你的问题 *)。然而,核心问题涉及在分类(离散)x轴上添加geom_line()。
geom_line()
我可以使用mtcars重新创建相同类型的问题:
mtcars
library(ggplot2) p <- ggplot(mtcars, aes(x=factor(gear), y=wt)) + geom_col(aes(fill=factor(cyl)))
由于分类(离散)轴没有“连接”,ggplot2默认情况下不会在x轴上的值之间绘制一条线。它将绘制的任何直线视为仅通过y值连接。因此,只有在执行以下操作时才能获得垂直线:
ggplot2
p + geom_line(linewidth=0.8)
要跨x轴值连接,您必须通过告诉ggplot2将所有点放入同一组来“强制”连接。通过Mapgroup=1或group=来实现这一点。
group=1
group=
p + geom_line(aes(group=1), linewidth=0.8)
虽然这里没有必要,但如果您只想用平均值之类的值绘制一条线(通常是在堆叠条形图上绘制一条线),您可以使用stat_summary(geom="line")并应用相同的逻辑。下面的代码生成一条线,它只连接y值点,这些点是每个x位置的平均值。
stat_summary(geom="line")
p + stat_summary( aes(group="big scary monster"), # see how group can equal anything here? geom="line", linewidth=0.8)
1条答案
按热度按时间sy5wg1nm1#
OP,请在将来添加一个可再现的示例(* 数据和完整的代码本身就可以生成一个示例图来展示你的问题 *)。然而,核心问题涉及在分类(离散)x轴上添加
geom_line()
。可复制示例
我可以使用
mtcars
重新创建相同类型的问题:解决方案
由于分类(离散)轴没有“连接”,
ggplot2
默认情况下不会在x轴上的值之间绘制一条线。它将绘制的任何直线视为仅通过y值连接。因此,只有在执行以下操作时才能获得垂直线:要跨x轴值连接,您必须通过告诉
ggplot2
将所有点放入同一组来“强制”连接。通过Mapgroup=1
或group=
来实现这一点。虽然这里没有必要,但如果您只想用平均值之类的值绘制一条线(通常是在堆叠条形图上绘制一条线),您可以使用
stat_summary(geom="line")
并应用相同的逻辑。下面的代码生成一条线,它只连接y值点,这些点是每个x位置的平均值。