R将geom_linerange()与手动图例结合起来

时间:2017-03-07 15:10:38

标签: r plot ggplot2 legend geom-text

我正在尝试手动组合ggplot2 :: geom_pointrange()绘图与通过ggplot2 :: geom_linerange()实现的条形图和基于ggplot2 :: geom_text()的图例。最后,我希望有一个没有任何标签的情节和条形图。很抱歉这个问题很长,但我看不到进一步缩短的问题。

enter image description here

这是我到目前为止尝试过的代码

library(dplyr)
library(ggplot2)

data(mpg)

# calculate average fuel consumption based on arbitrary assumption of equal
# city/highway share
mpg <- mutate(mpg, avg = (cty + hwy)/2)

# compute quantils
mpg_by_class <- group_by(mpg, class) %>%
  summarise(q10 = quantile(avg, 0.1),
            q90 = quantile(avg, 0.9),
            med = median(avg))

# compute some cross-class values
mpg_median <- median(mpg$avg)

# plotting ----
# base plot
the_plot <- ggplot() +
  geom_pointrange(data = mpg_by_class,
                  aes(x = class, ymin = q10, ymax = q90, y = med)) +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

# add a bar on the right
the_plot <- the_plot +
  # build the bar
  geom_linerange(aes(x = "Y",
                     ymin = min(mpg_by_class$q10),
                     ymax = mpg_median), size = 5, colour = "green",
                 show.legend = FALSE) +
  geom_linerange(aes(x = "Y",
                     ymin = mpg_median,
                     ymax = max(mpg_by_class$q90), size = 5, colour = "red"),
                 show.legend = FALSE) +
  labs(x = "", y = "mpg") +
  # # add labels
  geom_text(aes(x = "Z", y = mean(c(min(mpg_by_class$q10), mpg_median)),
                label = "shitty"), hjust = 0) +
  geom_text(aes(x = "Z", y = mean(c(max(mpg_by_class$q90), mpg_median)),
                label = "less shitty"), hjust = 0)


print(the_plot)

“类”可能随数据而变化,右侧彩色条中不同元素的数量也会随之变化。

这里实际上有两个问题:

  • 彩色条位于图的最右侧 仅仅是因为我进入了“Y”作为x美学 geom_linerange()(和图例中的“Z”)。如果有空值 然后酒吧将被放置在其他地方,一般在远处 剩下。没有简单的方法来组合点范围的数据 和barplot,因为子类的类和数量是基于 关于手头的具体数据(我正在为100多个地块做这个)。是 有办法真正确保酒吧在右侧, 不管x-Axis上的实际类?
  • 或者,也可以将图例添加到相同的“类”中 条形图并使用nudge_x参数移动了一点 geom_text(),但我发现没有办法保持ggplot不受影响 切割画布外的文本的右边部分?任何 解决方案仍然依赖于左侧的栏杆 添加“Z”作为类别。可以制作一个x轴标签 无形?

0 个答案:

没有答案