繁体   English   中英

ggplot x轴中的字符串

[英]Strings in ggplot x-axis

我正在尝试在R中创建一个图形,如下所示: 在此处输入图片说明

我有三列(在线,离线和路线)。 但是,当我添加以下代码时:

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 ...

路线:char,在线和离线:num

有人可以帮我在R的x轴上放置字符串吗? 谢谢!

在没有样本数据的情况下,以下一些玩具数据与您的玩具具有相同的结构:

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复制示例图,您需要使用长格式的数据,以便可以离线/在线分组。 在此处查看更多信息: 使用ggplot2http://ggplot2.tidyverse.org/reference/aes.html 从数据框中绘制多行

您可以使用许多不同的功能或程序包很容易地将数据重新排列为长格式,但是一种标准方法是使用tidyr gather ,并将您的系列onlineoffline分组为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变量视为离散变量。

其次,我的怀疑是,在传达您要在此处传达的内容时,折线图可能不如几何图形有效。 我可能会使用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()

有两种方法:

  • 以宽格式绘制数据(快速且肮脏,不建议使用)
  • 从宽格式重整为长格式后绘制数据(如dshkol所示,但使用不同的方法。

以宽格式绘制数据

# 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值离散的情况下属于一个系列的数据点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM