ggplot — как вручную настроить маркировку

Мне удалось построить «Продукты, совместно разработанные в определенных регионах мира» с помощью ggplot. Я хотел бы использовать количество (не проценты) в качестве меток. Это работает хорошо, однако столбцы для некоторых регионов становятся настолько крошечными, что невозможно прочитать числа (см. правую нижнюю часть графика). Я бы хотел пропустить эти числа или показать только одно число (суммируя подсчеты по регионам с очень низкими долями). Как я могу вручную адаптировать это?

ggplot(data1_,aes(x = year, y = products_developed_abroad_, 
                   fill = co_region)) + 
  geom_bar(position = "fill",stat = "identity") +
  scale_y_continuous(labels = percent_format()) +
  guides(fill=guide_legend(title="Co-Region")) +
  labs(x="Year", y="Percentage") +
  theme_economist() + scale_fill_manual(values=colors) +
    geom_text(aes(label=products_developed_abroad_),position=position_fill(vjust=0.5), size = 2)

введите здесь описание изображения


person Florian Seliger    schedule 19.07.2018    source источник
comment
Можете ли вы предоставить dput(data1_)?   -  person acylam    schedule 19.07.2018


Ответы (2)


Без данных для тестирования решения трудно быть уверенным, но я бы протестировал что-то вроде строки:

min_display <- 0.05
+ geom_text(aes(label=products_developed_abroad_, alpha = products_developed_abroad_ > min_display
    ),position=position_fill(vjust=0.5), size = 2) + 
scale_alpha_discrete(range = c(0,1))

Это должно сделать трюк, чтобы оставить их, даже если это не элегантно. Суммировать их немного сложнее, а также может быть очень запутанным.

person Hobo Sheep    schedule 19.07.2018
comment
благодарю вас. По некоторым причинам ваше предложение не сработало в моем случае. Однако я нашел решение на основе r-statistics.co/ (раздел 3) . Смотрите мой ответ, который я разместил - person Florian Seliger; 19.07.2018
comment
Вы можете настроить min_displayvalue (может быть 5 вместо 0,05), это может исходить из этого. Он работал на пользовательском графике (поскольку у меня не было ваших данных для проверки вашего кода). Это решение имеет то преимущество, что позволяет избежать модификации исходных данных. Я рад, что вы все же нашли решение. - person Hobo Sheep; 19.07.2018

Решение следующее:

#first we need to calculate shares of co-region by region
data1_$shares <- data1_$products_developed_abroad_/with(data1_, ave(products_developed_abroad_, list(year), FUN = sum)) 
#we need to choose a cutoff value for the shares and set counts associated with lower shares to missing, in this case we want counts with only shares larger than 0.02 (then the remaining counts seem to be displayed properly
data1_$large_bar <- ifelse(data1_$shares > 0.02, data1_$products_developed_abroad, "")

Единственное, что нам еще нужно сделать, это изменить geom_text:

geom_text(aes(label = large_bar), ...)
person Florian Seliger    schedule 19.07.2018