জেম_পয়েন্টে লেবেল পয়েন্ট


178

আমি যে ডেটা নিয়ে খেলছি তা নীচে তালিকাভুক্ত ইন্টারনেট উত্স থেকে আসে

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")

আমি কী করতে চাই, এই টেবিল থেকে দুটি মেট্রিকের তুলনা করে 2 ডি পয়েন্টের গ্রাফ তৈরি করা উচিত, প্রতিটি খেলোয়াড় গ্রাফের একটি বিন্দুর প্রতিনিধিত্ব করে। আমার কাছে নিম্নলিখিত কোড রয়েছে:

nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) + 
                  geom_point() 

এটি আমাকে নিম্নলিখিত দেয়:

এনবিএ প্লট

আমি যা চাই তা হল বিন্দুগুলির ঠিক পাশের খেলোয়াড়ের নামের একটি লেবেল। আমি ভেবেছিলাম ggplot এর নান্দনিকতার লেবেল ফাংশনটি আমার জন্য এটি করবে, তবে তা হয়নি।

আমিও চেষ্টা text()ফাংশন এবং textxy()ফাংশন থেকে library(calibrate), তন্ন তন্ন যার ggplot সঙ্গে কাজ বলে মনে হচ্ছে।

আমি এই পয়েন্টগুলিতে কীভাবে নাম লেবেল যুক্ত করতে পারি?

উত্তর:


280

লেবেল geom_textসহ, ব্যবহার করুন aes। আপনি hjust, vjustপাঠ্যের অবস্থান সামঞ্জস্য করতে খেলতে পারেন ।

ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+
  geom_point() +geom_text(aes(label=Name),hjust=0, vjust=0)

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

সম্পাদনা: নির্দিষ্ট মাত্রার উপরে কেবলমাত্র লেবেল মানগুলি:

  ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+
  geom_point() +
  geom_text(aes(label=ifelse(PTS>24,as.character(Name),'')),hjust=0,vjust=0)

শর্তযুক্ত লেবেলযুক্ত চার্ট chart


4
চারপাশে লেবেলগুলি স্থানান্তর করার কোনও উপায় আছে (সেগুলি এতটা ধাক্কা দিয়ে দিন), যাতে তারা ওভারল্যাপ না করে?
থমাস ব্রাউন

2
আমি মনে করি না যে এর মধ্যে কোনও সহজ সমাধান আছে ggplot2। হতে পারে এটি আপনাকে সহায়তা করতে পারে।
অস্থির

1
নির্দিষ্ট মানের উপরে কেবল পয়েন্টগুলি লেবেল করার কোনও উপায় আছে, উদাহরণস্বরূপ উপরের প্লটটিতে পিটিএস 24 এর চেয়ে বেশি?
ওএনইলএমবি 1

সঠিকভাবে 'ডজিং' এর সংক্ষিপ্ত, hjust = -0.1ডেটা পয়েন্ট থেকে কিছুটা দূরে মুদ্রিত লেবেলগুলি পেতে এটি বিবেচনা করুন ।
প্যাট্রিকটি

চারদিকে লেবেল স্থানান্তর করতে, গ্রেগ্রেল বিবেচনা করুন
হোমার হোয়াইট

92

ggrepelপ্যাকেজ ওভারল্যাপিং টেক্সট লেবেল একে অপরের থেকে দূরে রদ জন্য কাজ করে মহান। আপনি হয় geom_label_repel()(পাঠ্যের চারপাশে আয়তক্ষেত্র আঁক) বা geom_text_repel()ফাংশন ব্যবহার করতে পারেন ।

library(ggplot2)
library(ggrepel)

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep = ",")

nbaplot <- ggplot(nba, aes(x= MIN, y = PTS)) + 
  geom_point(color = "blue", size = 3)

### geom_label_repel
nbaplot + 
  geom_label_repel(aes(label = Name),
                  box.padding   = 0.35, 
                  point.padding = 0.5,
                  segment.color = 'grey50') +
  theme_classic()

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

