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)