আরে মানচিত্রে পয়েন্ট ওভারপ্লোটিং (যেমন ggplot2 সহ) - কীভাবে পয়েন্টগুলিকে পাশের দিকে ঠেলাবেন, আসল অবস্থানগুলি চিহ্নিত করুন, নিকটবর্তী পয়েন্টগুলি একত্রিত করবেন…?


12

আমার কাছে ভাষা, তাদের দ্রাঘিমাংশ এবং অক্ষাংশ এবং একটি বৈশিষ্ট্য মান (একটি বিভাগ 1, বিভাগ 2 বা উভয়ই রয়েছে - প্লটটিতে এগুলি যথাক্রমে লাল, নীল এবং সবুজ হিসাবে চিহ্নিত রয়েছে) সমেত একটি ডাটাবেস পেয়েছি। ভাষা প্রতি তিনটি পয়েন্ট পর্যন্ত থাকতে পারে এবং স্বাভাবিকভাবে দুটি ভাষার পয়েন্ট একে অপরের খুব কাছাকাছি থাকতে পারে।

    name            longitude   latitude    sp_sum
1   Modern Armenian 45          40          both
2   Modern Armenian 45          40          both
3   Modern Armenian 45          40          spatial
4   Dieri           138         -28.1667    both
5   Dieri           138         -28.1667    both
6   Finnish         25.5577     64.7628     non-spatial
7   Crimean Tatar   28.1418     43.8398     spatial
8   Ese Ejja        -67.515     -11.7268    non-spatial
9   Makhuwa         38.8052     -14.8509    non-spatial
...

আমি আর প্যাকেজ ggplot2 ব্যবহার করছি (এটিই আমি সবচেয়ে বেশি পরিচিত, তাই আমি এটি ব্যবহার করে খুশি হব - তবে অন্যান্য সমাধানগুলিও স্বাগত) are পূর্ববর্তী প্রচেষ্টা থেকে একটি ক্রপ এখানে রয়েছে (কোড: নীচে দেখুন 1 ):

পূর্ববর্তী প্রচেষ্টা থেকে ক্রপ করুন

প্রতিটি পয়েন্টের জন্য, আমি (রুক্ষ) অবস্থানটি - পাশাপাশি মানটি - এখনও দৃশ্যমান হতে চাই। (যদি কোনও একক ভাষার জন্য একাধিক পয়েন্ট থাকে তবে সেগুলি একত্রিত হতে পারে))

কোন উপায় আছে কি ...

  • ... (পরিবর্তে, বলে কম এলোমেলোভাবে, geom_jitter ব্যবহার করে - সেখানে যে ধরনের অনেক যথেষ্ট তাই কোনও overplotting নেই পাশ থেকে পয়েন্ট সরাতে লুকাচুরি মধ্যে beeswarm উদাহরণস্বরূপ প্যাকেজ)?
  • ... এবং / অথবা কোনও ধরণের "লাইন" পয়েন্টের মূল অবস্থানটির দিকে ইশারা করে যদি এটি সরিয়ে নিতে হয়?
  • ... বা ঘনিষ্ঠভাবে পয়েন্টগুলি এমনভাবে একত্রিত করার জন্য যাতে তারা এখনও স্পষ্ট থাকে (সেখানে সম্ভবত কোনও কার্য প্রযুক্তি রয়েছে যা বেনিং ব্যবহার করে, যেমন স্ট্যাট_বিন * বা এর মতো কোনও প্রভাব রয়েছে)?
  • ... বা ওয়েবসাইটগুলিতে দেখা একটি "ইন্টারেক্টিভ প্লট" তৈরি করার জন্য যা এখনও পিডিএফের অন্তর্ভুক্ত হতে পারে (আমি এখানে অ্যানিমেশন এবং চকচকের মতো প্যাকেজগুলির দক্ষতা সম্পর্কেও ভাবছি )? উদাহরণস্বরূপ, wals.infoএটির মতো দেখাচ্ছে :

    wals

