我正在尝试绘制一条带有几条曲线的情节。 x轴不是数值,而是字符串。
这很好用(例如在how to plot all the columns of a data frame in R中):
require(ggplot2)
df_ok <- rbind(data.frame(x=4:1,y=rnorm(4),d="d1"),data.frame(x=3:1,y=rnorm(3),d="d2"))
ggplot(df_ok, aes(x,y)) + geom_line(aes(colour=d))
但我的数据看起来像这样:
require(ggplot2)
df_nok <- rbind(data.frame(x=c("four","three","two","one"),y=rnorm(4),d="d1"),data.frame(x=c("three","two","one"),y=rnorm(3),d="d2"))
ggplot(df_nok, aes(x,y)) + geom_line(aes(colour=d))
我收到错误 geom_path:每个组只包含一个观察。你需要调整群体审美吗?。 即使未显示图形线,也会绘制轴,并且x轴包含正确的标签 - 但也包含错误的顺序。
任何想法如何尽可能简单地绘制? (另请注意某些系列缺少的x值)。
答案 0 :(得分:19)
您的问题是x
变量是一个因素。因此,更改数据框并使x
成为双倍:
df = rbind(data.frame(x=4:1,y=rnorm(4),d="d1"),
data.frame(x=3:1,y=rnorm(3),d="d2"))
正常情节
g = ggplot(df, aes(x,y)) + geom_line(aes(colour=d))
但明确改变x轴缩放:
g + scale_x_continuous(breaks=1:4, labels=c("one", "two", "three", "four"))
要重命名变量,请尝试以下操作:
x1 = factor(df_nok$x,
levels=c("one", "two", "three", "four"),
labels=1:4)
df$x1 = as.numeric(x1)
答案 1 :(得分:6)
您可以通过添加虚拟组来说服ggplot绘制线条
ggplot(df_nok, aes(x,y)) + geom_line(aes(colour=d, group=d))
另见http://kohske.wordpress.com/2010/12/27/faq-geom_line-doesnt-draw-lines/
答案 2 :(得分:3)
添加group
美学(我知道这种冗余,但比重新标记轴标签简单得多)。
df_nok <- rbind(data.frame(x=c("four","three","two","one"),y=rnorm(4),d="d1"),data.frame(x=c("three","two","one"),y=rnorm(3),d="d2"))
ggplot(df_nok, aes(x,y, group=d)) + geom_line(aes(colour=d))
你的x轴确实可能不是你想要的顺序。正如@csgillespie所指出的,你可以通过将其变成一个因子
来解决这个问题df_nok$x <- factor(df_nok$x,
levels=c("one", "two", "three", "four"),
labels=1:4)