R 面对一个问题

R 面对一个问题,r,ggplot2,R,Ggplot2,我有一个非常简单的数据框架,如下所示 cat_group total abort_rate cancel_rate success_rate 100 1804 18.8 45.1 31.8 200 4118 17.7 30.0 48.3 500 14041 19.

我有一个非常简单的数据框架,如下所示

  cat_group     total    abort_rate          cancel_rate  success_rate
      100       1804       18.8                45.1         31.8
      200       4118       17.7                30.0         48.3
      500      14041       19.2                16.9         60.0
我试图将这些数据放在一个绘图上,这样在x轴上,我将有一个cat_组,然后我将线图所有其他变量总计、中止率、取消率和成功率。我的想法是展示每个变量如何根据cat_组中的值而变化。我总共需要四行,每个变量一行,颜色不同

但是当我在R中使用下面的plot函数时,我看到了错误:
geom_path:每组只包含一个观测值。您是否需要调整团队美学?

ggplot(my_data_frame, aes(category)) + 
  geom_line(aes(y = abort_rate, colour = "abort_rate")) + 
  geom_line(aes(y = success_rate, colour = "success_rate"))+
  geom_line(aes(y = success_rate, colour = "total"))+
  geom_line(aes(y = success_rate, colour = "cancel_rate"))

关于如何解决此问题有什么建议吗?

解决此问题的最佳方法是重新组合数据,以便一列表示x轴,一列表示y轴,另一列表示行中包含的数据类型。为此,您可以使用tidyr包

library(tidyr)
plottingData <- df %>% gather(type,value,-cat_group)

ggplot(plottingData,aes(x=cat_group,y=value,color=type)) + geom_line()
library(tidyr)
绘图数据%聚集(类型、值,-类别组)
ggplot(绘图数据,aes(x=cat_组,y=value,color=type))+geom_线()

解决此问题的最佳方法是重新组合数据,以便一列表示x轴,一列表示y轴,另一列表示行中包含的数据类型。为此,您可以使用tidyr包

library(tidyr)
plottingData <- df %>% gather(type,value,-cat_group)

ggplot(plottingData,aes(x=cat_group,y=value,color=type)) + geom_line()
library(tidyr)
绘图数据%聚集(类型、值,-类别组)
ggplot(绘图数据,aes(x=cat_组,y=value,color=type))+geom_线()

假设
cat_group
属于因子类型(这是我重现错误的唯一方法),您可以这样做:

my_data_frame$cat_group <- as.factor(my_data_frame$cat_group)

library(ggplot2)
ggplot(my_data_frame, aes(cat_group)) + 
  geom_line(aes(y = abort_rate, colour = "abort_rate", group=1)) + 
  geom_line(aes(y = success_rate, colour = "success_rate", group=1))+
  geom_line(aes(y = success_rate, colour = "total", group=1))+
  geom_line(aes(y = success_rate, colour = "cancel_rate", group=1))
library(reshape2)
dfm <- melt(my_data_frame, id.vars='cat_group')
ggplot(dfm, aes(x=cat_group, y=value, colour=variable, group=variable)) + geom_line() +
  scale_y_log10()
注意
scale_y_log10
以绘制(并实际查看)所有4条线。您可能需要一个对数刻度,因为否则您只能看到非常大的总数,并且每隔一行将重叠


假设
cat_group
属于因子类型(这是我重现错误的唯一方法),您可以这样做:

my_data_frame$cat_group <- as.factor(my_data_frame$cat_group)

library(ggplot2)
ggplot(my_data_frame, aes(cat_group)) + 
  geom_line(aes(y = abort_rate, colour = "abort_rate", group=1)) + 
  geom_line(aes(y = success_rate, colour = "success_rate", group=1))+
  geom_line(aes(y = success_rate, colour = "total", group=1))+
  geom_line(aes(y = success_rate, colour = "cancel_rate", group=1))
library(reshape2)
dfm <- melt(my_data_frame, id.vars='cat_group')
ggplot(dfm, aes(x=cat_group, y=value, colour=variable, group=variable)) + geom_line() +
  scale_y_log10()
注意
scale_y_log10
以绘制(并实际查看)所有4条线。您可能需要一个对数刻度,因为否则您只能看到非常大的总数,并且每隔一行将重叠


一个简单的方法是使用
autoplot.zoo

library(ggplot2)
library(zoo)

z <- read.zoo(my_df)
autoplot(z, facet = NULL) + scale_y_log10()
(图后续)

注:以下是可复制形式的输入数据:

Lines <- "cat_group     total    abort_rate          cancel_rate  success_rate
      100       1804       18.8                45.1         31.8
      200       4118       17.7                30.0         48.3
      500      14041       19.2                16.9         60.0"
my_df <- read.table(text = Lines, header = TRUE)

行一个简单的方法是使用
autoplot.zoo

library(ggplot2)
library(zoo)

z <- read.zoo(my_df)
autoplot(z, facet = NULL) + scale_y_log10()
(图后续)

注:以下是可复制形式的输入数据:

Lines <- "cat_group     total    abort_rate          cancel_rate  success_rate
      100       1804       18.8                45.1         31.8
      200       4118       17.7                30.0         48.3
      500      14041       19.2                16.9         60.0"
my_df <- read.table(text = Lines, header = TRUE)

行在data.frame中没有
类别
列。请修理。您应该
melt
从宽格式切换到长格式。data.frame中没有
category
列。请修理。您应该
melt
从宽格式切换到长格式。感谢及时的响应谢谢及时的响应这就是我使用的答案。早些时候,我错误地将上面的一个标记为答案。道歉!没问题:)另一个被高估的答案也是一个好答案。很高兴我能帮上忙:)这是我用过的答案。早些时候,我错误地将上面的一个标记为答案。道歉!没问题:)另一个被高估的答案也是一个好答案。很高兴我能帮上忙:)