2016-04-25 2 views
1

Я не использовал r, но я недавно решил использовать его для построения графиков - из-за его большой возможности сделать это. Я хотел бы сделать мой график лучше. В частности, я собирал цифры над барами. Я видел Adding labels to ggplot bar chart и я пытался использоватьЗначения графика над гистограммой

geom_text(aes(x=years, y=freq, ymax=freq, label=value, 
       hjust=ifelse(sign(value)>0, 1, 0)), 
      position = position_dodge(width=1)) + 

Но цифры не удалось показать.

Вот мой код:

# Load ggplot2 graphics package 
library(ggplot2) 

# Create dataset 
dat <- data.frame(years = c("1991", "1993", "1997", "2001", "2005", "2007", "2011", "2015"), 
freq = c(43.20, 52.13, 47.93, 46.29, 40.57, 53.88, 48.92, 50.92)) 

# Plot dataset with ggplot2 
ggplot(dat, aes(years, freq)) + geom_bar(stat = "identity", width=0.55) 
+ labs(x="Year",y="") + theme_classic() 

# Comma as decimal mark 
format(df, decimal.mark=",") 

ответ

5

В ggplot2 вы можете добиться этого с помощью geom_text(). aes() для этой геометрии необходимо предоставить то, что должно отображаться (label) и позиционирование.

Вы можете использовать format, позвоните по номеру aes(), чтобы получить запятую в качестве разделителя.

ggplot(dat, aes(years, freq)) + 
    geom_bar(stat = "identity", width=0.55) + 
    geom_text(aes(label=format(freq,decimal.mark = ","), y=freq+1.1)) + 
    scale_y_continuous(breaks = seq(0,50,10)) + 
    theme_classic() 

Это немного более идиоматическое сделать:

library(scales) 

ggplot(dat, aes(years, freq)) + 
    geom_bar(stat = "identity", width=0.55) + 
    geom_text(aes(label=comma(freq), y=freq+1.1)) + 
    scale_y_continuous(breaks = seq(0,50,10)) + 
    theme_classic() 

как scales пакета имеет много удобных этикетировочные встроенные.

Надеюсь, что это поможет.

+0

Спасибо за это. Я сделал одно изменение: 'y = freq + 2', и теперь значения немного выше. @hrbrmstr, пожалуйста, не стесняйтесь предоставлять свой более идиоматический код. – menteith

+0

М. А. здесь. Это ответ gd (и я просто добавил идиоматический вариант к нему). Вы можете использовать 'nudge_y' std param vs добавление к параметру' aes() '' y' для перемещения метки. – hrbrmstr

+0

Когда я использую ваш более идиоматический код, я получаю: 'Не знаю, как автоматически выбрать масштаб для объекта функции типа. По умолчанию непрерывное Ошибка в data.frame (y = c (44,3, 53,23, 49,03, 47,39, 41,67, 54,98, 50,02,: ) аргументы подразумевают различное количество строк: 8, 0' – menteith