我有三列(在线,离线和路线)。但是,当我添加以下代码时:
library(ggplot2)
ggplot(coefroute, aes(routes,offline)) + geom_line()
我收到以下消息:
geom_path:每组只包含一个观察。你需要调整群体审美吗?
coefroute的样本:
routes online offline
(Intercept) 210.4372 257.215
route10 7.543 30.0182
route100 18.3794 1.5313
route11 38.6537 78.8655
route12 66.501 94.8838
route13 -22.2391 -25.8448
route14 24.3652 177.7728
route15 48.5464 51.126 ...
routes:char,online and offline:num
任何人都可以帮我把字符串放在R轴的x轴上吗? 谢谢!
答案 0 :(得分:1)
在没有样本数据的情况下,这里有一些与你的结构相同的玩具数据:
coefroute <- data.frame(routes = c("A","B","C","D","E"),
online = c(21,26,30,15,20),
offline = c(15,20,7,12,15))
要在ggplot2
中复制示例图表,您需要长格式的数据,以便您可以离线/在线进行分组。点击此处了解详情:Plotting multiple lines from a data frame with ggplot2和http://ggplot2.tidyverse.org/reference/aes.html。
您可以使用许多不同的功能或包很容易地将数据重新排列为长格式,但标准方法是使用gather
中的tidyr
并将您的系列分组为online
并offline
进入称为status
或任何你想要的东西。
library(tidyr)
coefroute <- gather(coefroute, key = status, value = coef, online:offline)
然后你可以在ggplot中轻松地绘制这个:
library(ggplot2)
ggplot(coefroute, aes(x = routes, y = coef, group = status, colour = status))
+ geom_line() + scale_x_discrete()
这应该创建类似于示例图的内容。您可能想要修改颜色,标题等。有很多关于这些东西的文档很容易找到。我在这里添加了scale_x_discrete()
,以便ggplot知道将x变量视为离散变量。
其次,我的怀疑是,在传达你在这里尝试沟通的内容时,线条图可能不如geoms有效。我可能会使用geom_bar(stat = "identity", position = "dodge")
代替geom_line
。这将为每个系数创建一个垂直条形图,并排显示离线和在线系数。
ggplot(coefroute, aes(x = routes, y = coef, group = status, fill = status))
+ geom_bar(stat = "identity", position = "dodge") + scale_x_discrete()
答案 1 :(得分:1)
有两种方法:
# using dshkol's toy data
coefroute <- data.frame(routes = c("A","B","C","D","E"),
online = c(21,26,30,15,20),
offline = c(15,20,7,12,15))
library(ggplot2)
# plotting data in wide format (not recommended)
ggplot(coefroute, aes(x = routes, group = 1L)) +
geom_line(aes(y = online), colour = "blue") +
geom_line(aes(y = offline), colour = "orange")
这种方法有几个缺点。每个变量都需要自己调用geom_line()
,并且没有图例。
对于重新整形,使用的melt()
可以从reshape2
包(tidyr
/ dplyr
包的前身)或更快的实施形式中获得data.table
包。
ggplot(data.table::melt(coefroute, id.var = "routes"),
aes(x = routes, y = value, group = variable, colour = variable)) +
geom_line()
请注意,在这两种情况下都必须指定group
美学,因为x轴是离散的。这告诉ggplot考虑属于一个系列的数据点,尽管有离散的x值。