R 在geom_点中标记点

R 在geom_点中标记点,r,plot,ggplot2,labeling,ggrepel,R,Plot,Ggplot2,Labeling,Ggrepel,我使用的数据来自下面列出的互联网来源 nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",") nba使用geom_文本,带有aes标签。您可以使用hjust、vjust调整文本位置 ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name))+ geom_point() +geom_text(aes(label=Name),hjust=0

我使用的数据来自下面列出的互联网来源

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

nba使用
geom_文本
,带有
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)

编辑:仅标记高于特定阈值的值:

与上例中使用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))
xlimit-ylimit,],aes(myX,myY,myLabel))
该软件包非常适合将重叠的文本标签相互排斥。您可以使用
geom\u label\u repel()
(围绕文本绘制矩形)或
geom\u text\u 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()
库(ggplot2)
图书馆(ggrepel)
nba 25~“#1b9e77”,
nba$PTS<18~“#d95f02”,
对~“#7570b3”),
尺寸=3,α=0.8)+
几何文本排斥(数据=子集(nba,PTS>25),
轻推y=32-子集(nba,分数>25)$PTS,
尺寸=4,
box.padding=1.5,
点填充=0.5,
力=100,
段大小=0.2,
segment.color=“grey50”,
方向=“x”)+
地理标签排斥(数据=子集(nba,PTS<18),
轻推y=16-子集(nba,分数<18)$PTS,
尺寸=4,
box.padding=0.5,
点填充=0.5,
力=100,
段大小=0.2,
segment.color=“grey50”,
方向=“x”)+
比例x连续(扩展=扩展比例(mult=c(0.2,.2)))+
连续缩放(扩展=扩展缩放(mult=c(0.1,.1)))+
经典主题(基本尺寸=16)

编辑:要将
ggrepel
与行一起使用,请参阅和


由(v0.2.0)于2019-05-01创建。

有没有办法移动标签(稍微避开它们),使它们不会重叠?我认为在
ggplot2
中没有任何简单的解决方案。也许可以帮助你。有没有办法只标出高于某个值的点,例如上面图表中的PTS大于24?没有正确的“闪避”,请考虑这个<代码> Hal==-0.1(<代码>),以使打印标签远离数据点。我真的很喜欢第一个情节。我用我的数据尝试了这一点,我对结果很满意,只是图例显示的是“a”而不是图中显示的形状。(我使用美观的形状根据一个因素来区分点)我现在解决了这个问题,方法是(a)提取没有geom_标签的绘图图例,然后(b)使用gridExtra::grid.arrange添加到带有标签的绘图。如果你知道一个更简单的解决方案,我还是会很感激的@Beegoy:我不确定我是否明白你的要求,但我最近在
ggplot2
dev上看到一个提交,它提到了类似的事情。您可以尝试安装
ggplot2
ggrepel
的两个开发版本,以查看您的问题是否存在fixed@beeguy:仅供参考,还有一个软件包非常擅长操纵情节传说。不过希腊怪胎在哪里?
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))
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)