ทุกคนสามารถแนะนำอัลกอริทึมในการสร้างแผนที่ความร้อนเพื่อให้เห็นภาพความหลากหลายของจุดได้หรือไม่? ตัวอย่างการประยุกต์ใช้สำหรับการทำแผนที่พื้นที่ที่มีความหลากหลายของสายพันธุ์สูง สำหรับบางสปีชีส์พืชทุกต้นได้รับการแมปแล้วจึงทำให้มีคะแนนสูง แต่มีความหมายน้อยมากในแง่ของความหลากหลายของพื้นที่ พื้นที่อื่น ๆ อย่างแท้จริงมีความหลากหลายสูง
พิจารณาข้อมูลอินพุตต่อไปนี้:
x y cat
0.8 8.1 B
1.1 8.9 A
1.6 7.7 C
2.2 8.2 D
7.5 0.9 A
7.5 1.2 A
8.1 1.5 A
8.7 0.3 A
1.9 2.1 B
4.5 7.0 C
3.8 4.0 D
6.6 4.8 A
6.2 2.4 B
2.2 9.1 B
1.7 4.7 C
7.5 7.3 D
9.2 1.2 A
และแผนที่ผลลัพธ์:
ใน Quadrant ซ้ายบนมีแพทช์ที่มีความหลากหลายสูงในขณะที่ Quadrant ขวาล่างจะมีพื้นที่ที่มีความเข้มข้นของจุดสูง แต่มีความหลากหลายต่ำ สองวิธีในการมองเห็นภาพความหลากหลายคือการใช้แผนที่ความร้อนแบบดั้งเดิมหรือนับจำนวนหมวดหมู่ที่แสดงในรูปหลายเหลี่ยมแต่ละรูป ตามภาพต่อไปนี้แสดงให้เห็นว่าวิธีการเหล่านี้มีการใช้งานที่ จำกัด เนื่องจากแผนที่ความร้อนแสดงให้เห็นถึงความรุนแรงที่ยิ่งใหญ่ที่สุดในด้านล่างขวาในขณะที่วิธีการ binning จะดูเหมือนกันทุกประการหากมีเพียงหนึ่งหมวดหมู่เท่านั้น รูปหลายเหลี่ยมช่องเก็บ แต่ผลลัพธ์จะกลายเป็นเม็ดเล็ก ๆ โดยไม่จำเป็น)
วิธีหนึ่งที่ฉันคิดว่าจะทำเช่นนี้คือการใช้อัลกอริทึม heatmap แบบดั้งเดิมโดยใช้จำนวนคะแนนของประเภทต่าง ๆ ภายในรัศมีที่กำหนดจากนั้นใช้การนับนั้นเป็นน้ำหนักของจุดเมื่อสร้าง heatmap อย่างไรก็ตามฉันคิดว่านี่อาจเป็นไปได้ของสิ่งประดิษฐ์ที่ไม่พึงประสงค์เช่นการเสริมแรงร่วมกันนำไปสู่ผลลัพธ์ที่คมชัดมาก นอกจากนี้จุดที่แมปประเภทเดียวกันจะยังคงแสดงให้เห็นว่ามีความเข้มข้นสูงอย่างต่อเนื่อง
แนวทางอื่น (น่าจะดีกว่า แต่แพงกว่าการคำนวณ) จะเป็น:
- คำนวณจำนวนหมวดหมู่ทั้งหมดในชุดข้อมูล
- สำหรับแต่ละพิกเซลในภาพที่ส่งออก:
- สำหรับแต่ละหมวดหมู่:
- คำนวณระยะทางไปยังจุดตัวแทนที่ใกล้ที่สุด (r) [อาจ จำกัด โดยรัศมีบางอย่างที่เกินขอบเขตซึ่งอิทธิพลนั้นเล็กน้อย)
- เพิ่มสัดส่วนการถ่วงน้ำหนักเป็น 1 / r 2
- สำหรับแต่ละหมวดหมู่:
มีอัลกอริทึมที่ฉันไม่รู้จักที่จะทำเช่นนี้หรือวิธีอื่น ๆ
แก้ไข
ทำตามคำแนะนำของ Tomislav Muic ฉันได้คำนวณ heatmaps สำหรับแต่ละหมวดหมู่และทำให้พวกมันเป็นมาตรฐานโดยใช้สูตรต่อไปนี้ (เครื่องคำนวณแรสเตอร์ QGIS):
((heatmap_A@1 >= 1) + (heatmap_A@1 < 1) * heatmap_A@1) +
((heatmap_B@1 >= 1) + (heatmap_B@1 < 1) * heatmap_B@1) +
((heatmap_C@1 >= 1) + (heatmap_C@1 < 1) * heatmap_C@1) +
((heatmap_D@1 >= 1) + (heatmap_D@1 < 1) * heatmap_D@1)
กับผลลัพธ์ต่อไปนี้ (ความคิดเห็นภายใต้คำตอบของเขา):