我有以下数据(temp.dat请参阅完整数据的结束注释)
Year State Capex
1 2003 VIC 5.356415
2 2004 VIC 5.765232
3 2005 VIC 5.247276
4 2006 VIC 5.579882
5 2007 VIC 5.142464
...
Run Code Online (Sandbox Code Playgroud)
我可以生成以下图表:
ggplot(temp.dat) +
geom_line(aes(x = Year, y = Capex, group = State, colour = State))
Run Code Online (Sandbox Code Playgroud)

而不是传说,我喜欢标签
我在以下链接的答案中注意到了baptiste的评论,但是当我尝试调整他的代码(geom_text(aes(label = State, colour = State, x = Inf, y = Capex), hjust = -1))时,文本没有出现.
temp.dat <- structure(list(Year = c("2003", "2004", "2005", "2006", "2007",
"2008", "2009", "2010", "2011", "2012", "2013", …Run Code Online (Sandbox Code Playgroud) 我用ggplot2创建了这个情节:

外线需要对应Y刻度(即Text1的线的Y位置应为100和85).我可以通过在条形图右侧绘制一个空白绘图并使用与条形图相同的比例然后使用注释函数绘制线来实现此目的.另一种方法是简单地"手动"绘制线条grid.lines,但是坐标grid.lines不对应于图形的Y标度.
是否有可能以某种方式使用不同的方法绘制这些线?我认为必须完成它grid.lines.我怎么能把条形图的Y coordindates传递给grid.lines?
下面是用于创建此图的最小代码:
library (ggplot2)
test= data.frame(
group=c(rep(1,6), rep(2,6)),
subgroup=c( 1,1,1,2,2,2,1,1,1,2,2,2),
category=c( rep(1:3, 4)),
count=c( 10,80,10,5,90,5, 10,80,10,5,90,5 )
)
qplot(subgroup,
count,
data=test,
geom="bar",
stat="identity",
fill =category,
facets = .~ group, width=0.9)+
opts(legend.position="none",
plot.margin = unit(c(0,9,2,0), "lines"))
Run Code Online (Sandbox Code Playgroud)

如何画出条形图右侧的线条?
我最近在ggplot2中问了一个关于在绘图区域之外绘制文本的问题,解决方案是使用gt$layout和grid.draw.
可以在这里使用类似的方法吗?据我所知,annotation_custom仅适用于文本,不适用于其他图形元素.谢谢
我有这些因素
require(ggplot2)
names(table(diamonds$cut))
# [1] "Fair" "Good" "Very Good" "Premium" "Ideal"
Run Code Online (Sandbox Code Playgroud)
我希望在图例中可视地划分为两组(也表示组名称):
"第一组" - >"公平","好"
和
"第二组" - >"非常好","高级","理想"
从这个情节开始
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
guides(fill=guide_legend(ncol=2)) +
theme(legend.position="bottom")
Run Code Online (Sandbox Code Playgroud)
我想得到

(注意第二栏/组中"非常好"滑落)
我试图用ggplot2重现以下[base R]图

我已经完成了大部分工作,但目前让我感到困惑的是将线段放置在图表右侧与相应标签相连的边缘地毯图上.标签已被绘制(在下面的第二个图中)anotation_custom()并且我已经使用@ baptiste的关闭剪裁的技巧以允许绘制绘图边距.
尽管进行了许多尝试,但我无法将其放置segmentGrobs()在设备中的所需位置,以便它们加入正确的地毯标签和标签.
一个可重复的例子是
y <- data.frame(matrix(runif(30*10), ncol = 10))
names(y) <- paste0("spp", 1:10)
treat <- gl(3, 10)
time <- factor(rep(1:10, 3))
require(vegan); require(grid); require(reshape2); require(ggplot2)
mod <- prc(y, treat, time)
Run Code Online (Sandbox Code Playgroud)
如果您没有安装素食主义者,我会dput在问题的最后添加一个强化对象,并且fortify()您希望运行该示例并fortify()使用方便的绘图ggplot().我还包括一个有点冗长的函数,myPlt()它说明了我到目前为止所做的工作,如果你已经加载了包并且可以创建,它可以用在示例数据集上mod.
我已经尝试了很多选项但是我现在似乎正在黑暗中挣扎以正确放置线段.
我不是在寻找绘制示例数据集的标签/段的具体问题的解决方案,而是我可以用来以编程方式放置段和标签的通用解决方案,因为这将构成autoplot()对象的方法的基础class(mod).我有标签制定好了,不是线段.那么问题:
xmin,xmax,ymin,ymax使用时,我希望把包含从数据坐标运行线路段GROB参数x0,y0来x1,y1?annotation_custom()绘制段 …我正在使用一个圣职包ggplot2.现在我正在以传统方式构建biplots,负载用箭头表示.我也感兴趣的是使用校准轴并将加载轴表示为通过原点的线,并且加载标签显示在绘图区域外.在基础R中,这是在实现的
library(OpenRepGrid)
biplot2d(boeker)
Run Code Online (Sandbox Code Playgroud)
但我正在寻找ggplot2解决方案.有人会有任何想法如何实现这样的事情ggplot2吗?在绘图区域外添加变量名称可以像我想的那样完成,但是如何绘制绘图区域外的线段?
目前我所拥有的是
install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
data(iris)
ord <- prcomp(iris[,1:4],scale=TRUE)
ggord(ord, iris$Species)
Run Code Online (Sandbox Code Playgroud)
负载在 ord$rotation
PC1 PC2 PC3 PC4
Sepal.Length 0.5210659 -0.37741762 0.7195664 0.2612863
Sepal.Width -0.2693474 -0.92329566 -0.2443818 -0.1235096
Petal.Length 0.5804131 -0.02449161 -0.1421264 -0.8014492
Petal.Width 0.5648565 -0.06694199 -0.6342727 0.5235971
Run Code Online (Sandbox Code Playgroud)
如何通过原点,外部刻度和轴区域外的标签添加线条(可能包括上面为重叠标签应用的冷抖动)?
NB我不想关闭剪辑,因为我的一些情节元素有时可能会超出边界框
编辑:其他人之前显然问了一个类似的问题,尽管这个问题仍然没有答案.它指出,要在基地R中做这样的事情(虽然以一种丑陋的方式),人们可以这样做
plot(-1:1, -1:1, asp = 1, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "")
abline(a = 0, b = -0.75) …Run Code Online (Sandbox Code Playgroud) 有时,使用向图像添加灰色半透明层然后将键孔切割到该层以突出显示下面图像的某个部分的技术是有帮助的.以下是来自youtube vide的示例:

我有时使用绘图,但使用Inkscape添加半透明层,然后使用橡皮擦在该层中切出一个洞.这(a)看起来不够专业(b)需要额外的时间和单独的程序和(c)可能的质量损失.
我想在R中做.我问的是ggplot2,因为这是我选择的工具,但我认为任何网格答案都会很好(我知道基础可能有一个非常不同的方法).
所以这是一个MWE,我添加了一个geom_rect显示我们想要切割锁孔/窗口的位置:
ggplot(mtcars, aes(mpg, wt)) +
geom_point(size=3) +
geom_rect(mapping=aes(xmin=20, xmax=25,
ymin=3, ymax=3.3), color="black", alpha=.01)
Run Code Online (Sandbox Code Playgroud)
我如何使用R来制作看起来像这样的图:

是否可以将图像添加到ggplot图表中,该图表将位于图表区域之外?
我知道可以使用annotate_raster和annotate_custom将图像添加到图表中,但是它们都会在图表中添加图像.我需要在图表上方的右上角添加公司徽标 - 在标题级别.
使用annotate_custom添加图像的示例:将图像 插入ggplot2
更新:根据user1317221_G的建议,我可以将图像放在外面.
library(png)
library(grid)
library(ggplot2)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)
plt <- qplot(1:10, 1:10, geom="blank") +
opts(title = 'Title') +
geom_point()
plt2 <- plt + annotation_custom(g, xmin=9, xmax=10, ymin=10.5, ymax=11.25)
gt <- ggplot_gtable(ggplot_build(plt2))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)
我想自动放置图像 - 自动确定xmin/xmax和ymin/ymax.使用传统图形我可以调用par('usr')并获取图表参数,但这不适用于ggplot图表.有没有一种简单的方法来确定ggplot中的绘图区域?例如,获取plt的大小并将限制值插入plt2
UPDATE2:如果使用分面,此方法也不起作用.例如,我想在标题级别的右角放置徽标,如下图所示,如果我使用上面的方法,我会收到错误.
d <- ggplot(diamonds, aes(carat, price, fill = ..density..)) +
xlim(0, 2) +
stat_binhex(na.rm = TRUE) +
labs(title = 'Title') +
theme(aspect.ratio = 1) +
facet_wrap(~ color, scales = …Run Code Online (Sandbox Code Playgroud) 在下面的图中,直接标签位置有点垂直调整,但它们在左/右边缘被剪裁.有没有办法避免剪裁(类似xpd=TRUE)或在绘图框中向内调整剪切的标签?

这是这个例子的代码:
library(car)
library(reshape2)
library(ggplot2)
library(directlabels)
library(nnet)
## Sec. 8.2 (Nested Dichotomies)
# transform data
Womenlf <- within(Womenlf,{
working <- recode(partic, " 'not.work' = 'no'; else = 'yes' ")
fulltime <- recode(partic,
" 'fulltime' = 'yes'; 'parttime' = 'no'; 'not.work' = NA")})
mod.working <- glm(working ~ hincome + children, family = binomial,
data = Womenlf)
mod.fulltime <- glm(fulltime ~ hincome + children, family = binomial,
data = Womenlf)
predictors <- expand.grid(hincome = 1:50,
children = c("absent", "present"))
fit …Run Code Online (Sandbox Code Playgroud) 我有以下图表:
library(ggplot2)
library(scales)
library(magrittr)
df1 <-
structure(
list(
x = structure(
1:5, .Label = c("5", "4", "3", "2",
"1"), class = "factor"
), y = c(
0.166666666666667, 0.361111111111111,
0.0833333333333333, 0.222222222222222, 0.291666666666667
)
), .Names = c("x",
"y"), row.names = c(NA,-5L), class = c("tbl_df", "tbl", "data.frame"), drop = TRUE
)
df1 %>% ggplot(aes(x , y )) + geom_bar(stat = "identity") +
scale_y_continuous(labels = percent)
Run Code Online (Sandbox Code Playgroud)
我想在5和1之下添加带有粗体文本的两行注释.例如,'最高\nvalue'低于5,'最低\n值'低于1.
我试过geom_text但我不能把文字放在我想要的地方.
我想在图表的标题中为某些单词添加颜色.我在这里找到了一些先例.具体来说,我希望包含在撇号(在下面的输出中)的文本对应于各自条形图的颜色.
在将PDF导出到Adobe Illustrator或其他程序之前,我已经获得了R中的标题.
name <- c("Peter", "Gabriel", "Rachel", "Bradley")
age <- c(34, 13, 28, 0.9)
fake_graph <- family[order(family$age, decreasing = F), ]
fake_graph <- within(fake_graph, {
bar_color = ifelse(fake_graph$name == "Rachel", "blue", "gray")
})
# Plot creation
library(ggplot2)
fake_bar_charts <- ggplot() +
geom_bar(
data = fake_graph,
position = "identity",
stat = "identity",
width = 0.75,
fill = fake_graph$bar_color,
aes(x = name, y = age)
) +
scale_x_discrete(limits = fake_graph$name) +
scale_y_continuous(expand = c(0, 0)) +
coord_flip() …Run Code Online (Sandbox Code Playgroud)