Plotear datos usando usando “breaks”
Para mayor claridad y visibilidad del plot, podemos dividir nuestros datos. Es util primero conocer la distribicion de los datos mediante un grafico de barras utilizando las funciones mutate() y cut() combinadas. Para esto utilizaremos la libreria dplyr Los datos que utilizaremos datos de elevacion de un modelo digital del terreno.
summary(df_dem$dem)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
100 2509 3000 2887 3689 4500 25701
Para conocer los valores de de corte de cada grupo. Un grupo se van encontrar todos los valores NA’s
unique(df_dem $ elevation)
[1] <NA> (95.6,1.57e+03] (1.57e+03,3.03e+03] (3.03e+03,4.5e+03]
Levels: (95.6,1.57e+03] (1.57e+03,3.03e+03] (3.03e+03,4.5e+03]
Para contar los valores por cada grupo
df_dem%>%
group_by(df_dem$elevation)%>%
summarize(counts= n())
Podemos personalizar los valores de corte para cada grupo de datos. Como ehemplo vamos a realizar 3 cortes entre los valores menores a 1000, 1001-2000 y mayores a 2000
custom_bins <- c(100, 2000, 3000,4500 )
df_dem_cut <- df_dem %>%
mutate(elevation_2 = cut(df_dem$dem, breaks = custom_bins))
ggplot() +
geom_bar(data = df_dem_cut, aes(elevation_2))

unique(df_dem_cut$elevation_2)
[1] <NA> (100,2e+03] (2e+03,3e+03] (3e+03,4.5e+03]
Levels: (100,2e+03] (2e+03,3e+03] (3e+03,4.5e+03]
Podemos plotear el raster en donde cada grupo de datos tenga un color diferente
ggplot() +
geom_raster(data =df_dem_cut , aes(x = x, y = y, fill = elevation_2))

ggplot() +
geom_raster(data =df_dem_cut , aes(x = x, y = y, fill = elevation_2)) +
scale_fill_manual(values = terrain.colors(3))

Si necesitamos crear múltiples gráficos utilizando la misma paleta de colores, podemos crear un objeto R (my_col) para el conjunto de colores que queremos usar.
y_col <- terrain.colors(3)
ggplot() +
geom_raster(data =df_dem_cut , aes(x = x, y = y, fill = elevation_2)) +
scale_fill_manual(values = y_col)

Podemos crear un efecto de sombreado tridimensional. Vamos a generar un hillshade el cual mapea las sobras y las texturas que tiene el terreno. Utilizaremos una escala de gris
ggplot() +
geom_raster(data = df_dem , aes(x = x, y = y, alpha = dem)) +
scale_alpha(range = c(0.15, 0.90), guide = "none")

