আর মধ্যে বুদ্ধিমান পয়েন্ট লেবেল স্থাপন


102

1) এমন কোনও আর লাইব্রেরি / ফাংশন রয়েছে যা আর প্লটে অন্তর্ভুক্ত লেবেল স্থাপনের প্রয়োগ করবে? আমি কিছু চেষ্টা করেছি তবে সেগুলি সব সমস্যাযুক্ত - অনেকগুলি লেবেল একে অপরকে বা অন্য পয়েন্টগুলিতে (বা প্লটের অন্যান্য বস্তুগুলিকে ওভারল্যাপ করে দিচ্ছে তবে আমি দেখতে পাচ্ছি যে এটি হ্যান্ডেল করা আরও শক্ত)।

2) যদি তা না হয় তবে কীভাবে কোনও সমস্যাযুক্ত পয়েন্টগুলির জন্য লেবেল স্থাপনের সাথে অ্যালগরিদমকে স্বাচ্ছন্দ্যযুক্ত করার কোনও উপায় আছে? সর্বাধিক আরামদায়ক এবং দক্ষ সমাধান চেয়েছিল।

আপনি আমার প্রজননযোগ্য উদাহরণ সহ অন্যান্য সম্ভাবনাগুলি খেলতে এবং পরীক্ষা করতে পারেন এবং আমার চেয়ে ভাল ফলাফল অর্জন করতে সক্ষম কিনা তা দেখতে পারেন:

# data
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 
0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 
0.9717, 0.9357)
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", 
"SaxRub", "TurMer", "TurPil", "TurPhi")

# basic plot
plot(x, y, asp=1)
abline(h = 1, col = "green")
abline(v = 1, col = "green")

লেবেলিংয়ের জন্য, আমি তখন এই সম্ভাবনাগুলি চেষ্টা করেছিলাম, সত্যিই কেউ ভাল নেই:

1) এটি এক ভয়ানক:

text(x, y, labels = ShortSci, cex= 0.7, offset = 10)

2) আপনি যদি সমস্ত পয়েন্টের জন্য লেবেল স্থাপন করতে না চান তবে এটি কেবলমাত্র বহিরাগতদের জন্য তবে এটি একটি ভাল তবে লেবেলগুলি প্রায়শই ভুল রাখা হয়:

identify(x, y, labels = ShortSci, cex = 0.7)

৩) এটিকে প্রতিশ্রুতিবদ্ধ মনে হলেও লেবেলগুলি পয়েন্টের খুব কাছাকাছি থাকার সমস্যা রয়েছে; আমাকে তাদের স্পেস দিয়ে প্যাড করতে হয়েছিল তবে এটি খুব বেশি সহায়তা করে না:

require(maptools)
pointLabel(x, y, labels = paste("  ", ShortSci, "  ", sep=""), cex=0.7)

4)

require(plotrix)
thigmophobe.labels(x, y, labels = ShortSci, cex=0.7, offset=0.5)

5)

require(calibrate)
textxy(x, y, labs=ShortSci, cx=0.7)

তুমাকে অগ্রিম ধন্যবাদ!

সম্পাদনা করুন: করণীয়: চেষ্টা labcurve {Hmisc}


2
আর প্রশ্নগুলির উত্তরগুলি মনে হচ্ছে, দুর্ভাগ্যক্রমে, স্ট্যাকওভারফ্লো এবং ক্রসভিলেটেডের মধ্যে সমানভাবে বিভক্ত হওয়া। এই ক্ষেত্রে, প্রশ্নটি সেখানে 4 দিন আগে থেকে একটির সদৃশ ।
এড স্টাব

3
আমি একই ধরণের সমস্যায় পড়েছি এবং একটি মৌলিক প্যাকেজ লিখেছিলাম যা বস্তুর অবস্থান সামঞ্জস্য করতে বল ক্ষেত্র সিমুলেশন ব্যবহার করে। যদিও ggplot এর সাথে সংহতকরণ ইত্যাদিসহ অনেক উন্নতি সম্ভব হয়েছে তবে মনে হয় এটি কার্য সম্পাদন করে। নিম্নলিখিত কার্যকারিতা চিত্রিত করে। যদি কেউ সমস্যাটি নিয়ে চলে যায় এবং উত্তর অনুসন্ধান করে, আশা করি এটি কিছুটা সহায়ক হবে:install.packages("FField") library(FField) FFieldPtRepDemo()
গ্রেগক

