построение гистограммы в R с использованием ggplot2 - PullRequest
4 голосов
/ 30 мая 2011

У меня есть фрейм данных с именем toplot_noind, как показано ниже.

> toplot_noind

    Chang.1  Chang.2  Chang.3  Chang.4  Chang.5  Chang.6  Chang.7  Chang.8
18    150.3     84.61     31.45     11.08     -0.19    -57.83    -88.63    -98.39

Я хотел бы использовать этот фрейм данных для построения гистограммы с использованием ggplot2.

Я ненужны имена столбцов: Chang.1, Chang.2 и т. д. на графике.

Я хочу, чтобы эти 8 значений 150.3, 84.61, ..., -98.39 отображались на оси y (18не является частью значений, это имя строки).

Кроме того, поскольку имеется 8 значений, я хочу 8 столбцов на оси X - каждое указывает на каждое из этих значений.

Поэтому я хочу назвать эти столбцы 1 (для 1-го столбца), 2 (для 2-го столбца), 3, ..., 8 в указанном порядке на оси X.

Кроме того, я бы хотел обозначить ось Y как «Общая ожидаемая прибыль», а ось X - «Премиальное изменение».

Ниже показано, что я пытался сделать, но это не работает,На самом деле я пытался читать на ggplot2, но материал, который я прочитал, не мог дать мне четкого понимания, но мне нужно использовать эту гистограмму в моем задании.У меня очень ограниченное время для отправки.

library(reshape)
library(ggplot2)

t<-ncol(toplot_noind)

a<-seq(1:t)

ggplot(toplot_noind, aes(x = a, y = toplot_noind, xlab="premium change", ylab="Total Expected Profit")) + 
 geom_bar(position = "dodge")

Заранее большое спасибо всем, кто мог бы мне помочь.

Исаак

1 Ответ

9 голосов
/ 30 мая 2011

Вы имеете в виду что-то подобное? (Я не уверен, хотите ли вы добавить значение в верхней части графика, поэтому я добавил их, но вы можете безопасно удалить последнюю строку, если они вам не нужны.)

tmp <- c(150.3,84.61,31.45,11.08,-0.19,-57.83,-88.63,-98.39)
dd <- data.frame(y=tmp, x=LETTERS[1:8])
ggplot(dd, aes(x=x, y=y)) + geom_bar(fill="darkgrey") + 
  labs(x="Premium change", y="Total Expected Profit") + 
  geom_text(aes(x=x, y=ifelse(y>0, y+5, y-5), 
            label=y), size=4, colour="white")

enter image description here

Было бы еще лучше добавить + coord_flip(), ИМО.


Что не так в вашем коде?

  1. Функция ggplot() ожидает data.frame, из которого она может извлечь именованную переменную, например, для параметров эстетики x= и y=. Поэтому, прежде всего, вам нужно преобразовать ваш объект в правильный data.frame и назвать его, поскольку вы можете указать его значение через aes():

    toplot_noind <- as.data.frame(toplot_noind)
    names(toplot_noind) <- y
    

    что лучше, чем использовать то же имя, что и ваш data.frame. (Однако обратите внимание, что он унаследует свое имя с помощью операции приведения.)

  2. Тогда x- и y-метки должны быть вне функции aes(). Я не использую qplot(), но я думаю, что использование xlab= и ylab= прекрасно работает там. С ggplot я предпочитаю функции labs() или xlab() / ylab(). Э.Г.

  3. Вам необходимо указать x в виде коэффициента.

  4. Аспект уклонения здесь не кажется необходимым, поскольку у вас нет второго коэффициента перекрестной классификации (см. Пример использования в help(position_dodge)).

В итоге ваш исправленный код будет выглядеть так:

toplot_noind <- as.data.frame(toplot_noind)
ggplot(toplot_noind, aes(x = as.factor(1:8), y = toplot_noind)) + 
  geom_bar() +
  xlab("premium change") + 
  ylab("Total Expected Profit") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...