Как нарисовать контурные линии из простого объекта (т. Е. значений столбцов) объекта sf

#r #sf #tmap

Вопрос:

У меня есть полигональный объект sf, и мне интересно, как я могу рисовать контурные линии на основе значений столбцов. То, что я хочу понять, — это что-то вроде приведенного ниже (эта карта указана здесь). введите описание изображения здесь

Мои данные выглядят так, как показано ниже. Пожалуйста, загрузите данные отсюда. Я хочу нарисовать контурные линии на основе столбца contour . Мои полигоны идентичны приведенному выше примеру. Есть какие-нибудь мысли?

 Simple feature collection with 6 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -88.47322 ymin: 30.22113 xmax: -84.89089 ymax: 35.00802
Geodetic CRS:  NAD83
  STATE STASD_N STASD_A                       geometry contour
1    01     110    0110 MULTIPOLYGON (((-87.92697 3...     141
2    01     120    0120 MULTIPOLYGON (((-85.59516 3...     190
3    01     130    0130 MULTIPOLYGON (((-87.91345 3...      76
4    01     140    0140 MULTIPOLYGON (((-87.83804 3...      70
5    01     150    0150 MULTIPOLYGON (((-88.08681 3...     112
6    01     160    0160 MULTIPOLYGON (((-84.99523 3...     167
 

Вот то, с чем я пробовал tmap . Существует tm_iso функция, однако она принимает только пространственные линии. Таким образом, я преобразовал свои полигоны в линии с st_cast помощью . Смотрите код ниже.

 lines <- st_cast(asdsiso, 'MULTILINESTRING')

tm_shape(lines)   tm_iso(col = 'contour', text = 'contour')
 

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

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

 linesAgg <- linesAgg %>% group_by(contour2) %>%
  summarise(contour2 = mean(contour2))

tm_shape(linesAgg)   tm_iso(col = 'contour2', text = 'contour2')
 

Карта все та же, за исключением легенды.

Комментарии:

1. Просить нас загрузить файл размером 2 МБ и выполнить ваш проект за вас кажется немного чересчур. Вам следует потратить время, чтобы показать, какие усилия по кодированию вы предприняли до сих пор. Наверняка вы уже провели некоторый ввод данных и предварительное сопоставление?

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

3. Идеально! Я соответствующим образом отредактировал сообщение. Я действительно ценю ваш вклад!

4. @nniloc Ты прав. Я смог нарисовать эти контурные линии, перейдя на предложенный вами веб-сайт. Оказалось, что мне нужно интерполировать данные в растр (сначала я преобразовал полигоны в точки и интерполировал по точкам). Затем я использую st_contour функцию для создания линий из растра.

5. Для всех, кто также ищет решение проблемы, вы можете проверить этот пример .