আমি কি আপনাকে জিগ্রিপেল চেষ্টা করতে বলতে পারি ?
কামিল স্লোইকোভস্কি

প্রিয় @ জোরান, দয়া করে আপনার মন্তব্যটি লিখুন ")) ggplot2 গ্রাফের জন্য, গ্রেগ্রেল নামে একটি নতুন বিকল্প রয়েছে যা অনেক লোক পছন্দ করে বলে মনে হয়" " একটি মন্তব্য বা একটি উত্তরে। এখানে আমি কেবলমাত্র চেষ্টা করেছি এমন বিকল্পগুলির তালিকা অন্তর্ভুক্ত করেছি তবে সন্তোষজনক নয় । যদি এটি এমন কিছু হয় যা ভালভাবে কাজ করে তবে তা উত্তর হওয়া উচিত।
টিএমএস

উত্তর:


49

প্রথমত, এই সমস্যার সমাধানের ফলাফলগুলি এখানে:

এখানে চিত্র বর্ণনা লিখুন

আমি প্রিভিউ হাতে হাতে এটি করেছি (ওএস এক্স-তে খুব বেসিক পিডিএফ / চিত্র দর্শক) মাত্র কয়েক মিনিটের মধ্যে। ( সম্পাদনা করুন: ওয়ার্কফ্লোটি আপনার প্রত্যাশা মতোই ছিল: আমি প্লটটি আরডি থেকে পিডিএফ হিসাবে সংরক্ষণ করেছি, এটি পূর্বরূপে খুলেছি এবং পছন্দসই লেবেলগুলি সহ 9 টেক্সট বাক্সগুলি তৈরি করেছি এবং তারপরে কেবল তাদের মাউস দিয়ে টেনে নিয়েছি যতক্ষণ না তারা তাকান) ভাল। তারপরে আমি এসওতে আপলোড করার জন্য একটি পিএনজি রফতানি করেছি))

এখন, আপনি এটিকে বিস্মৃতকরণের পক্ষে ভোট দেওয়ার এবং এই প্রক্রিয়াটি স্বয়ংক্রিয় করার বিষয়ে কীভাবে বিন্দু মন্তব্য করতে চান তার দৃ ur় আগ্রহে আত্মত্যাগ করার আগে, শুনুন!

অ্যালগরিদমিক সমাধানগুলি সন্ধান করা সম্পূর্ণরূপে সূক্ষ্ম এবং (আইএমএইচও) সত্যই আকর্ষণীয়। তবে আমার কাছে, পয়েন্ট লেবেলিং পরিস্থিতি প্রায় তিনটি বিভাগে পড়ে:

  1. আপনার পয়েন্টের একটি সংখ্যক সংখ্যা রয়েছে, কোনওটিই ভয়ঙ্করভাবে একত্রে কাছাকাছি নেই । এই ক্ষেত্রে, আপনি প্রশ্নের তালিকাভুক্ত সমাধানগুলির মধ্যে একটি সম্ভবত মোটামুটি ন্যূনতম টুইচিংয়ের সাথে কাজ করবে।
  2. আপনি পয়েন্ট, এর মধ্যে কয়েকটি খুব ঘনিষ্ঠভাবে টিপিক্যাল আলগোরিদিমিক সমাধানের জন্য বস্তাবন্দী হয় ভাল ফলাফল দিতে অল্প সংখ্যক আছে । এই ক্ষেত্রে, যেহেতু আপনি শুধুমাত্র পয়েন্ট অল্প সংখ্যক (একটি চিত্র সম্পাদক বা নিখুঁত টিউন করার জন্য আপনার কলের মাধ্যমে হয় হ্যান্ড তাদের লেবেল আছে, text) নয় যে অনেক প্রচেষ্টা।
  3. আপনি পয়েন্ট একটি মোটামুটি বড় সংখ্যা আছে । এই ক্ষেত্রে, আপনার সত্যিই এগুলি যে কোনও উপায়ে লেবেল করা উচিত নয়, কারণ বিপুল সংখ্যক লেবেলকে চাক্ষুষভাবে প্রক্রিয়াকরণ করা শক্ত hard

: সাবানবক্সে আরোহণ:

যেহেতু আমাদের মত ভাবেন ভালবাসেন অটোমেশন, আমি মনে করি আমরা প্রায়ই চিন্তা ফাঁদে পা প্রায় একটি ভাল পরিসংখ্যানগত গ্রাফিক উত্পাদক প্রতি দৃষ্টিভঙ্গি স্বয়ংক্রিয় করা কর্তব্য। আমি শ্রদ্ধার সাথে (বিনীতভাবে!) একমত নই।