পূর্ববর্তী পোস্টটি থেকে, আমি জানি যে ডিরেক্টলাবেলস প্যাকেজটি লেবেলগুলি স্থানান্তর করতে পারে, তবে পয়েন্টগুলি পাশাপাশি স্থানান্তরিত করার কোনও উপায় আমি পাইনি।

নির্দ্বিধায় স্পষ্টতা জিজ্ঞাসা করুন!

নোট: আমি সচেতন যে overplotting উপর প্রশ্নগুলির একটি সংখ্যা আছে, কিন্তু ঐ যে আমি সব করলো মধ্যে তাকিয়ে আছে হতে একটি ভিন্ন (অর্থাত পরিসংখ্যাত) উদ্দেশ্য আছে (আমি পড়েছেন তা দাবি না এটা সব , তাই আমি ' d অবশ্যই একটি লিঙ্ক গ্রহণ করতে পেরে খুশি হন)। আমি জানি যে পোস্টগুলি আমি জানি এবং এটি প্রাসঙ্গিক হতে পারে তালিকাভুক্ত করার চেষ্টা করব (- আমি যা পড়েছি তা থেকে এগুলির কোনওটিই আমার প্রশ্নের সঠিক উত্তর দেয় না))


1 নীচের কোডের লাইনগুলি উপরে থেকে ক্রপ তৈরি করেছে।

library(OpenStreetMap)
library(ggplot2)

data <- read.csv(header = T, sep = ",", dec = ".", quote= "'",
text = "'','name','longitude','latitude','sp_sum'
'1','Modern Armenian',45,40,'both'
'2','Modern Armenian',45,40,'both'
'3','Modern Armenian',45,40,'spatial'
'4','Dieri',138,-28.1667,'both'
'5','Dieri',138,-28.1667,'both'
'6','Finnish',25.5577,64.7628,'non-spatial'
'7','Crimean Tatar',28.1418,43.8398,'spatial'
'8','Sochiapam Chinantec',-96.6079,17.7985,'non-spatial'
'9','Ese Ejja',-67.515,-11.7268,'non-spatial'
'10','Makhuwa',38.8052,-14.8509,'non-spatial'
'11','Mualang',111.077,0.31083,'non-spatial'
'12','Martuthunira',116.607,-20.9294,'non-spatial'
'13','Evenki',108.626,53.85,'both'
'14','Afrikaans',30,-22,'both'
'15','Male (Ethiopia)',36.9892,5.91975,'both'
'16','Manchu',126.557,47.3122,'both'
'17','Dime',36.3329,6.20951,'non-spatial'
'18','Koorete',37.8679,5.80545,'non-spatial'
'19','Wolaytta',37.7537,6.32668,'both'
'20','Dizin',35.5763,6.1405,'both'")

map <- openproj(openmap(c(85, -179.9), c(-60, 179.9), zoom = 2, type = "nps"))
plot <- autoplot(map) + 
  geom_point(data = data, aes(x = longitude, y = latitude),
             color = "white", alpha = 0.8, size = 8) +
  geom_point(data = data, aes(x = longitude, y = latitude, color = sp_sum),
             alpha = 0.3, size = 4)
plot

প্রশ্নটি বোঝার এবং উত্তরকে আরও সহজ করার জন্য আমি কি আরও উন্নত করতে পারি? আপনার কোনও ধারণা থাকলে দয়া করে আমাকে জানান!
maj

1
এটি এমন কোনও প্রশ্ন নয় যা আমার কাছে সহায়তা করার জন্য প্রাসঙ্গিক দক্ষতা রয়েছে তবে কিছু তালিকায় এটি কিছুটা উঁচুতে প্রদর্শিত হওয়ার জন্য আমি এটিকে উন্নত করেছিলাম। যদি আপনার কোন মন্তব্য না পান, তাহলে সাহায্যের আরও উন্নত, এবং যে কোনো ইভেন্টে, আমি পর্যালোচনার সুপারিশ / ঘন অন্তর এটা সংশোধন এ দেওয়া পরামর্শ চিন্তা-ভাবনা করার যে meta.gis.stackexchange.com/a/3353
PolyGeo

আমি ভাবছি আপনি কিছু জোর-নির্দেশিত গ্রাফ কার্যকারিতা ব্যবহার করতে চাইতে পারেন। আমি কীভাবে এটি করব এবং কিছু পয়েন্ট অ্যাঙ্করড রাখব তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি যা ভাবছি তা হ'ল সমস্ত ক্লাস্টারগুলি চিহ্নিত করা (কিছু নৈকট্য গ্রুপিং ফাংশন দ্বারা) এবং ক্লাস্টার সেন্ট্রয়েডকে অ্যাঙ্কর হিসাবে ব্যবহার করা এবং এর সদস্যদের ভাসমান (এবং না) সেন্ট্রয়েড নিজেই ষড়যন্ত্র করছেন - এটির সামান্য গ্রাফের সাথে সংযুক্ত প্রান্তকে অ্যাঙ্কর করার জন্য এটি ব্যবহার করে)। এবং অবশ্যই, যদি কোনও ক্লাস্টারের কেবলমাত্র একটি সদস্য থাকে তবে সেগুলি তাদের অবস্থানের সাথেও অ্যাঙ্কর করা উচিত।
aaryno

আমি ... "এটিকে অন্যদিকে অনুসরণ করি নি, আবার কেবল স্ক্রেটারপ্লটগুলিতে প্রয়োগ করা যায় বলে মনে হয়," কারণ এটি একটি ছড়িয়ে ছিটিয়ে থাকা।
হোবার

আমি স্বীকার করি যে আমি অবশ্যই একটি ভুল শব্দটি ব্যবহার করেছি - আমি স্ক্যাটারপ্লোট বলতে যা বোঝাতে চাইছিলাম তা হ'ল সাধারণ পরিসংখ্যান স্ক্রেটারপ্লট যেখানে আমাদের এখানে যে ধরণের প্লট রয়েছে তার চেয়ে অবস্থান সাধারণত কম গুরুত্বপূর্ণ (= একটি মানচিত্র - যদি পয়েন্টগুলি এখানে স্থানান্তরিত হয় তবে এটি সুস্পষ্ট) অবিলম্বে)।
maj

উত্তর:


2

এখনও অবধি আমি কেবলমাত্র একটি সুদর্শন শালীন চেহারা দেখতে পেয়েছি: প্যাকক্রিলস আর প্যাকেজটি অন্য কোনও উদ্দেশ্যে ডিজাইন করা হয়েছে, তবে এটি একে অপরের থেকে দূরে দূরে ঠেলাঠেলি করে একটি দুর্দান্ত কাজ করেছে (একই ব্লগ পোস্টটিও দেখুন )। আমি এই প্যাকেজের অভ্যন্তরীণ সমস্ত কার্যকারিতা বুঝতে পারি না, তবে ভাগ্যক্রমে, আপনি যেমনটি খুঁজে পাবেন, ওয়েবসাইটের উদাহরণস্বরূপ ফাইলটি সরাসরি সরাসরি ব্যবহার করা যেতে পারে - পরিবর্তিত হওয়া সমস্তরই প্রয়োজন পরিবর্তনশীল নাম, বৃত্তের মধ্যে দূরত্ব (বা পয়েন্ট) , আপনি যে কার্যাদি ব্যবহার করেন তার উপর নির্ভর করে) এবং গ্রাফের "সীমাবদ্ধতা" (যেমন 180 depending)।

(শেষ পর্যন্ত এটি সমস্ত circleLayout()ফাংশনে নেমে আসে , যা লোন, ল্যাট এবং ব্যাসার্ধের সাথে একটি ডেটা ফ্রেম নেয় (অর্থাত্ দূরত্ব) কলাম এবং দুটি 2-সংখ্যাসূচক xlim / পাতলা ভেক্টর - এটি উন্নত বিন্দু অবস্থানের সাথে ডেটা ফ্রেম প্রদান করে))

