我正在玩的数据来自下面列出的互联网资源
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个2D点图,比较该表中的两个指标,每个玩家在图上表示一个点.我有以下代码:
nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容:

我想要的是一个玩家名字的标签就在点旁边.我认为ggplot美学中的标签功能会为我做这个,但事实并非如此.
我也尝试过text()函数和textxy()函数library(calibrate),它们似乎都不适用于ggplot.
如何为这些点添加名称标签?
我正在使用sf包(和相关包)在 R 中制作 GIS 地图以读取 shapefile 和ggplot2(和朋友)进行绘图。这工作正常,但我找不到(自动/以编程方式)为河流和道路等要素创建标签放置的方法。这些特征通常是具有不规则形状的线串。请参阅例如来自维基媒体的图片。
该ggrepel软件包适用于以自动方式标记点,但这对于不是离散的纬度/经度点的其他地理特征没有多大意义。
我可以想象通过在每个功能上单独放置单独的文本标签来做到这一点,但如果可能的话,我正在寻找更自动化的东西。我意识到这种自动化不是一个小问题,但之前已经解决了(ArcGIS 显然有一种方法可以使用名为 Maplex 的扩展程序来做到这一点,但我无法访问该软件,我想留在R 如果可能)。
有谁知道这样做的方法?
MWE在这里:
#MWE Linestring labeling
library(tidyverse)
library(sf)
library(ggrepel)
set.seed(120)
#pick a county from the built-in North Carolina dataset
BuncombeCounty <- st_read(system.file("shapes/", package="maptools"), "sids") %>%
filter(NAME == "Buncombe")
#pick 4 random points in that county
pts_sf <- data.frame(
x = seq(-82.3, -82.7, by=-0.1) %>%
sample(4),
y = seq(35.5, 35.7, by=0.05) %>%
sample(4),
placenames = c("A", "B", "C", "D")
) %>%
st_as_sf(coords = …Run Code Online (Sandbox Code Playgroud) 有没有办法在geom_curve线的中心或附近添加标签?目前,我只能通过标记曲线的起点或终点来实现.
library(tidyverse)
library(ggrepel)
df <- data.frame(x1 = 1, y1 = 1, x2 = 2, y2 = 3, details = "Object Name")
ggplot(df, aes(x = x1, y = y1, label = details)) +
geom_point(size = 4) +
geom_point(aes(x = x2, y = y2),
pch = 17, size = 4) +
geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2)) +
geom_label(nudge_y = 0.05) +
geom_label_repel(box.padding = 2)
Run Code Online (Sandbox Code Playgroud)
我想用某种方法自动标记坐标x = 1.75,y = 1.5附近的曲线.那里有一个解决方案我还没见过吗?我想要的图形非常繁忙,标记原点会使得查看正在发生的事情变得更加困难,而标记弧线会使输出更清晰.

我正在尝试使用 ggrepel 为我正在使用 R 和 ggplot2 处理的图表创建文本标签。我发现它对于排斥单个点非常有用,但我经常遇到它与其他一些绘图对象重叠的问题。