আপনার মাথার যে চিত্রটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে এমন কোনও সাধারণ পরিসংখ্যানমূলক প্লট পরিবেশ নেই। আর, জিজিপ্লট 2, ল্যাটিস ইত্যাদির মতো জিনিসগুলি বেশিরভাগ কাজ করে; তবে সেই অতিরিক্ত সামান্য কিছু টুইট করা, এখানে একটি লাইন যুক্ত করা, সেখানে একটি মার্জিন সামঞ্জস্য করা সম্ভবত অন্য কোনও সরঞ্জামের পক্ষে আরও ভাল উপযুক্ত।

: সাবানবক্স থেকে নীচে আরোহণ:

আমি আরও উল্লেখ করব যে আমি মনে করি আমরা সকলে <10-15 পয়েন্ট সহ স্ক্রেটারপ্লটগুলি নিয়ে আসতে পেরেছি যা হাতের দ্বারা এমনকি পরিষ্কারভাবে লেবেল করা প্রায় অসম্ভব হবে এবং এগুলি সম্ভবত কারও সাথে আসা কোনও স্বয়ংক্রিয় সমাধান ভেঙে ফেলবে।

অবশেষে, আমি আবার বলতে চাই যে আমি জানি এটি আপনি যে উত্তরটি খুঁজছেন তা নয়। এবং আমি বলছি না যে অ্যালগরিদমিক প্রচেষ্টাগুলি অকেজো বা বোবা। আমি এই প্রশ্নটিকে আপ-ভোটাভুটি করেছি এবং খুশিতে আকর্ষণীয় অ্যালগরিদমিক সমাধানগুলি উপস্থাপন করব!

আমি এই উত্তরটি পোস্ট করার কারণটি হ'ল আমি মনে করি এই প্রশ্নটি ভবিষ্যতের ডুপ্লিকেটগুলির জন্য প্রমিত "পয়েন্ট লেবেলিং ইন" প্রশ্ন হওয়া উচিত এবং আমি মনে করি যে হ্যান্ড-লেবেলিংয়ের সাথে জড়িত সমাধানগুলি টেবিলে একটি আসনের প্রাপ্য।


10
আর একটি ম্যানুয়াল উপায় হ'ল প্লটটি একটি এসভিজি হিসাবে সংরক্ষণ করা এবং এটি ইনস্কেপ ব্যবহার করে সম্পাদনা করা, তারপরে পিডিএফ তৈরি করা।
স্পেসডম্যান

হাই জোরান, আপনার উত্তরের জন্য ধন্যবাদ। ঠিক আছে, আমি এই সমাধানটি গ্রহণ করি, যদিও আমি মনে করি কম্পিউটারটিকে প্রথমে এই সেরা করা উচিত এবং তারপরে ম্যানুয়াল হস্তক্ষেপের অনুরোধ জানানো হয়। এখানে আমি সবচেয়ে আরামদায়ক এবং দ্রুত সমাধান খুঁজছি। আপনি কীভাবে প্লটটি ধাপে ধাপে তৈরি করেছিলেন তা বর্ণনা করতে পারেন? আপনি আর, রফতানি, প্রিভিউতে লেবেলগুলি সরানো ইত্যাদি কী উত্পন্ন করেছেন?
টিএমএস

1
@TomasT। আচ্ছা বুঝলাম. সেক্ষেত্রে আমি "প্রতারিত", ধরণের। আমি উপরের একটি পদ্ধতি ব্যবহার করে লেবেল সহ একটি পিডিএফ উত্পন্ন করেছি এবং এর বাইরেও একটি এবং গাইড হিসাবে লেবেলগুলির সাথে একটি ব্যবহার করেছি।
জোর করুন

1
+1 এটি দুর্দান্ত উত্তর। মেটা-সিভিতে কেন উপস্থিত হয় তার কিছু ব্যাখ্যা : মন্তব্যগুলি দেখুন।
whuber

1
একটি ছোট সেট লেবেল হাতে নিয়ে যাওয়া বুদ্ধিমান মনে হয় তবে আপনি সেগুলি প্রথমে স্বয়ংক্রিয়ভাবে তৈরি করতে পারেন এবং তারপরে সেগুলি সরিয়ে নিতে পারেন। এইভাবে আপনি নিজেকে অনেক কাজ বাঁচাচ্ছেন, এবং ভুল-লেবেলিংয়ের সম্ভাবনাও হ্রাস করছেন ...
naught101

