正确对齐直接标签与ggplot2

时间:2016-09-04 08:25:13

标签: r ggplot2

我绝对是directlabel + ggplot2套餐的新手。所以,我很感激任何帮助。我想正确地调整线条图的标签 - 我花了好几个小时试图学习directlabel,我想在SO的帮助下我可以做到这一点。

这是我的数据:

structure(list(Rio.Olympics.Sports.Participating.Team = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("American Gymnastics", 
"American Swimmers", "Boxing", "European Gymnastics", "Running"
), class = "factor"), Calendar.Quarter = structure(c(16071, 16161, 
16252, 16344, 16436, 16526, 16617, 16709, 16801, 16892, 16983, 
17075, 16071, 16161, 16252, 16344, 16436, 16526, 16617, 16709, 
16801, 16892, 16983, 17075, 16071, 16161, 16252, 16344, 16436, 
16526, 16617, 16709, 16801, 16892, 16983, 17075, 16071, 16161, 
16252, 16344, 16436, 16526, 16617, 16709, 16801, 16892, 16983, 
17075, 16071, 16161, 16252, 16344, 16436, 16526, 16617, 16709, 
16801, 16892, 16983, 17075), class = "Date"), Randomized.Viewers = c(49, 
45, 51, 55, 47, 48, 54, 57, 53, 50, 52, 58, 32, 29, 33, 40, 34, 
36, 31, 39, 37, 30, 35, 41, 5, 1, 25, 46, 38, 4, 56, 27, 21, 
43, 42, 44, 2, 59, 3, 10, 60, 7, 14, 24, 13, 16, 17, 28, 15, 
6, 19, 23, 11, 12, 20, 22, 9, 8, 18, 26)), .Names = c("Rio.Olympics.Sports.Participating.Team", 
"Calendar.Quarter", "Randomized.Viewers"), row.names = c(NA, 
-60L), class = "data.frame")

现在,我编写了以下代码来绘制一个简单的线图:

d<-ggplot(data = p, aes(x=Calendar.Quarter,y=Randomized.Viewers)) +
       geom_line(aes(color = Rio.Olympics.Sports.Participating.Team))  +
       scale_color_manual(name = "Sports Type",values = c("blue", "gray51","gray51","gray51","gray51"),guide = FALSE)
 direct.label(d, list('last.qp', cex=.75,dl.trans(x=x-3)))

我使用了maxvar.qp http://directlabels.r-forge.r-project.org/docs/

的以下参考指南

此图表的输出为:enter image description here

我们可以看到所有的点都向左移动了。虽然排名前三的线似乎还可以,但“跑步”和“拳击”已经移动了很多。

我有两个问题:

a)无论如何,我可以在线图顶部和线图的末尾放置标签,尤其是“跑步”和“拳击”?我读了这篇帖子Labelling points with ggplot2 and directlabels,但我不太确定发生了什么 - 我是R的初学者,已经开始使用R只有2-3周了。我的假设是海报用于循环,但我的实际数据中有太多行,我想远离循环。我正在寻找矢量化操作,如果可能的话。

b)从这个线程How to use custom names for labels with ggplot2 + directlabels开始,DirectLabels包似乎从表的列名中获取值。无论如何我可以修改标签名称吗? ggplot2为此提供了API。但是,我不确定directlabels是否也有这样的API。如果没有,我会在调用colnames函数之前使用directlabel覆盖列名。我对此表示感谢。

PS:我问两个问题,因为我坚信他们与相同的数据和问题有关。在过去,我因为在同一数据集上创建多个问题而受到批评。所以,我在这里使用了我最好的判断。

1 个答案:

答案 0 :(得分:2)

  

a)无论如何,我可以将标签放在行图的顶部上,然后朝   linegraph [...]的结尾

例如,

direct.label(d, list('last.qp', cex=.75, hjust = 1, vjust = 0))

给你

enter image description here

  

b)[...]无论如何,我可以修改标签名称吗?

例如

d + geom_dl(
  aes(label = letters[1:5][p[,1]]), 
  method = list('last.qp', cex=.75, hjust = 1, vjust = 0)
)

给你

enter image description here

映射是

cbind(levels(p[,1]), letters[1:5])
#      [,1]                  [,2]
# [1,] "American Gymnastics" "a" 
# [2,] "American Swimmers"   "b" 
# [3,] "Boxing"              "c" 
# [4,] "European Gymnastics" "d" 
# [5,] "Running"             "e" 

您可以根据需要进行调整。