LS0tDQp0aXRsZTogIlBsb3RlYXIgZGF0b3MgcmFzdGVyIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQphdXRob3I6ICJMb3JlbmEgT3JlbGxhbmEiDQotLS0NCg0KIyMjI1Bsb3RlYXIgZGF0b3MgdXNhbmRvIHVzYW5kbyAiYnJlYWtzIg0KDQoNClBhcmEgbWF5b3IgY2xhcmlkYWQgeSB2aXNpYmlsaWRhZCBkZWwgcGxvdCwgcG9kZW1vcyBkaXZpZGlyIG51ZXN0cm9zIGRhdG9zLiBFcyB1dGlsIHByaW1lcm8gY29ub2NlciBsYSBkaXN0cmliaWNpb24gZGUgbG9zIGRhdG9zIG1lZGlhbnRlIHVuIGdyYWZpY28gZGUgYmFycmFzIHV0aWxpemFuZG8gbGFzIGZ1bmNpb25lcyBtdXRhdGUoKSB5IGN1dCgpIGNvbWJpbmFkYXMuDQpQYXJhIGVzdG8gdXRpbGl6YXJlbW9zIGxhIGxpYnJlcmlhIGRwbHlyDQpMb3MgZGF0b3MgcXVlIHV0aWxpemFyZW1vcyBkYXRvcyBkZSBlbGV2YWNpb24gZGUgdW4gbW9kZWxvIGRpZ2l0YWwgZGVsIHRlcnJlbm8uDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHJhc3RlcikNCmxpYnJhcnkoZHBseXIpDQoNCnNldHdkKCJEOlxcbWFlc3RyaWFcXHBlcmNlcGNpb24gcmVtb3RhIGF2YW56YWRhXFxlamVyY2ljaW9zUiIpDQpkZW0gPC0gcmFzdGVyKCJkZW0udGlmIikNCnBsb3QoZGVtKQ0KZGZfZGVtIDwtIGFzLmRhdGEuZnJhbWUoZGVtLCB4eT1UUlVFKQ0Kc3VtbWFyeShkZl9kZW0kZGVtKQ0KZGZfZGVtIDwtIGRmX2RlbSAlPiUNCiAgICAgICAgICBtdXRhdGUoZWxldmF0aW9uID0gY3V0KGRmX2RlbSRkZW0sIGJyZWFrcyA9IDMpKSAjbXV0YXRlIGFncmVnYSBudWV2YXMgdmFyaWFibGVzIHkgY29uc2VydmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXMgZXhpc3RlbnRlcw0KZ2dwbG90KCkgKw0KICAgIGdlb21fYmFyKGRhdGEgPWRmX2RlbSAsIGFlcyhlbGV2YXRpb24pKSAgICAgICAgICANCmRmX2RlbQ0KDQpgYGANClBhcmEgY29ub2NlciBsb3MgdmFsb3JlcyBkZSBkZSBjb3J0ZSBkZSBjYWRhIGdydXBvLiBVbiBncnVwbyBzZSB2YW4gZW5jb250cmFyIHRvZG9zIGxvcyB2YWxvcmVzIE5BJ3MNCg0KYGBge3J9DQp1bmlxdWUoZGZfZGVtICQgZWxldmF0aW9uKQ0KYGBgDQpQYXJhIGNvbnRhciBsb3MgdmFsb3JlcyBwb3IgY2FkYSBncnVwbw0KYGBge3J9DQpkZl9kZW0lPiUNCiAgZ3JvdXBfYnkoZGZfZGVtJGVsZXZhdGlvbiklPiUNCiAgc3VtbWFyaXplKGNvdW50cz0gbigpKQ0KYGBgDQogDQogUG9kZW1vcyBwZXJzb25hbGl6YXIgbG9zIHZhbG9yZXMgZGUgY29ydGUgcGFyYSBjYWRhIGdydXBvIGRlIGRhdG9zLiBDb21vIGVoZW1wbG8gdmFtb3MgYSByZWFsaXphciAzIGNvcnRlcyBlbnRyZSBsb3MgdmFsb3JlcyAgbWVub3JlcyBhIDEwMDAsIDEwMDEtMjAwMCB5IG1heW9yZXMgYSAyMDAwDQpgYGB7cn0NCmN1c3RvbV9iaW5zIDwtIGMoMTAwLCAyMDAwLCAzMDAwLDQ1MDAgKQ0KDQpkZl9kZW1fY3V0IDwtICAgZGZfZGVtICU+JQ0KICAgICAgICAgICAgICAgIG11dGF0ZShlbGV2YXRpb25fMiA9IGN1dChkZl9kZW0kZGVtLCBicmVha3MgPSBjdXN0b21fYmlucykpDQpnZ3Bsb3QoKSArDQogICAgZ2VvbV9iYXIoZGF0YSA9IGRmX2RlbV9jdXQsIGFlcyhlbGV2YXRpb25fMikpDQoNCnVuaXF1ZShkZl9kZW1fY3V0JGVsZXZhdGlvbl8yKQ0KDQoNCmBgYA0KIA0KIFBvZGVtb3MgcGxvdGVhciBlbCByYXN0ZXIgZW4gZG9uZGUgY2FkYSBncnVwbyBkZSBkYXRvcyB0ZW5nYSB1biBjb2xvciBkaWZlcmVudGUNCiANCmBgYHtyfQ0KZ2dwbG90KCkgKw0KIGdlb21fcmFzdGVyKGRhdGEgPWRmX2RlbV9jdXQgICwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IGVsZXZhdGlvbl8yKSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdCgpICsNCiBnZW9tX3Jhc3RlcihkYXRhID1kZl9kZW1fY3V0ICwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IGVsZXZhdGlvbl8yKSkgKyANCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSB0ZXJyYWluLmNvbG9ycygzKSkNCmBgYA0KIA0KU2kgbmVjZXNpdGFtb3MgY3JlYXIgbfpsdGlwbGVzIGdy4WZpY29zIHV0aWxpemFuZG8gbGEgbWlzbWEgcGFsZXRhIGRlIGNvbG9yZXMsIHBvZGVtb3MgY3JlYXIgdW4gb2JqZXRvIFIgKG15X2NvbCkgcGFyYSBlbCBjb25qdW50byBkZSBjb2xvcmVzIHF1ZSBxdWVyZW1vcyB1c2FyLg0KYGBge3J9DQp5X2NvbCA8LSB0ZXJyYWluLmNvbG9ycygzKQ0KZ2dwbG90KCkgKw0KIGdlb21fcmFzdGVyKGRhdGEgPWRmX2RlbV9jdXQgLCBhZXMoeCA9IHgsIHkgPSB5LCBmaWxsID0gZWxldmF0aW9uXzIpKSArIA0KICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IHlfY29sKQ0KDQpgYGANCg0KUG9kZW1vcyBjcmVhciB1biBlZmVjdG8gZGUgc29tYnJlYWRvIHRyaWRpbWVuc2lvbmFsLiBWYW1vcyBhIGdlbmVyYXIgdW4gaGlsbHNoYWRlIGVsIGN1YWwgbWFwZWEgbGFzIHNvYnJhcyB5IGxhcyB0ZXh0dXJhcyBxdWUgdGllbmUgZWwgdGVycmVuby4gVXRpbGl6YXJlbW9zIHVuYSBlc2NhbGEgZGUgZ3Jpcw0KYGBge3J9DQpnZ3Bsb3QoKSArDQogZ2VvbV9yYXN0ZXIoZGF0YSA9IGRmX2RlbSAsIGFlcyh4ID0geCwgeSA9IHksIGFscGhhID0gZGVtKSkgKyANCiAgICBzY2FsZV9hbHBoYShyYW5nZSA9ICBjKDAuMTUsIDAuOTApLCBndWlkZSA9ICJub25lIikNCmBgYA0K