### geom_text_repel
# only label players with PTS > 25 or < 18
# align text vertically with nudge_y and allow the labels to 
# move horizontally with direction = "x"
ggplot(nba, aes(x= MIN, y = PTS, label = Name)) + 
  geom_point(color = dplyr::case_when(nba$PTS > 25 ~ "#1b9e77", 
                                      nba$PTS < 18 ~ "#d95f02",
                                      TRUE ~ "#7570b3"), 
             size = 3, alpha = 0.8) +
  geom_text_repel(data          = subset(nba, PTS > 25),
                  nudge_y       = 32 - subset(nba, PTS > 25)$PTS,
                  size          = 4,
                  box.padding   = 1.5,
                  point.padding = 0.5,
                  force         = 100,
                  segment.size  = 0.2,
                  segment.color = "grey50",
                  direction     = "x") +
  geom_label_repel(data         = subset(nba, PTS < 18),
                  nudge_y       = 16 - subset(nba, PTS < 18)$PTS,
                  size          = 4,
                  box.padding   = 0.5,
                  point.padding = 0.5,
                  force         = 100,
                  segment.size  = 0.2,
                  segment.color = "grey50",
                  direction     = "x") +
  scale_x_continuous(expand = expand_scale(mult = c(0.2, .2))) +
  scale_y_continuous(expand = expand_scale(mult = c(0.1, .1))) +
  theme_classic(base_size = 16)

সম্পাদনা করুন:ggrepel লাইনগুলির সাথে ব্যবহার করতে , এটি এবং এটি দেখুন

2019-05-01 এ ডিপেক্স প্যাকেজ (v0.2.0) দ্বারা তৈরি হয়েছিল ।


1
ঝরঝরে! আমি সত্যিই প্রথম চক্রান্ত পছন্দ করি। আমি এটি আমার ডেটা দিয়ে চেষ্টা করেছি এবং ফলটিতে আমি খুশি কারণ কিংবদন্তিটি প্লটে প্রদর্শিত আকারগুলির পরিবর্তে "a" দেখায়। (আমি একটি ফ্যাক্টর অনুযায়ী পয়েন্ট আলাদা করতে একটি নান্দনিক আকার ব্যবহার করি)
মৌমাছি লোক

2
আমি (ক) এখন এই সমস্যা সমাধান করা geom_label_repel ছাড়া একটি চক্রান্ত এর কিংবদন্তী আহরণের stackoverflow.com/questions/12041042/... এবং (খ) লেবেল সহ একটি চক্রান্ত করতে gridExtra সঙ্গে এটি তারপর যোগ :: grid.arrange। আপনি যদি একটি সহজ সমাধান জানেন, আমি এখনও প্রশংসা করব!
মৌমাছি লোক

1
@ বিগ্যুয়ে: আপনি যা জিজ্ঞাসা করছেন তা আমি পেয়েছি তা নিশ্চিত নই তবে আমি সম্প্রতি ggplot2দেবের প্রতি একটি প্রতিশ্রুতি দেখেছি যেটিতে একই কথা বলা হয়েছে github.com/tidyverse/ggplot2/commit/… । আপনার সমস্যাটি ঠিক আছে কিনা তা দেখতে আপনি ggplot2& এর উভয়ই ডিভাইস ইনস্টল করার চেষ্টা করতে পারেনggrepel
তুং

1
@ বিগ্যুই: এফআইআই এমন একটি lemonপ্যাকেজও রয়েছে যা প্লট কিংবদন্তির হস্তক্ষেপে খুব ভাল।
টুং


10

উপরের উদাহরণের মতো আইফেলটি ব্যবহার না করে কেউ কিছু থ্রোসোল্ড মানগুলির উপর ভিত্তি করে লেবেলিংয়ের আগে ডেটা প্রিফিল্টার করতে পারে, এটি প্লটিং ডিভাইসের জন্য অনেক কাজ সাশ্রয় করে:

xlimit <- 36
ylimit <- 24
ggplot(myData)+geom_point(aes(myX,myY))+
    geom_label(data=myData[myData$myX > xlimit & myData$myY> ylimit,], aes(myX,myY,myLabel))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.