"প্লট" যা সাধারণত প্যাকক্রিল দ্বারা তৈরি করা হয় - আপনি এটি ইতিমধ্যে এখানে কাজ করতে দেখতে পারেন। মানচিত্র

  • দয়া করে প্রশ্নটির 'পূর্ববর্তী' মানচিত্রের স্নিপেটের সাথে 'পরে' মানচিত্রটি তুলনা করুন

0

এরকম কিছু, সম্ভবত?

data$spacing_x = 5
data$spacing_y = 5

for(i in 2:nrow(data)) {
  if( abs(data$latitude[i]-data$latitude[i+1]) < 2 ) {
    data$spacing_y[i] = data$spacing_y + 6 +jitter(data$spacing_y,8)
    data$spacing_y[i+1] = data$spacing_y + 6 + jitter(data$spacing_y,8)
  }
}

for(i in 2:nrow(data)) {
     if( abs(data$longitude[i]-data$longitude[i+1]) < 2 ) {
      data$spacing_x[i] = data$spacing_x + jitter(data$spacing_x,4)
      data$spacing_x[i+1] = data$spacing_x +jitter(data$spacing_x,4)
     }
}

for(i in 2:nrow(data)) {
  if( abs(data$spacing_y[i]-data$spacing_y[i+1]) < 1.5 ) {
    data$spacing_y[i] = data$spacing_y + 2 
    data$spacing_y[i+1] = data$spacing_y + 2
  }
}

