0

我有一个包含几列的数据框。

这是我的数据框中的摘录:

    emp_dayNumber emp_dayName emp_workedDays emp_fullPrice emp_halfFare emp_monthly emp_yearly
1               1         mon           TRUE          23.7       117.20      117.66    1058.84
2               2         tue           TRUE          47.4       129.05      117.66    1058.84
3               3         wed           TRUE          71.1       140.90      117.66    1058.84

我使用 ggplot2绘制变量emp_fullPriceemp_halfFare和。为了显示标签,我在网上搜索并找到了有关库ggrepel的推荐。它似乎有效,但仅适用于我情节上的第一个 geom_line。emp_monthlyemp_yearly

我想发布一张图片,但我无法添加图片,因为我的声誉很低。所以取而代之的是一张糟糕的图画。

|
|
|                                  / 1209
|      ___________________________/  
|     /                          ____
|    /                 _________/
|   /__________       /
|  /           \_____/_______
| /                 /        \_______ 
|/_________________/_________________ 

如您所见,我设法获得了第一个值的标签(emp_fullPrice,所以 1209),但没有获得其他值的标签。

这是我的情节的代码:

p<- ggplot(emp.data, aes(emp_dayNumber, emp_fullPrice))+
  geom_line(colour=1, size=1.3)+
  geom_line(aes(y=emp_halfFare),colour=2, size=1.3)+
  geom_line(aes(y=emp_monthly),colour=3, size=1.3)+
  geom_line(aes(y=emp_yearly),colour=4, size=1.3)+

  #Label at the end of the line
  geom_text_repel(
    data = subset(emp.data, emp_dayNumber == 154),
    aes(label = emp_fullPrice),
    size = 4,
    nudge_x = 5);

print(p)

据我了解,它适用于 中显示的值ggplot(),但不适用于我添加的值geom_lines()

有没有人有办法解决吗?非常感谢你。

4

1 回答 1

-1

让您自己更轻松的第一步是更改数据的形状。

试试 ggplot 的制造者 Hadley Wickham 制作的“reshape2”包。

如果您在 data.frame 上应用“melt”函数,您最终会得到一个包含两列的 data.frame:一列用于值(data.frame 中的数字),另一列用于值的类型( data.frame 的列名)。

举个例子:

emp.data <- data.frame("emp_dayNumber" = 1:100,
                       "emp_monthly" = rnorm(100),
                       "emp_yearly" = rnorm(100),
                       "emp_WorkedDays" = sample(c(TRUE,FALSE), 100, replace = TRUE))
library(reshape2)

## Select the colums you want to plot:
select.data <- emp.data[ , 1:3]

## Change the data.frame to a long format, and state that you want to keep "emp_dayNumber" variable
## as a separate column (as you use it for the x-axis)
plot.data <- melt(emp.data, id.vars = "emp_dayNumber")

您的数据现在应该如下所示:

  emp_dayNumber    variable      value
1             1 emp_monthly  0.4231487
2             2 emp_monthly -1.0966351
3             3 emp_monthly  0.2761555
4             4 emp_monthly  0.8575178
5             5 emp_monthly -0.8528019
6             6 emp_monthly  0.4341048

现在绘制您的数据,其中“emp_dayNumber”应该是您的 x,“值”您的 y 和“可变”您的颜色

ggplot(toplot.data, aes(x = "emp_dayNumber", y = "value", color = "variable")) +
    geom_line()

尝试始终将其应用于所有绘图功能。这最终将为您节省大量时间。有关长格式和宽格式的更多说明,请参见: http: //www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/

使用它,您现在可以通过“mnm”或使用“ggrepel”应用评论中链接的帖子中所述的解决方案,因为您现在只使用一个 y 变量!

于 2019-05-03T12:50:49.300 回答