Метки точек в geom_point
Данные, с которыми я играю, взяты из интернет-источника, указанного ниже
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
Что я хочу сделать, так это создать двухмерный график точек, сравнивая две метрики из этой таблицы, где каждый игрок представляет точку на графике. У меня есть следующий код:
nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) +
geom_point()
Это дает мне следующее:
То, что я хочу, это ярлык с именем игрока рядом с точками. Я думал, что функция метки в эстетике ggplot сделает это для меня, но это не так.
Я тоже пробовал text()
функция и textxy()
функция от library(calibrate)
, ни один из которых не работает с ggplot.
Как я могу добавить ярлыки к этим точкам?
3 ответа
Использование 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)
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 and
# 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 = ifelse(nba$PTS > 25, "red", "blue"), size = 3) +
geom_text_repel(data = subset(nba, PTS > 25),
nudge_y = 32 - subset(nba, PTS > 25)$PTS,
segment.size = 0.2,
segment.color = "grey50",
direction = "x") +
scale_x_continuous(expand = c(0.05, 0.05)) +
scale_y_continuous(limits = c(NA, 33)) +
theme_classic(base_size = 12)
Создано 2018-05-11 пакетом представлением (v0.2.0).
Вместо использования ifelse, как в приведенном выше примере, можно также предварительно отфильтровать данные перед маркировкой на основе некоторых пороговых значений, это сэкономит много работы для устройства печати:
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))