Есть ли простой способ наклейки отдельных «блоков» в «сложной» гистограмме, такой как следующее. Я бы хотел, чтобы метки располагались ближе к верхней части каждого блока, но мой последний подход приводит к тому, что они каким-то образом заменяют тексты для США и Мексики, как показано ниже.Маркировка отдельных баров в уложенной гистограмме ggplot
Оглядевшись для решения, я только нашел подходы, при котором значение y
текста должно быть предварительно вычисленным извне, которые, помимо дополнительной логики, приносят проблемы управления им порядок, в котором блоки уложены ...
Я также нашел эту stackoverflow question где я получил идею использования geom="text"
в stat_bin
(см код ниже)
Вот урезана фрагмент кода для иллюстрации моего нынешнего подхода. Я не обязательно пытаюсь исправить этот фрагмент, любая общая идиома для ярлыков, которые будут отображаться в столбчатых диаграммах!
Edit: (с учетом двух ответа на этот вопрос получил до сих пор)
Я хотел бы подчеркнуть, что я бы предпочел решения, которые не подразумевают предварительного вычисления у-положение текста ,
# sample data source
df.StackData <- data.frame(
QType = c("A4-1", "A4-1", "A4-1", "B3", "B3", "B3"),
Country = c("Canada", "USA", "Mexico", "Canada", "USA", "Mexico"),
NbOfCases = c(1000, 1320, 380, 400, 1000, 812),
AvgRate = c(17.2, 11.4, 44.21, 17.3, 15.3, 39.7),
Comment = c("Can", "US", "Mex", "Can", "US", "Mex")
)
и вызов ggplot. Он выдает график, показанный выше, с нечетным свопом этикеток (а также дополнительной легендой), хотя эту проблему с легендой легко позаботиться, я только отметил это при подготовке этого вопроса).
ggplot(data=df.StackData,
aes(x=QType, y=NbOfCases, fill=Country))+
geom_bar(stat="identity", width=1) +
stat_bin(geom="text", aes(label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")"),
vjust=1.5, size=3
)
)
Мои первоначальные попытки добавили geom_text() на графике как следуем, но, конечно, значение у было неправильно (шнуровка текстов по отношению к самой нижней части графика, а не, что к нижней части отдельных блоков) ...
... +
geom_text(mapping=aes(x=QType, y=NbOfCases,
label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")"),
vjust=1.5),
size=3)
Спасибо, Арун, я стараюсь держаться подальше от всех решений, которые предполагают предварительное вычисление позиции у и подачи его к geom_text, но оказывается, что не может быть возможными. .. Знаете ли вы о других идиомах, которые не требуют предварительных вычислений? – mjv
Просто выполните свое первое решение после этого: 'df.StackData $ Страна <- factor (df.StackData $ Страна, levels = c (" Канада "," США "," Мексика "), заказывается = ИСТИНА)' – Arun
Бинго кто это сделал. Я остался с удалением нежелательной легенды, но это должно быть легко. Спасибо! – mjv