Эстетическая ошибка в R ggplot2

Я пытаюсь заполнить водосборные бассейны количеством воды, использованной при гидроразрыве пласта. У меня есть набор данных (well_watershed_ok) и переменная (H2O_BBL_T). Для каждого водораздела имеется одно значение. Это был код, который я использовал.

ggplot() + 
geom_polygon(data = well_watershed_ok, aes(x = long, y = lat), 
             fill = well_watershed_ok$H2O_BBL_T) + 
labs(x = "", y = "", title = "Number of Barrells of Water used per Day") + 
scale_color_gradientn("Water BBL/Day", colors = c( "#660000", "#f9f3c2")) + 
theme(legend.position = "bottom", axis.ticks.y = element_blank(), 
      axis.text.y = element_blank(), axis.ticks.x = element_blank(), 
      axis.text.x = element_blank(), 
      plot.title = element_text(lineheight = .8, face="bold",  vjust = 1, size = 12)) + 
coord_equal(ratio=1)

Regions defined for each Polygons
Error: Aesthetics must be either length 1 or the same as the data (222074): fill

Поскольку я получил эту ошибку, я проверяю свои длины, и они равны, но затем я проверил, распознал ли компьютер, что они равны, и это было ложно. Что я делаю?

identical(well_watershed_ok,well_watershed_ok$H2O_BBL_T)
[1] FALSE

length(well_watershed_ok)
[1] 79

length(well_watershed_ok$H2O_BBL_T)
[1] 79

Вот как выглядят мои данные

data.frame':    79 obs. of  37 variables:
$ FID_1     : Factor w/ 79 levels "0","1","10","11",..: 1 2 13 24 35 46 57 68 
78 79 ...
$ HUC_8     : Factor w/ 68 levels "11040001","11040002",..: 1 2 3 3 3 3 4 5 6 
7 ...
$ ACRES     : num  26176 420687 188128 1281 657 ...
$ HU_8_NAME : Factor w/ 68 levels "11040001 - CIMARRON HEADWATERS",..: 1 2 3 3 
3 3 4 5 6 7 ...
$ STATES    : Factor w/ 8 levels "AR,OK","AR,OK,TX",..: 5 7 3 3 3 3 3 7 7 7 ...
$ SQ_MILES  : num  40.9 657.32 293.95 2 1.03 ...
$ Count_    : Factor w/ 40 levels "0","1","10","12",..: 1 14 17 2 1 34 1 20 26 
16 ...
$ Sum_Lat_Y : num  0 73.8 775.6 37 0 ...
$ Sum_Long_X: num  0 -204 -2111 -101 0 ...
$ Sum_DF_Ele: num  0 0 0 0 0 ...
$ Sum_GF_Ele: num  0 7691 54745 3223 0 ...
$ Sum_Total_: num  0 9389 144678 6720 0 ...
$ Sum_OilBBL: num  0 0 0 0 0 0 0 181 166 698 ...
$ Sum_Oil_Gr: num  0 0 0 0 0 ...
$ Sum_GasMCF: num  0 0 0 0 0 ...
$ Sum_GasOil: num  0 0 0 0 0 ...
$ Sum_WaterB: num  0 0 0 0 0 ...
$ H2O_BBL_T : num  0 642 0 0 0 ...
$ FID_12    : Factor w/ 79 levels "0","1","10","11",..: 1 2 13 24 35 46 57 68 
78 79 ...
$ FID_12_13 : Factor w/ 79 levels "0","1","10","11",..: 1 2 13 24 35 46 57 68 
78 79 ...
$ HUC_89    : Factor w/ 68 levels "11040001","11040002",..: 1 2 3 3 3 3 4 5 6 
7 ...
$ ACRES_1   : num  26176 420687 188128 1281 657 ...
$ HU_8_NAM_1: Factor w/ 68 levels "11040001 - CIMARRON HEADWATERS",..: 1 2 3 3 
3 3 4 5 6 7 ...
$ STATES_1  : Factor w/ 8 levels "AR,OK","AR,OK,TX",..: 5 7 3 3 3 3 3 7 7 7 
...
$ SQ_MILES_1: num  40.9 657.32 293.95 2 1.03 ...
$ Count1    : Factor w/ 39 levels "0","1","107",..: 1 24 2 1 1 14 1 31 5 22 
...
$ Sum_DF_E_1: num  0 0 0 0 0 ...
$ Sum_GF_E_1: num  0 12299 2499 0 0 ...
$ Sum_Total1: num  0 20844 6950 0 0 ...
$ Sum_OilB_1: num  0 20 0 0 0 ...
$ Sum_Oil__1: num  0 0 0 0 0 ...
$ Sum_GasM_1: num  0 20 0 0 0 ...
$ Sum_GasO_1: num  0 1000 0 0 0 ...
$ Sum_Wate_1: num  0 642 0 0 0 ...

