如何添加图例以标识ggplot中的垂直线?

考德

我有一个图表,显示了操作系统的移动使用情况。我想添加垂直线以标识这些操作系统的发布时间。我将仔细检查图表,然后再检查代码。

图表 -

在此处输入图片说明

编码 -

  dev %>% 
  group_by(os) %>% 
  mutate(monthly_change = prop - lag(prop)) %>% 
  ggplot(aes(month, monthly_change, color = os)) +
  geom_line() +
  geom_vline(xintercept = as.numeric(ymd("2013-10-01"))) +
  geom_text(label = "KitKat", x = as.numeric(ymd("2013-10-01")) + 80, y = -.5)

我不想创建图例中的文本,而是创建一个图例来标识每条线。我想给他们每个人自己的颜色,然后有一个图例来标识每个人。像这样-

在此处输入图片说明

我可以这样制作自己的自定义图例吗?

克里斯托弗·达德利

您当然可以创建自己的自定义图例,但这有点复杂,因此我将逐步介绍一些虚假数据。

伪数据包含来自正态分布的100个样本(monthly_change针对您的数据),5个分组(类似于os数据中变量)以及从随机起点开始的日期序列。

library(tidyverse)
library(lubridate)

y <- rnorm(100)

df <- tibble(y) %>% 
        mutate(os = factor(rep_len(1:5, 100)),
               date = seq(from = ymd('2013-01-01'), by = 1, length.out = 100))

您已经使用colouraes拨打电话了geom_line,因此您需要选择其他aes才能映射到的呼叫geom_vline在这里,我使用linetype和调用来scale_linetype_manual根据需要手动编辑线型图例。

ggplot(df, aes(x = date, y = y, colour = os)) +
  geom_line() +
  # set `xintercept` to your date and `linetype` to the name of the os which starts 
  # at that date in your `aes` call; set colour outside of the `aes`
  geom_vline(aes(xintercept = min(date), 
                 linetype = 'os 1'), colour = 'red') +
  geom_vline(aes(xintercept = median(date), 
                 linetype = 'os 2'), colour = 'blue') +
  # in the call to `scale_linetype_manual`, `name` will be the legend title;
  # set `values` to 1 for each os to force a solid vertical line;
  # use `guide_legend` and `override.aes` to change the colour of the lines in the 
  # legend to match the colours in the calls to `geom_vline`
  scale_linetype_manual(name = 'lines',
                        values = c('os 1' = 1,
                                   'os 2' = 1),
                        guide = guide_legend(override.aes = list(colour = c('red',
                                                                         'blue'))))

在此处输入图片说明

然后,您可以得到一个不错的自定义图例。下次请记住,如果您可以提供数据,或者提供一个可重复的示例,那么我们可以更好地回答您的问题,而不必生成伪造的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

matplotlib中带有垂直线的图例

如何在ggplot中为垂直线添加图例?

如何在ggplot2中为带有图例的垂直线添加标签

调整ggplot中垂直线标签的位置?

ggplot2构面中的单个垂直线

如何在JupyterLab中的CodeMirror编辑器中添加标尺(垂直线)?

删除图例中由ggplot中的geom_vline引起的垂直线

ggplot-添加垂直线

如何在holoviews + bokeh中获得带有图例标签的全高垂直线?

在python中用图例绘制垂直线

如何在垂直线绘制的地方添加垂直线?[单个图中的多个分布]

在ggplot中绘制两组多条垂直线

如何使用ggplot2在R中的散射极坐标图中获得垂直线

如何在单个ggplot2中对齐图层(密度图和垂直线)

在ggplot点图中为垂直线添加第二个图例

我如何知道在ggplot中使用相同颜色添加垂直线的颜色的代码?

无法在抖动中添加垂直线

用刻面在ggplot中绘制垂直线

如何使用带有时间序列数据的ggplot为graf添加垂直垂直线?

如何在ggplot直方图中添加代表特定观察值的垂直线

如何在曲线框html和css中添加垂直线分割和图例?

如何摆脱Geany中的垂直线

如何隐藏垂直线

如何使用ggplot2为geom_pointrange()类型的图形获取图例键中的垂直线

如何使用HighStocks或HighCharts在图表中添加垂直线?

如何在格子面板中添加多条垂直线?

在ggplot图例中旋转垂直线

如何向图例添加垂直线,通过 plotly python 中的 add_vline 方法创建

在 R ggplot2 中,如何自动绘制垂直线