أكثر

هل من الممكن قص ملف شكل إلى صورة () في R؟

هل من الممكن قص ملف شكل إلى صورة () في R؟


أنا أعمل على تعيين بعض بيانات netcdf في R وقد واجهت وقتًا عصيبًا في محاولة إجراء مقطع باستخدام ملف شكل بلد مستورد أستخدمه. هنا سؤالي من الأمس. إذا كنت تعرف أي شيء عن ذلك ، فلا تتردد في الظهور والإجابة على هذا السؤال. :)

لكن سأبدأ من جديد هنا. لذلك بالنسبة لعملي ، نخطط لرسم خرائط أطنان وأطنان من بيانات الطقس في جميع أنحاء العالم. للممارسة ، قدم لنا الشخص الذي قدم بياناتنا بعض بيانات "الأمثلة" للعب بها. يود رئيسي أن أقوم بإنشاء خرائطي في R. تهدف هذه الخرائط إلى إعادة خرائط الفترة. البيانات بتنسيق netcdf. لقد تمكنت من تعيين بيانات netcdf مع وظيفة levelplot من حزمة rasterVis. تمكنت أيضًا من تعيين بيانات netcdf باستخدام وظيفة صورة بسيطة. هذا هو الكود الخاص بي (آسف على اصطلاحات التسمية غير التقليدية ؛ لقد كنت ألعب للتو بهذا):

مكتبة (maptools) مكتبة (ncdf4) مكتبة (RColorBrewer) مكتبة (نقطية) setwd ("D:  stuff") #Madagascar shapefile madagascar <- readShapeSpatial ("MDG_adm0.shp") مؤامرة (مدغشقر) # Call on netcdf file ncdf .data <- nc_open ("swio_rpmaps_200_83.nc") #Call في فترات عودة الرياح لمدة 10 سنوات إرجاع <- ncvar_get (ncdf.data، "y010") #Define latitude and longitude lon <- ncdf.data $ dim $ longitude $ vals lat <- ncdf.data $ dim $ latitude $ vals #plot image of windspeeds image (lon، lat، return، col = cm.colors (9، alpha = .6)، add = TRUE) #plot Madagascar أعلى مؤامرة سرعة الرياح (مدغشقر ، إضافة = T)

ها هي صورة النتيجة:

هل هناك أي طريقة لقص ملف أشكال مدغشقر في هذه الصورة؟ أو طريقة أخرى لمعالجة البيانات حتى أتمكن من إجراء مقطع؟ من الناحية المثالية ، سيكون لدي فقط البيانات المرتبطة داخل حدود أي دولة أرسمها.


التقاط الاقتراح منhrbrmstr هنا هو الكود. نظرًا لأنك لا تقدم نموذجًا للملف ، فأنا أحاول محاكاة موقفك وإنشاء عينة بالطريقة التي قد تتمكن من القيام بها باستخدام ملف netcdf الخاص بك. ملف الشكل الذي استخرجته من Natural Earth.

مكتبة (maptools) مكتبة (نقطية) مدغشقر <- readShapeSpatial ("MDG_adm0.shp") ## تشكل بعض القيم # أحاول تكرار الطريقة التي ستفعلها مع ملف netcdf ... lon <- seq (42، 51 ، .05) lat <- seq (-29، -10، .1) تعرض <- runif (length (lat) * length (lon)) صورة (lon ، lat ، matrix (return ، length (lon) ، length ( lat)) ، col = cm ، ألوان (9 ، alpha = .6)) قطعة أرض (مدغشقر ، إضافة = T)

بعد ذلك ، نستخدم القيم من ملف netcdf لإنشاء كائن نقطي فعلي (على وجه الدقة RasterLayer) يمكنك العمل معه. للقيام بذلك ، نحتاج إلى تعيين أبعاد البيانات النقطية (nrows و ncols) بالإضافة إلى قيم min و max لكلا البعدين (x و y). ثم نستخدم ملفsetValuesوظيفة لإضافة القيم (في حالتك الرياح) لكل خلية نقطية.

تحديث: بدلاً من القيام بذلك ، قم بإنشاء كائن نقطي مباشرةً كما هو موضح بواسطةRobertH.

# قم بإنشاء كائن نقطي باستخدام القيم أعلاه r ymx = max (lat)) r <- setValues ​​(r ، Return) plot (r) plot (مدغشقر ، إضافة = T)

أخيرًا ، نستخدم ملفقناعوظيفة لقص البيانات النقطية. تأخذ هذه الوظيفة أي كائن Spatial * كقناع ، يكون SpatialPolygonsDataframe (مثل مدغشقر) أحدها.

#clip r.clipped <- مؤامرة القناع (r ، مدغشقر) (r.clipped)


إضافة إلى إجابة cengel ، لإظهار كيفية الوصول إلى ملف ncdf ككائن RasterBrick ، ​​ثم تابع:

مكتبة (نقطية) مدغشقر <- shapefile ("MDG_adm0.shp") b <- raster ("swio_rpmaps_200_83.nc" ، var = "y010") bb <- Crop (b ، مدغشقر) bb <- Mask (bb ، مدغشقر)

شاهد الفيديو: Select Data Frame Rows based on Values in Vector in R. element, filter dplyr u0026 setDT