for(i in 2:nrow(data)) {
  if( abs(data$spacing_x[i]-data$spacing_x[i+1]) < 1.5 ) {
    data$spacing_x[i] = data$spacing_x + 2 
    data$spacing_x[i+1] = data$spacing_x + 2
  }
}


plot = autoplot(map) + 
  geom_segment(data = data
               , mapping=aes(x=longitude
                             , y=latitude
                             , xend=longitude + spacing_x
                             , yend=latitude + spacing_y)
               , size=0.5, color="black"
               , alpha = 0.9) +
  geom_point(data = data
             , aes(x = longitude+spacing_x
                  , y = latitude+spacing_y)
             , color = "white"
             , alpha = 0.8, size = 8) +
  geom_point(data = data
             , aes(x = longitude+spacing_x
                   , y = latitude+spacing_y
                   , color = sp_sum)
             , alpha = 0.3, size = 4)
  xlab("") +
  ylab("")
plot

আমি দেখি. আপনি wals.info থেকে স্ক্রিনশট থেকে "মূল অবস্থানে রেখাগুলি প্রতিলিপি" দেওয়ার চেষ্টা করেছিলেন, তাই না? এটা একটা শুরু, আমার ধারণা। তবে আমি যদি এটি সঠিকভাবে দেখি তবে এটি আমার সমস্যার উন্নততর অংশটি সমাধান করতে পারে না (যেমন পয়েন্টগুলি এখনও ওভারল্যাপ করে।
maj

বাকিটি ডাটা ফ্রেম ম্যানিপুলেশন হওয়া উচিত। যদি / for লুপ ব্যবধান পরিচালনা করতে পারে - এর মধ্যে একটি বিবৃতিতে আরও বলা যেতে পারে যে যদি বিন্দুগুলির মধ্যে

আশা করি কেউ বা আপনি লুপের জন্য আমার কুশ্রীটিকে ঠিক করতে পারেন। শুভকামনা।

@ ইন্নোম: আসলে, এই 'ডেটা ফ্রেম ম্যানিপুলেশন' কীভাবে কাজ করতে পারে সে সম্পর্কে আমি ইঙ্গিতগুলির দিকে উন্মুক্ত।
maj
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.