person AU95    schedule 30.04.2017    source источник
comment
Будет ли работать, если вы поместите спецификацию fill внутри вызова aes? Попробуйте ggplot(well_watershed_ok, aes(x=long, y=lat, fill=H2O_BBL_T) +geom_polygon(). Вам также может понадобиться указать эстетику group.   -  person mikeck    schedule 01.05.2017
comment
Нет, я получаю ту же ошибку. Что вы имеете в виду, когда говорите об эстетике группы? Извините, я новичок в R   -  person AU95    schedule 01.05.2017
comment
Это должно быть geom_polygon(data = well_watershed_ok, aes(x = long, y = lat, fill = well_watershed_ok$H2O_BBL_T)), так как вы используете заливку как часть сопоставления.   -  person Marcelo    schedule 01.05.2017
comment
› ggplot()+geom_polygon(data=well_watershed_ok, aes(x=long, y=lat,fill=well_watershed_ok$H2O_BBL_T))+labs(x=, y=, title=Количество баррелей воды, используемых в день)+scale_color_gradientn (Вода ББЛ/День, цвета=c(#660000, #f9f3c2))+ Области, определенные для каждого полигона Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как данные (222074): x, y, заливка   -  person AU95    schedule 01.05.2017
comment
Я все еще получаю ту же ошибку   -  person AU95    schedule 01.05.2017
comment
Пожалуйста, приведите пример ваших данных, например. head (well_watershed_ok) или str(well_watershed_ok). Трудно сказать, в чем проблема, не понимая формат данных.   -  person mikeck    schedule 01.05.2017


Ответы (1)


Вам нужно заменить scale_color_gradientn(...) на scale_fill_gradientn(...), так как ваша эстетика - это заливка (нарисованная внутри многоугольника), а не цвет (линия, граничащая с многоугольником).

Кроме того, как правило, не используйте dataframe$variable в вызовах ggplot. Как и @mikeck и @marcelo, упомянутые выше, вы хотите указать, что вся ваша эстетика, которая варьируется вместе с данными, должна быть внутри оператора aes(...), где вы можете просто написать имя столбца без кавычек:

ggplot(well_watershed_ok, aes(x=long, y=lat, fill=H2O_BBL_T) + 
  geom_polygon() + 
  scale_fill_gradientn(name = "Water BBL/Day", colors = c("#660000", "#f9f3c2"))

Наконец, вам нужно убедиться, что well_watershed_ok$H2O_BBL_T является числовым вектором. Попробуйте str(well_watershed_ok). Если он говорит, что этот столбец является фактором, то R интерпретирует ваши данные как категории, а не как непрерывную переменную. Распространенной причиной является наличие списка чисел с . для представления отсутствующих значений; Вместо этого R будет читать это как список текста.

В будущем не забудьте включить воспроизводимый фрагмент ваших данных для диагностики вашей проблемы.

person Brian    schedule 01.05.2017
comment
Спасибо за вашу помощь. Когда я не использую переменную dataframe$, она не распознает переменную '> ggplot(well_watershed_ok, aes(x=long, y=lat,fill=H2O_BBL_T))+geom_polygon()+labs (x=, y=, title=Количество баррелей воды, используемых в день)+scale_fill_gradientn(Вода ББЛ/день, colors=c( #660000, #f9f3c2))' Регионы, определенные для каждого полигона Ошибка в eval(expr, envir , приложение): объект 'H2O_BBL_T' не найден - person AU95; 01.05.2017
comment
Спасибо за вашу помощь. Когда я не использую переменную dataframe $, она не распознает переменную > ggplot(well_watershed_ok, aes(x=long, y=lat,fill=H2O_BBL_T))+geom_polygon()+labs(x="", y="", title="Number of Barrells of Water used per Day")+scale_fill_gradientn("Water BBL/Day", colors=c( "#660000", "#f9f3c2")) Регионы, определенные для каждого полигона. Ошибка в eval (expr, envir, enclos): объект «H2O_BBL_T» не найден, также я сделал тест str и переменные являются числами - person AU95; 01.05.2017
comment
Похоже, ошибка где-то выше по течению в вашем коде. Вы должны предоставить минимальный воспроизводимый пример, см.: stackoverflow.com/help/mcve и stackoverflow.com/questions/5963269/ - person Brian; 01.05.2017