Я пытаюсь наложить два набора данных, которые можно использовать в гистограммах. Первый — это основной набор данных, и я хочу, чтобы он был в центре внимания. Для второго набора данных мне нужна только линия, обозначающая, где она будет на диаграмме. Я могу приблизиться к тому, что хочу, сделав это:
Tbl = data.frame(Factor = c("a","b","c","d"),
Percent = c(43,77,37,55))
Tbl2 = data.frame(Factor = c("a","b","c","d"),
Percent = c(58,68,47,63))
ggplot(aes(x = Factor, y = Percent), data = Tbl) +
geom_bar(position = "stack", stat = "identity", fill = "blue") +
ylim(0,100) +
geom_bar(aes(x = Factor, y = Percent), data = Tbl2,
position = "stack", stat = "identity", fill = NA, color = "black") +
theme_bw()
Что у меня есть на данный момент
Я считаю, что могу добиться того, чего хочу, используя geom_vline, если есть способ разделить его по группам. Другой вариант, который я придумал, заключается в том, можно ли изменить цвета «сторон» столбцов в наложении на белый, сохраняя при этом «верх» каждой гистограммы черным.
Идея того, что я хочу (отредактировано в Paint)
Хорошо, это хорошая идея. Никогда так не думал. Спасибо . Теперь иди и отметь как дубликат. не могу найти сайт!
также по теме: stackoverflow.com/questions/30158225/…
Вы можете использовать geom_errorbar
, где ymin и ymax являются одинаковыми значениями, например:
library(ggplot2)
ggplot(aes(x = Factor, y = Percent), data = Tbl) +
geom_bar(position = "stack", stat = "identity", fill = "blue") +
ylim(0,100) +
geom_errorbar(aes(x = Factor, ymin = Percent, ymax = Percent), data = Tbl2,
stat = "identity", color = "black") +
theme_bw()
Created on 2022-12-28 with reprex v2.0.2
Другой вариант — geom_point
с shape = 95
(линия) и размером, подогнанным под размер:
library(tidyverse)
Tbl = data.frame(Factor = c("a","b","c","d"),
Percent = c(43,77,37,55))
Tbl2 = data.frame(Factor = c("a","b","c","d"),
Percent = c(58,68,47,63))
ggplot(aes(x = Factor, y = Percent), data = Tbl) +
geom_bar(position = "stack", stat = "identity", fill = "blue") +
ylim(0,100) +
geom_point(aes(x = Factor, y = Percent), data = Tbl2,
position = "stack", stat = "identity", color = "black", shape = 95, size = 30) +
theme_bw()
Created on 2022-12-28 with reprex v2.0.2
Вот еще один с использованием geom_segment()
. Кто-то сказал бы, чтобы пофантазировать, но все же:
Для этого мы должны расширить Tbl2
:
library(ggplot2)
library(dplyr)
ggplot(aes(x = Factor, y = Percent), data = Tbl) +
geom_bar(position = "stack", stat = "identity", fill = "blue") +
ylim(0,100) +
geom_segment(data = Tbl2 %>%
mutate(x = c(0.55, 1.55, 2.55, 3.55),
xend = x+0.9), aes(x=x,xend=xend, y = Percent, yend=Percent), size=2)+
theme_bw()
используя сегменты, в этих случаях я предпочитаю и рекомендую использовать константу (например, w), которая одновременно определяет ширину ваших столбцов и сегмента. В этом случае ширина полосы по умолчанию равна 0,9. Я бы определил w<-0,45 (и ширина полосы = 2*w). сегмент должен начинаться в (1:4)-w и заканчиваться в (1:4)+w
из небольших предложений по улучшению ваш вектор для x может быть создан просто с помощью .55:3.55
Это очень хорошая идея. А теперь вы можете себе представить, как мне было утомительно располагать линии в правильном положении. Это были просто пробы и ошибки. Поэтому я думаю, что вы должны опубликовать свою идею в качестве ответа!
Спасибо. но я не думаю, что это заслуживает собственного ответа. - если хотите, можете интегрировать в свой ответ или оставить мой комментарий как таковой
@tjebo. извините за повторное открытие. Но я хотел опубликовать свое решение, я очень долго над ним работал. В принципе я согласен, если вы отметите как дубликат. :-)