42

ggrepelggplot2স্ক্যাটারপ্লটগুলিতে প্রয়োগ করার সময় প্রতিশ্রুতিবদ্ধ দেখায় ।

# data
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 
0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 
0.9717, 0.9357)
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", 
"SaxRub", "TurMer", "TurPil", "TurPhi")


df <- data.frame(x = x, y = y, z = ShortSci)
library(ggplot2)
library(ggrepel)

ggplot(data = df, aes(x = x, y = y)) + theme_bw() + 

    geom_text_repel(aes(label = z), 
       box.padding = unit(0.45, "lines")) +

    geom_point(colour = "green", size = 3)

এখানে চিত্র বর্ণনা লিখুন


10

আপনি ডিরেক্টলাবেলস প্যাকেজ চেষ্টা করেছেন ?

এবং, বিটিডব্লিউ, পোজ এবং অফসেট আর্গুমেন্টগুলি ভেক্টরগুলিকে আপনাকে সঠিক অবস্থানে আনতে দিতে পারে যখন যখন প্লটের কয়েকটি রানে যুক্তিসঙ্গত পয়েন্ট থাকে।


ডিরেক্টলাবেলস প্যাকেজটি কি সাধারণ plot()প্লটের সাথে ব্যবহার করা যেতে পারে ? আমি এত চেষ্টা করেও সফল হই নি ... ধন্যবাদ! পিএস: @ স্পিডম্যান এবং বেন, আমি আর আপডেট সম্পর্কে আমার মন্তব্যগুলি পরিষ্কার করেছি, যেহেতু সেগুলি এত বেশি আকর্ষণীয় নয় - আপনিও এটি করতে পারেন।
টিএমএস

6

আমি কিছু সমাধান খুঁজে পেয়েছি! এটি চূড়ান্ত এবং দুর্ভাগ্যজনকভাবে আদর্শ নয়, তবে এটিই এখন আমার জন্য সবচেয়ে ভাল কাজ করে। এটি অর্ধেক অ্যালগোরিটমিক, অর্ধেক ম্যানুয়াল, সুতরাং এটি জোরানের স্কেচ করা খাঁটি ম্যানুয়াল সমাধানের তুলনায় সময় সাশ্রয় করে।

আমি সাহায্যের খুব গুরুত্বপূর্ণ অংশটিকে উপেক্ষা করেছি !?identify

লেবেল স্থাপনের জন্য ব্যবহৃত অ্যালগরিদম পাঠের দ্বারা ব্যবহৃত যেমন একইভাবে পোস্ট নির্দিষ্ট করা থাকে, ততই পার্থক্য হ'ল চিহ্নিত পয়েন্টের সাথে সম্পর্কিত পয়েন্টারের অবস্থান চিহ্নিতকরণের ক্ষেত্রে অবস্থান নির্ধারণ করে।

সুতরাং আপনি যদি identify()আমার প্রশ্নে যেমনটি লিখেছেন সমাধানটি যদি আপনি ব্যবহার করেন তবে আপনি সরাসরি সেই পয়েন্টটিতে ক্লিক না করে লেবেলের অবস্থানকে প্রভাবিত করতে পারেন তুলনামূলকভাবে পছন্দসই দিকে তুলনামূলকভাবে !!! ঠিক দুর্দান্ত কাজ!

নেতিবাচক দিকটি হল যে এখানে কেবলমাত্র 4 টি অবস্থান রয়েছে (শীর্ষ, বাম, নীচে, ডান), তবে আমি আরও 4 টি (উপরে-বাম, উপরে-ডান, নীচে-বাম, নীচে-ডান) কৃতজ্ঞ হব ... সুতরাং আমি লেবার পয়েন্টগুলিতে এটি ব্যবহার করুন যেখানে এটি আমাকে বিরক্ত করে না এবং জোরান প্রস্তাবিত হিসাবে আমার পয়েন্টগুলি সরাসরি আমার পাওয়ারপয়েন্ট উপস্থাপনায় রেখে দেয়

পিএস: আমি এখনও সরাসরি জাল / জিজিপ্লাট সমাধানের পরীক্ষাগুলি চেষ্টা করিনি, আমি এখনও বেসিক প্লট লাইব্রেরি ব্যবহার করতে পছন্দ করি।


4

