如何解决ggplot如何在R中垂直而不是水平“读取”数据
当前的数据框如下所示:
编辑:结构
library(data.table)
library(dplyr)
library(tibble)
如果是这样,我如何获得按月绘制每列值的折线图?
此外,我不确定如何在 ggplot aes() 位中选择多个区域。我尝试使用 c() 无济于事。任何帮助和新手友好的建议将不胜感激!
解决方法
您的问题有几个部分:
-
要立即解决您的错误,您需要向 geom_line() 函数添加 group = 1 参数
1a。这是因为 geom line 允许您绘制多个“组”的线,这些线彼此断开。在这种初始情况下,所有点都在同一组中,您希望通过线将它们全部连接起来。
-
要绘制多个组,您首先要以长格式定位数据,这将使您更轻松地使用 ggplot。为此,您需要包含如下一行:
tidyr::pivot_longer(data,-Date,values_to = "value_on_date",names_to = "region")
这将生成长格式的数据
然后您可以将代码更改为类似
df %>%
tidyr::pivot_longer(-Date,names_to = "region") %>%
ggplot( aes(Date,value_on_date)) +
geom_line(aes(group = region)) +
labs(x="Date",y="Value on date")
然后将显示 3 行,每个区域一行。
2a。该代码中值得注意的事情,请注意在 geom_line 中,该组现在位于 aes() 调用中,这是因为该组现在将随数据而变化,而不是常量,这是所有 ggplot 的通用结构。
2b。 ggplot 中的另一个原则是每行应该是 1 个观察值,以及所有相关的细节。对于您显示的数据,每行实际上是 3 位数据,每个区域一个,这不适用于 ggplot。
2c。然后,您可以通过将 color = region 之类的内容添加到 aes() 参数中来扩展它,以更清楚地显示哪个区域是哪个区域
希望这会有所帮助,正如 stefan
所说,包括一些有关如何进入会话状态的可重现的最小示例,以帮助任何希望回答您的问题的人。
问题在于您的 x 轴变量是字符或分类变量。在这种情况下,ggplot 默认使用此变量对数据进行分组,即每组只有一个观察值。在这种情况下,您必须告诉 ggplot 可以通过 group=1
完成的所需分组,这意味着 ggplot2 应将所有观察结果视为属于一个组,为简单起见,我们将其称为 1
。
要获得所有区域的线图,最好使用例如将数据重塑为长格式tidy::pivot_longer
为我们提供了两个新列,一个是类别或地区的名称,另一个是相应的值。重塑后,您可以使用 group=name
映射 y 上的值并按区域分组。
library(dplyr)
library(tidyr)
library(ggplot2)
df <- structure(list(Date = c("01-2019","02-2019","03-2019"),`North East` = c(
5.05625777763551,5.58119346747183,5.41295614949722
),London = c(
4.2102766429572,4.45850956493638,4.36960549219723
),`West Midlands` = c(
5.0708122696351,5.20425572086481,5.07463979478007
)),row.names = c(NA,3L),class = "data.frame")
df_long <- df %>%
pivot_longer(-Date)
ggplot(df_long,aes(Date,value,color = name,group = name)) +
geom_line() +
labs(x = "Date",y = "Region")
,
添加组美学将修复此错误。
在 ggplot 调用中将 group = 1
添加到您的 aes。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。