fab*_*abb 16 plot r ggplot2 dataframe
我正在尝试绘制一条带有几条曲线的图.x轴不是数值,而是字符串.
这很好用(比如如何在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))
Run Code Online (Sandbox Code Playgroud)
但我的数据看起来像这样:
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))
Run Code Online (Sandbox Code Playgroud)
我得到错误geom_path:每组只包含一个观察.你需要调整群体美感吗?.即使没有出现图形线,也会绘制轴,并且x轴包含正确的标签 - 但也是错误的顺序.
知道如何尽可能简单地绘制这个吗?(另请注意某些系列的缺失x值).
csg*_*pie 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"))
Run Code Online (Sandbox Code Playgroud)
情节正常
g = ggplot(df, aes(x,y)) + geom_line(aes(colour=d))
Run Code Online (Sandbox Code Playgroud)
但明确改变x轴缩放:
g + scale_x_continuous(breaks=1:4, labels=c("one", "two", "three", "four"))
Run Code Online (Sandbox Code Playgroud)
要重命名变量,请尝试以下操作:
x1 = factor(df_nok$x,
levels=c("one", "two", "three", "four"),
labels=1:4)
df$x1 = as.numeric(x1)
Run Code Online (Sandbox Code Playgroud)
您可以通过添加虚拟组来说服ggplot绘制线条,
ggplot(df_nok, aes(x,y)) + geom_line(aes(colour=d, group=d))
Run Code Online (Sandbox Code Playgroud)
另见http://kohske.wordpress.com/2010/12/27/faq-geom_line-doesnt-draw-lines/