我试图将它添加到情节中,如下所示:
plot + ggrepel::geom_text_repel(aes(y = Ratio, label = Ratio), direction = "y")
Run Code Online (Sandbox Code Playgroud)
有什么方法可以告诉 ggrepel 避免 ggplot 上的所有内容吗?我尝试过搜索并为此想出一些东西,但我被困住了。
我希望我的问题足够清楚,谢谢。
我试图将圆环图中标签的位置移动到图表的右侧,但我无法做到。我正在使用 ggplot 和 ggrepel 来制作图表。
library(ggplot2)
library(ggrepel)
expenditurePie = data.frame(
value = c(98,2),
area = c("A","B"),
label = c("","This is a label"))
ggplot(expenditurePie, aes(y=value, fill = area, label = label)) +
geom_bar(aes(x = 4), stat = "identity", show.legend = F) +
geom_text_repel(size = 5, x= 4, point.padding = unit(1.8, "lines"), direction = "x") +
xlim(0.5, 4.5) +
annotate(geom = "text", x=0.5, y=0, label = "24 444", size = 16, color = "grey") +
scale_fill_manual(values = c(A = "grey", B = …Run Code Online (Sandbox Code Playgroud) 是否可以将部分斜体文本标签传递给ggplot?我尝试使用expression和italiccommands(expression(paste(italic("some text")))),但这些不能传递到数据框,因为命令的结果不是原子的.设置参数fontface = "italic"也不够,因为这会使整个标签斜体化,而不仅仅是标签中的一组选定字符.例如,我想在标签中使用一些斜体字的拉丁短语(例如"体内点"中的"体内").
library(ggplot)
library(ggrepel)
df <- data.frame(V1 = c(1,2), V2 = c(2,4), V3 = c("in vivo point","another point"))
ggplot(data = df, aes(x = V1, y = V2)) + geom_point() + geom_text_repel(aes(label = V3))
Run Code Online (Sandbox Code Playgroud) 我正在用 ggplot2 绘制多个饼图,并成功地将标签绘制在正确的位置,如下所示:
df <- data.frame(annotation=rep(c("promoter", "intergenic", "intragene", "5prime", "3prime"), 3), value=c(69.5, 16, 10.7, 2.5, 1.3, 57.2, 18.8, 20.2, 2.1, 1.7, 50.2, 32.2, 15.3, 1.2, 1.1), treatment=rep(c("treated1", "treated2", "untreated"), c(5, 5, 5)))
library(ggplot2)
ggplot(data = df, aes(x = "", y = value, fill = annotation)) +
geom_bar(stat = "identity") +
geom_text(aes(label = value), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y") +
facet_grid(.~treatment)
Run Code Online (Sandbox Code Playgroud)
然后我想利用 ggrepel 使小切片数字不重叠:
library(ggrepel)
ggplot(data = df, aes(x = "", y = value, fill = annotation)) …Run Code Online (Sandbox Code Playgroud) 我正在用ggplot2绘制热图。y轴上的几个刻度需要标记。但是,其中一些过于紧密和重叠。我知道ggrepel可以分隔文本标签,但是目前我还没有解决我的问题。
我的代码如下。任何建议都欢迎。谢谢。
码:
df <- data.frame()
for (i in 1:50){
tmp_df <- data.frame(cell=paste0("cell", i),
gene=paste0("gene", 1:100), exp = rnorm(100), ident = i %% 5)
df<-rbind(df, tmp_df)
}
labelRow=rep("", 100)
for (i in c(2, 5, 7, 11, 19, 23)){
labelRow[i] <- paste0("gene", i)
}
library(ggplot2)
heatmap <- ggplot(data = df, mapping = aes(x = cell, y = gene, fill = exp)) +
geom_tile() +
scale_fill_gradient2(name = "Expression") +
scale_y_discrete(position = "right", labels = labelRow) +
facet_grid(facets = ~ident,
drop = TRUE, …Run Code Online (Sandbox Code Playgroud) 我制作了这个火山阴谋,并希望改进它如下:

用蓝色数据点完全遮蔽该区域:使用我当前的代码,我无法将阴影扩展到您所看到的范围之外.我希望它一直到剧情区域限制.
geom_text让我来标记数据点的子集,但做起来ggrepel应该添加有标签从而提高标签的清晰度连接数据点的线.如何重用现有geom_text代码ggrepel来实现这一目标?
这是我的代码:
ggplot(vol.new, aes(x = log2.fold.change, y = X.NAME., fill = Color)) + # Define data frame to be used for plotting; define data for x and y axes; crate a scatterplot object.
geom_point(size = 2, shape = 21, colour = "black") + # Define data point style.
ggtitle(main.title, subtitle = "Just a little subtitle") + # Define title and subtitle.
labs(x = x.lab, y = y.lab) + # Define labels …Run Code Online (Sandbox Code Playgroud) 绘制网络时,如果节点的标签也可以避开网络边缘,那将是很好的选择。例如,在下面的示例中,可以将所有标签移到网络外部。我已经尝试了几个软件包,但是到目前为止,还没有找到一种可行的方法。有办法吗?下面的例子:
library(ggraph)
library(tidygraph)
reprex <- tibble(to = sample(1:10, 100,replace=T),
from = sample(1:10, 100,replace=T)
) %>%
as_tbl_graph()
V(reprex)$label1 <- rep("label",10)
reprex_plot <- reprex %>%
ggraph() +
geom_node_point() +
geom_edge_link(color="grey")+
geom_node_text(aes(label=label1),repel=T,force=100)+
theme_bw()
reprex_plot
Run Code Online (Sandbox Code Playgroud)