আমি আপনাকে wordcloudপ্যাকেজটি একবার দেখুন পরামর্শ দিই । আমি জানি এই প্যাকেজটি ঠিক পয়েন্টগুলিতে নয় বরং নিজের লেবেলে ফোকাস করে এবং শৈলীটি বরং স্থির বলে মনে হয়। তবে তবুও, এটি ব্যবহার করে আমি যে ফলাফল পেয়েছি তা বেশ চমকপ্রদ ছিল। এছাড়াও নোট করুন যে প্রশ্নে থাকা প্যাকেজ সংস্করণটি আপনি প্রশ্নটি জিজ্ঞাসা করার সময় সম্পর্কে প্রকাশ হয়েছিল, সুতরাং এটি এখনও খুব নতুন।

http://blog.fellstat.com/?cat=11


3

আমি addTextLabels()একটি প্যাকেজের মধ্যে ডাকা একটি আর ফাংশন লিখেছি plotteR। প্যাকেজটি নিম্নলিখিত কোডগুলি ব্যবহার করে সরাসরি আপনার আর লাইব্রেরিতে ইনস্টল করা যেতে পারে:

install.packages("devtools")
library("devtools")
install_github("JosephCrispell/basicPlotteR")

প্রদত্ত উদাহরণের জন্য, আমি নীচের সাথে সংযুক্ত উদাহরণ চিত্রটি উত্পন্ন করতে নিম্নলিখিত কোডটি ব্যবহার করেছি।

# Load the plotteR library
library(plotteR)

# Create vectors storing the X and Y coordinates
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 
      0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 
      0.9717, 0.9357)

# Store the labels to be plotted in a vector
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", 
             "SaxRub", "TurMer", "TurPil", "TurPhi")

# Plot the X and Y coordinates without labels
plot(x, y, asp=1)
abline(h = 1, col = "green")
abline(v = 1, col = "green")

# Add non-overlapping text labels
addTextLabels(x, y, ShortSci, cex=0.9, col.background=rgb(0,0,0, 0.75), 
              col.label="white")

এটি পয়েন্টের সূক্ষ্ম গ্রিড থেকে স্বয়ংক্রিয়ভাবে বিকল্প অবস্থান নির্বাচন করে কাজ করে। গ্রিডের নিকটতম পয়েন্টগুলি প্রথমে পরিদর্শন করা হয় এবং যদি তারা কোনও প্লট করা পয়েন্ট বা লেবেলগুলির সাথে ওভারল্যাপ না করে তবে নির্বাচন করা হয়। আপনি যদি আগ্রহী হন তবে উত্স কোডটি একবার দেখুন ।

উদাহরণ চিত্র


2

কোনও উত্তর নয়, তবে একটি মন্তব্যের জন্য খুব দীর্ঘ। খুব সহজ পদ্ধতির যা সহজ ক্ষেত্রে কাজ করতে পারে, কোথাও জোড়ানের পোস্ট-প্রসেসিং এবং আরও পরিশীলিত অ্যালগরিদমের মধ্যে যে উপস্থাপন করা হয়েছে in-placeতা হ'ল ডেটা ফ্রেমে সহজ রূপান্তর করা।

আমি এটি দিয়ে চিত্রিত করলাম ggplot2কারণ বেস আর প্লটগুলির চেয়ে আমি সিনট্যাক্সের সাথে বেশি পরিচিত।

df <- data.frame(x = x, y = y, z = ShortSci)
library("ggplot2")
ggplot(data = df, aes(x = x, y = y, label = z)) + theme_bw() + 
    geom_point(shape = 1, colour = "green", size = 5) + 
    geom_text(data = within(df, c(y <- y+.01, x <- x-.01)), hjust = 0, vjust = 0)

আপনি দেখতে পাচ্ছেন, এই উদাহরণস্বরূপ ফলাফলটি আদর্শ নয়, তবে এটি কিছু উদ্দেশ্যে যথেষ্ট ভাল হতে পারে। এবং এটি বেশ অনায়াস, সাধারণত এর মতো কিছু যথেষ্টwithin(df, y <- y+.01)

এখানে চিত্র বর্ণনা লিখুন


2
বরং সংশোধন dfব্যবহার within, আমি প্রায়ই নন্দনতত্ব সামঞ্জস্য করে এই কাজ: geom_text(aes(x = x - .01, y = y + .01), hjust = 0, vjust = 0)ক্লিনার বলে মনে হয়।
গ্রেগোর থমাস 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.