การสร้างแผนที่ความหนาแน่นของความร้อนที่ดึงดูดสายตา


27

ในขณะที่ฉันรู้ว่ามีฟังก์ชั่นหลายชุดสำหรับสร้างแผนที่ความร้อนใน R ปัญหาคือฉันไม่สามารถสร้างแผนที่ที่ดึงดูดสายตาได้ ตัวอย่างเช่นภาพด้านล่างเป็นตัวอย่างแผนที่ความร้อนที่ฉันต้องการหลีกเลี่ยง อย่างแรกชัดเจนไม่มีรายละเอียดในขณะที่อีกคนหนึ่ง (ตามจุดเดียวกัน) มีรายละเอียดเกินไปที่จะเป็นประโยชน์ แปลงทั้งสองถูกสร้างขึ้นโดยฟังก์ชันความหนาแน่น () ในแพ็คเกจ spatstat R

ฉันจะเพิ่ม "flow" ลงในแปลงของฉันได้อย่างไร สิ่งที่ฉันตั้งเป้าหมายคือการดูผลลัพธ์ของซอฟต์แวร์ SpatialKey ( ภาพหน้าจอ ) เชิงพาณิชย์มากขึ้นสามารถผลิตได้

คำแนะนำอัลกอริทึมแพคเกจหรือบรรทัดของโค้ดใดบ้างที่จะพาฉันไปในทิศทางนี้?

ป้อนคำอธิบายรูปภาพที่นี่


คุณเคยดูที่ฟังก์ชั่น image () หรือยัง? การเพิ่มจำนวนการแบ่งเพิ่มความละเอียด
มาโคร

คำตอบ:


28

มีสองสิ่งที่จะส่งผลกระทบต่อความเรียบของพล็อตแบนด์วิดท์ที่ใช้สำหรับการประเมินความหนาแน่นของเคอร์เนลและตัวแบ่งที่คุณกำหนดสีให้กับพล็อต

จากประสบการณ์ของฉันสำหรับการวิเคราะห์เชิงสำรวจฉันเพิ่งปรับแบนด์วิดท์จนกว่าจะได้พล็อตที่มีประโยชน์ การสาธิตด้านล่าง

library(spatstat)
set.seed(3)
X <- rpoispp(10)
par(mfrow = c(2,2))
plot(density(X, 1))
plot(density(X, 0.1))
plot(density(X, 0.05))
plot(density(X, 0.01))

ป้อนคำอธิบายรูปภาพที่นี่

เพียงแค่เปลี่ยนชุดรูปแบบสีเริ่มต้นจะไม่ช่วยอะไรเลยและจะไม่เปลี่ยนความละเอียดของพิกเซล (หากมีสิ่งใดที่ความละเอียดเริ่มต้นนั้นแม่นยำเกินไปและคุณควรลดความละเอียดและทำให้พิกเซลใหญ่ขึ้น) แม้ว่าคุณอาจต้องการเปลี่ยนชุดรูปแบบสีเริ่มต้นเพื่อจุดประสงค์ด้านสุนทรียภาพ แต่ก็มีวัตถุประสงค์เพื่อแยกแยะอย่างมาก

สิ่งที่คุณสามารถทำได้เพื่อช่วยให้สีเปลี่ยนระดับสเกลเป็นลอการิทึม (จริง ๆ แล้วจะช่วยถ้าคุณมีกระบวนการ inhomogenous มาก ) เปลี่ยนจานสีให้แตกต่างกันมากขึ้นที่ปลายล่าง (อคติในแง่ของข้อกำหนดทางลาดสีใน R) หรือปรับคำอธิบายให้มีถังขยะแบบแยกแทนการต่อเนื่อง

ตัวอย่างของการมีอคติในตำนานที่ดัดแปลงมาจากที่นี่และผมก็มีการโพสต์อื่นในเว็บไซต์ GIS อธิบายสีถังขยะเนื่องในตัวอย่างง่ายๆสวยที่นี่ สิ่งเหล่านี้จะไม่ช่วยได้ถ้าหากรูปแบบนั้นสูงหรือต่ำกว่าที่เริ่มต้น

Z <- density(X, 0.1)
logZ <- eval.im(log(Z))
bias_palette <- colorRampPalette(c("blue", "magenta", "red", "yellow", "white"), bias=2, space="Lab")
norm_palette <- colorRampPalette(c("white","red"))
par(mfrow = c(2,2))
plot(Z)
plot(logZ)
plot(Z, col=bias_palette(256))
plot(Z, col=norm_palette(5))

ป้อนคำอธิบายรูปภาพที่นี่


ในการทำให้สีโปร่งใสในภาพสุดท้าย (โดยที่ถาดสีแรกเป็นสีขาว) เพียงแค่สร้างทางลาดสีแล้วเปลี่ยนข้อกำหนด RGB ด้วยสีโปร่งใส ตัวอย่างด้านล่างใช้ข้อมูลเดียวกันกับข้างบน

library(spatstat)
set.seed(3)
X <- rpoispp(10)
Z <- density(X, 0.1)
A <- rpoispp(100) #points other places than density


norm_palette <- colorRampPalette(c("white","red"))
pal_opaque <- norm_palette(5)
pal_trans <- norm_palette(5)
pal_trans[1] <- "#FFFFFF00" #was originally "#FFFFFF" 

par(mfrow = c(1,3))
plot(A, Main = "Opaque Density")
plot(Z, add=T, col = pal_opaque)
plot(A, Main = "Transparent Density")
plot(Z, add=T, col = pal_trans)


