ggplot与x轴上的字符串

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)


bap*_*ste 7

您可以通过添加虚拟组来说服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/