رسم خريطة ملونة مع الرموز البريدية في R أو Python
سؤال
لدي بعض البيانات الديموغرافية والثابتة الأمريكية.
أرغب في رسم مناطق الرمز البريدي في ولاية أو منطقة أصغر (على سبيل المثال.مدينة).سيتم وضع تعليقات توضيحية على كل منطقة حسب اللون و/أو النص الخاص بتلك المنطقة.سيكون الناتج مشابهًا لـ http://maps.huge.info/ ولكن أ) مع نص مشروح؛ب) إخراج قوات الدفاع الشعبي؛ج) قابلة للبرمجة في R أو Python.
هل هناك أي حزمة ورمز يسمح لي بالقيام بذلك؟
المحلول
وأنا على افتراض كنت تريد خرائط ثابتة.
<الفرعية> (المصدر: eduardoleoni.com ) الفرعي>
1) الحصول على ملفات أشكال من الرمز البريدي حدود و < وأ href = "http://www.census.gov/geo/www/cob/st2000.html" يختلط = "نوفولو noreferrer"> حدود الدولة في census.gov:
2) استخدام وظيفة plot.heat نشرت لي في هذا SO السؤال أ >.
وعلى سبيل المثال (يفترض أن يكون لديك ملفات أشكال ميريلاند في دليل فرعي خريطة):
library(maptools)
##substitute your shapefiles here
state.map <- readShapeSpatial("maps/st24_d00.shp")
zip.map <- readShapeSpatial("maps/zt24_d00.shp")
## this is the variable we will be plotting
zip.map@data$noise <- rnorm(nrow(zip.map@data))
## put the lab point x y locations of the zip codes in the data frame for easy retrieval
labelpos <- data.frame(do.call(rbind, lapply(zip.map@polygons, function(x) x@labpt)))
names(labelpos) <- c("x","y")
zip.map@data <- data.frame(zip.map@data, labelpos)
## plot it
png(file="map.png")
## plot colors
plot.heat(zip.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
## plot text
with(zip.map@data[sample(1:nrow(zip.map@data), 10),] , text(x,y,NAME))
dev.off()
نصائح أخرى
هناك العديد من الطرق للقيام بذلك في R (انظر ملف عرض مكاني);العديد من هذه تعتمد على حزمة "الخرائط"..
ألق نظرة على هذا مثال رائع على انتخابات الولايات المتحدة عام 2004.وينتهي الأمر بهذا الشكل:
إليك مثال قبيح بعض الشيء للنموذج يستخدم حزمة "الخرائط" مع "الشبكة".
- لقد صنع أندرو جيلمان بعض المؤامرات الرائعة مثل هذه.انظر على سبيل المثال، منشور المدونة هذا على الولايات الحمراء/الولايات الزرقاء و مشاركة المتابعة هذه.
وهنا مثال بسيط جدا باستخدام حزمة "gmaps"., ، والتي توضح خريطة الاعتقالات حسب الولاية للاعتقالات لكل 100000 بسبب جريمة القتل:
require(gmaps) data(USArrests) attach(USArrests) grid.newpage() grid.frame(name="map") grid.pack("map",USALevelPlot(states=rownames(USArrests),levels=Murder,col.fun=reds),height=unit(1,'null')) grid.pack("map",gradientLegendGrob(at=quantile(Murder),col.fun=reds),side="bottom",height=unit(.2,'npc')) detach(USArrests)
قد يكون شخص ما شيئا أكثر مباشرة بالنسبة لك، ولكنني وجدت "المزج البيانات في R 'أوريلي مثيرة جدا للاهتمام ... في جزء منه، انها رسم الخرائط المكانية من المزادات منزل الرهن.
في بيثون، يمكنك استخدام ملفات أشكال من تعداد الولايات المتحدة جنبا إلى جنب مع مجموعة basemap
. هنا مثال على تعبئة في الدول بناءا على عدد السكان.
وهناك سلسلة غنية ومتطورة من الحزم في R لمؤامرة، هل التحليل، وغيرها من المهام المتعلقة GIS. مكان واحد للبدء هو رأي مهمة كرا على إدارة البيانات المكانية : هذا هو عالم معقد وغامضة في بعض الأحيان، ويحتاج إلى بعض العمل لفهم.
إذا كنت تبحث عن حر تطبيق، ورسم الخرائط وظيفية للغاية، قد أقترح:
وMapWindow (mapwindow.com)
دانيال ليفين في اتجاهات تك كرانش فعلت أشياء لطيفة مع حزمة maps
في R. لديه كود متاح على موقعه أيضا.
واقتراح بول للنظر في معالجة - التي تستخدم بن فراي لجعل zipdecode - هو أيضا فكرة جيدة، إذا كنت لتعلم (جافا مثل) لغة جديدة
.واعتمادا على التطبيق الخاص بك، شوطا طويلا نحو قد يكون لاستخدام شيء من هذا القبيل:
لتعيين البيانات الخاصة بك. إذا لم يكن ذلك تماما ما أردت، يمكنك الحصول على الخام ملفات أشكال الرمز البريدي من census.gov والقيام بذلك يدويا، وهو على قدر كبير من الألم.
وأيضا، إذا كنت لم أر ذلك، وهذا هو وسيلة نظيفة للتفاعل مع بيانات مماثلة، وقد توفر بعض المؤشرات:
قم بإلقاء نظرة على أداة التصور الممتازة عبر الإنترنت هذه من IBMhttp://manyeyes.alphaworks.ibm.com/manyeyes/
يحرر لمعلوماتك، ManyEyes يستخدم Prefuse مجموعة أدوات التصور لبعض من معناها.على الرغم من أنه إطار عمل يستند إلى جافا، إلا أنه يوفر أيضًا أداة Flash/ActionScript للويب.