pal_trans2 <- paste(pal_opaque,"50",sep = "")
plot(A, Main = "All slightly transparent")
plot(Z, add=T, col = pal_trans2)

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณคำตอบที่ไม่พอใจอย่างชัดเจนมาก สิ่งนี้รวมกับคำสั่ง "spatstat.options (npixel = c (100,100))" ที่คุณเรียงกันเพื่อหลอกลวง ถ้าฉันรบกวนคุณได้อีก: คุณรู้ไหมว่าฉันจะทำให้สี "พื้นหลัง" โปร่งใสได้อย่างไร?
Figaro

1
@ ฟิกาโรฉันได้รับการปรับปรุงด้วยตัวอย่างของการทำให้สีกึ่งโปร่งใส
Andy W

ขอขอบคุณ. อีกหนึ่งสิ่ง. ขณะนี้อาจจะปิดหัวข้อเล็กน้อย: ฉันจะส่ง heatmaps เหล่านี้ไปยังไฟล์ Shape ได้อย่างไร หรือฉันจำเป็นต้องปฏิบัติต่อพวกเขาในฐานะแรสเตอร์เท่านั้น?
Figaro

ฉันไม่เคยทำแบบนั้นดังนั้นฉันจึงไม่สามารถพูดแบบฉับพลันได้ อาจเป็นคำถามที่ดีสำหรับปราชญ์ R ใน stackoverflow
Andy W

Heatmap สามารถนำเสนอเป็นอย่างอื่นนอกเหนือจากแรสเตอร์ได้หรือไม่?
Figaro

2

คุณอาจได้รับประโยชน์จากฟังก์ชั่น interp จากแพ็คเกจ akima วิธีนี้จะช่วยให้คุณแก้ไขเมทริกซ์ของคุณให้เป็นความละเอียดอื่นได้ถ้าต้องการ ในการสร้างบางอย่างเช่นตัวอย่างที่เชื่อมโยงของคุณคุณจะต้องสอดแทรกกริดที่ค่อนข้างละเอียด (อาจมีอาร์กิวเมนต์ xo และ yo ยาวประมาณ 1,000) นี่จะให้เมทริกซ์ใหม่ที่คุณสามารถพล็อตด้วยรูปภาพ () ถ้าคุณต้องการความโปร่งใสนี่จะใช้งานเพิ่มเติม การทำจานสีนั้นไม่ใช่เรื่องง่ายดังนั้นคุณอาจต้องลงจุดในแต่ละตารางเป็นรูปหลายเหลี่ยมที่มีสีที่กำหนด


คุณมีประสบการณ์เกี่ยวกับการสร้างความโปร่งใสหรือไม่? มีตัวอย่างหรือไม่ นั่นจะเป็นขั้นตอนต่อไป
Figaro

ฉันจะสร้างค่า x, y, z ที่จำเป็นสำหรับ interp () ได้อย่างไร ตัวอย่างเช่นถ้าความหนาแน่น () ใช้กริด 100x100 ฉันมีค่า z สำหรับแต่ละจุด แต่ฉันไม่มี x & y ในรูปแบบเวกเตอร์ที่ต้องการ (ฉันมีพิกัดของเพลาเท่านั้น)
Figaro

ทำลูปเพื่อให้ได้คู่พิกัด แต่มีฟังก์ชั่นนี้หรือไม่?
Figaro

2
ดูเหมือนว่าภาพสามารถยอมรับสีโปร่งใสหลังจากทั้งหมด ดู: menugget.blogspot.de/2012/04/... ในกรณีที่คุณยังต้องการใช้ interp คุณสามารถสร้างชุดพิกัด xy สำหรับระดับ z ของคุณด้วย: "grid <- expand.grid (x = x, y = y)"
Marc ในกล่อง

1

คุณอาจต้องการค้นหา ggplot2 ดูเหมือนว่าแพคเกจที่คุณได้ลองไม่มีโครงร่างสีที่ยอดเยี่ยมหรือ "ไหล" - ดูที่ RColorBrewer มีบล็อกที่นำแพคเกจเหล่านี้มาพร้อมกับตัวอย่างง่ายๆ

ฉันไม่แน่ใจว่าคุณกำลังพยายามพล็อตข้อมูลทางภูมิศาสตร์ตามที่แสดงในตัวอย่างที่เชื่อมโยงของคุณหรือไม่ แต่ถ้าคุณรู้ว่า Google มี "คู่มือนักพัฒนาแผนที่ API V2 แบบคงที่" และคุณสามารถรวม Google และ Rกับแพ็คเกจที่เรียกว่า RgoogleMaps .

ขอให้โชคดีกับการวิจัยของคุณ


ขออภัยถ้าฉันไม่ชัดเจน แต่ตอนนี้ปัญหาไม่ได้เป็นโทนสีของตัวเอง อย่างไรก็ตามฉันลองใช้ RColorBrewer ก่อนหน้านี้ในวันนี้: pacakge ที่ยอดเยี่ยม! มันเป็นข้อมูลเชิงพื้นที่ฉันไม่แน่ใจว่าฉันต้องการใช้ Google APIs แต่ฉันอาจจะดู
Figaro

0

คุณได้ลองใช้วิธีแก้ปัญหาแบบละเอียดแล้วdensityหรือยัง? ลองโต้แย้งdimyx=c(512, 512)หรือสูงกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.