1)是否有任何R库/函数可以在R图中实现INTELLIGENT标签放置?我尝试了一些,但它们都有问题 - 许多标签彼此重叠或其他点(或图中的其他对象,但我发现这更难处理).
2)如果没有,有什么方法可以如何舒适地帮助算法与特定问题点的标签放置?最舒适,最有效的解决方案.
您可以使用我可重复的示例来玩和测试其他可能性,看看您是否能够取得比我更好的结果:
# data
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012,
0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542,
0.9717, 0.9357)
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho",
"SaxRub", "TurMer", "TurPil", "TurPhi")
# basic plot
plot(x, y, asp=1)
abline(h = 1, col = "green")
abline(v = 1, col = "green")
Run Code Online (Sandbox Code Playgroud)
为了标记,我尝试了这些可能性,没有人真的很好:
1)这个很可怕:
text(x, y, labels = ShortSci, cex= 0.7, offset = 10)
Run Code Online (Sandbox Code Playgroud)
2)如果您不想为所有点放置标签,但仅针对异常值,这一点很好,但是,标签通常也是错误的:
identify(x, y, labels = …Run Code Online (Sandbox Code Playgroud) 我是R/ggplot的新手.我想创建一个连续变量时间序列的geom_line图,然后添加一个由事件组成的图层.连续变量及其时间戳存储在一个data.frame中,事件及其时间戳存储在另一个data.frame中.
我真正想做的是像finance.google.com上的图表.在那些,时间序列是股票价格,并有"标志"来表示新闻事件.我实际上并没有绘制财务资料,但图表的类型是相似的.我试图绘制日志文件数据的可视化.这是我的意思的一个例子......

如果可取(?),我想为每一层使用单独的data.frames(一个用于连续变量观察,另一个用于事件).
经过一些试验和错误,这是我能得到的尽可能接近.在这里,我使用ggplot附带的数据集中的示例数据."经济学"包含一些我想绘制的时间序列数据,"总统"包含一些事件(总统选举).
library(ggplot2)
data(presidential)
data(economics)
presidential <- presidential[-(1:3),]
yrng <- range(economics$unemploy)
ymin <- yrng[1]
ymax <- yrng[1] + 0.1*(yrng[2]-yrng[1])
p2 <- ggplot()
p2 <- p2 + geom_line(mapping=aes(x=date, y=unemploy), data=economics , size=3, alpha=0.5)
p2 <- p2 + scale_x_date("time") + scale_y_continuous(name="unemployed [1000's]")
p2 <- p2 + geom_segment(mapping=aes(x=start,y=ymin, xend=start, yend=ymax, colour=name), data=presidential, size=2, alpha=0.5)
p2 <- p2 + geom_point(mapping=aes(x=start,y=ymax, colour=name ), data=presidential, size=3)
p2 <- p2 + geom_text(mapping=aes(x=start, y=ymax, label=name, angle=20, hjust=-0.1, vjust=0.1),size=6, data=presidential)
p2
Run Code Online (Sandbox Code Playgroud)

问题:
这对于非常稀疏的事件是可以的,但是如果它们有一个集群(通常发生在日志文件中),它就会变得混乱.是否有一些技术可以用来整齐地显示在短时间间隔内发生的一系列事件?我在考虑使用position_jitter,但这对我来说真的很难.谷歌图表将这些事件"标志"叠加在一起,如果它们有很多的话.
我实际上不喜欢以与连续测量显示相同的比例粘贴事件数据.我宁愿把它放在facet_grid中.问题是所有facet都必须来自相同的data.frame(不确定是否为真).如果是这样,那似乎也不理想(或者我只是想避免使用重塑?)
为了提供可重现的方法示例,通常必须提供数据集.我希望使用一些自己的数据,而不是构建示例数据集.但是这些数据无法发布.我希望用无信息的占位符替换变量(列)名称和因子级别(例如,V1 .... V5,L1 ...... L5).
这是一种自动化的方法吗?
理想情况下,这将在R中完成,接收data.frame并生成此匿名data.frame.
使用这样的数据集,只需在脚本中搜索和替换变量名称,就可以获得可公开发布的可重现的示例.
这样的过程可以增加在可重复的示例中包含适当的数据,甚至在问题,评论和错误报告中包含可重现的示例.
我想在ggplot2中创建一个干净版本的文本标签散点图.目标是直观地表示与约25个项目相关联的增加值.我已经在使用"position_jitter"了,但我想知道我能不能做得更好.
这是一些模拟数据:
title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
以下是生成图表的代码:
library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
size = 2.5, fontface = "bold",
vjust = 0,
position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
legend.position = "none")
myplot …Run Code Online (Sandbox Code Playgroud) 我有一个我一直在努力的医院的事件线图.
我还没有解决的挑战是,1)排序上的情节线,从而使患者线通过评估-日期排序,2)着色由变量"OpenCASE中"行,最后,3)我想喜欢删除2014年(或其他一些随机日期)案例的排放点(蓝色方块).
任何帮助,将不胜感激?
这是我的样本数据,
library(ggplot2)
library(plyr)
df <- data.frame(
date = seq(Sys.Date(), len= 156, by="5 day")[sample(156, 78)],
openCase = rep(0:1, 39),
patients = factor(rep(1:26, 3), labels = LETTERS)
)
df <- ddply(df, "patients", mutate, visit = order(date))
df$visit <- as.factor(df$visit)
levels(df$visit) <- c("Assessment (1)", "Treatment (2)", "Discharge (3)")
qplot(date, patients, data = df, geom = "line") +
geom_point(aes(colour = visit), size = 2, shape=0)
Run Code Online (Sandbox Code Playgroud)
我知道我的示例数据并不完美,因为一些评估数据是在治疗之后,一些排放数据在评估数据之前,但是我的基础数据被搞砸了的那部分挑战.
它目前看起来像什么,

我的数据是从数据库传递的,看起来像这样,
df <- structure(list(date = structure(c(15965L, 15680L, 16135L, 15730L,
15920L, 15705L, …Run Code Online (Sandbox Code Playgroud) 我想创建一个带有标签而不是点的 ggplot 图,但它们相互重叠,因此您无法阅读它们。有没有一种很好的方法可以自动移动它们,使其不会相互覆盖?
df = data.frame(x = c(1,4,5,6,6,7,8,8,9,1), y = c(1,1,2,5,5,5,3,5,6,4),
label = rep(c("long_label","very_long_label"),5))
ggplot(data=df) + geom_text(data=df,aes(x=x, y=y, label = label))
Run Code Online (Sandbox Code Playgroud)
谢谢