Обратите внимание: я новичок в R. Я объединил два фрейма данных с одним общим столбцом с помощью метода merge (). Я получил фрейм данных вроде:

 x   y1   y2
 1   3    5
 2   2    4
 1   2    2
 3   5    5
 ...

И т.п. Я хотел бы построить такой фрейм данных с помощью ggplot. То, что я создал (используя документацию geom_point, является

ggplot(data = dat_c, aes(games, variance.x)) + 
     geom_point(aes(x = games, y = variance.x), legend=  TRUE,  xlab="X", ylab="Y", colour=alpha('red', 0.05)) + 
     geom_point(aes(x = games, y = variance.y), legend = TRUE, colour=alpha('blue', 0.05) )

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

  1. мой фактический график расположен в нижнем левом углу, я хотел бы установить максимальные значения для осей X и Y (динамически, например, с максимальным значением из данных + 100 или что-то в этом роде)
  2. легенда не отображается
  3. оси не описаны

Вот как это выглядит: введите описание изображения здесь

15
mkk 25 Авг 2011 в 18:49

2 ответа

Лучший ответ

Смотрите также:

(это результаты поиска [r] ggplot melt, хотя вы могли также попасть туда через [r] ggplot legend ...)

Если вы можете, получите копию книги ggplot и прочтите ее с самого начала - к сожалению, PDF-файл черновика больше не доступен в Интернете, но книга стоит вложенных средств.

  1. На самом деле у вас есть несколько точек со значениями x и y около крайних значений вашего графика. Их просто трудно увидеть, потому что они почти прозрачны (их будет немного легче увидеть на белом фоне, т.е. попробуйте добавить +theme_bw() к вашему вызову ggplot). Вы можете использовать xlim и ylim, если хотите ограничить диапазон графика. (Попробуйте summary на своих данных и проверьте максимальные значения ...)

  2. лучший способ нарисовать оси - это следовать идиоме ggplot «плавить» ваши данные в набор данных длинного формата с одним столбцом для категории (y1 против y2) и еще один для значения, как показано ниже:


  d <- data.frame(x=c(1,2,1,3),
                y1=c(3,2,2,5),
                y2=c(5,4,2,5))
  library(ggplot2) 
  library(reshape2) ## for melt()
  dm  <- melt(d,id.var=1)
  ggplot(data=dm,aes(x,value,colour=variable))+
  geom_point(alpha=0.2)+
  scale_colour_manual(values=c("red","blue"))+
  labs(x="games",y="variance")

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

  1. Я не уверен, что ты имеешь в виду.
11
Ben Bolker 27 Фев 2019 в 18:14

Вы должны melt преобразовать ваши данные в длинный формат, а затем сопоставить эстетику цвета с переменной столбцом из расплавленного data.frame. Что-то вроде этого:

dat <- data.frame(x = c(1,2,1,3), y1 = c(3,2,2,5), y2 = c(5,4,2,5))

dat.m <- melt(dat, id.vars = "x")

ggplot(dat.m, aes(x, value, colour = variable)) +
  geom_point() +
  scale_colour_manual(values = c("red", "blue"))

Вы можете вручную установить пределы с помощью xlim() и ylim() соответственно. Непонятно, что вы делаете с альфой, поэтому оставлю это на ваше усмотрение.

9
Chase 25 Авг 2011 в 15:15