我真的很喜欢ggplot2::geom_dotplot()可以很好地将点堆叠到类别中间的方式,但我似乎无法将其与填充颜色相结合.
让我们来看一个例子:
# test data
tmpData <- data.frame(x=c(rep('x', 3),rep('y', 3)), y=c(1,1,2,1,2,2), fill=rep(c('A', 'B', 'B'), 2))
# Plot without fill color
ggplot(tmpData, aes(x=x, y=y)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
Run Code Online (Sandbox Code Playgroud)
导致这个情节:

但是当我添加fill参数时:
ggplot(tmpData, aes(x=x, y=y, fill=fill)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
Run Code Online (Sandbox Code Playgroud)
填充似乎覆盖了在"x"上完成的分组,导致两个点(x,1)(x,1)被折叠,我希望它们具有不同的颜色.

当我尝试指定组时,忽略填充颜色:
ggplot(tmpData, aes(x=x, y=y, group=x, fill=fill)) +
geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4)
Run Code Online (Sandbox Code Playgroud)

通过启用堆栈组可以避免崩溃:
ggplot(tmpData, aes(x=x, y=y, fill=fill)) +
geom_dotplot(binaxis = "y", stackgroups=TRUE, stackdir = "center", dotsize=4)
Run Code Online (Sandbox Code Playgroud)

但后来我将数据的中心丢失到了其他3个图中的"x"和"y".
有没有办法使用geom_dotplot()两个组和填充?
我确信这是基本的,但我想在这里真正理解R数据结构的逻辑.
如果我按索引超出边界对矢量进行子集化,我会得到完全错误:
m <- matrix(data = c("foo", "bar"), nrow = 1)
m[2,]
# Error in m[2, ] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做数据框,我会得到所有NA行:
df <- data.frame(foo = "foo", bar = "bar")
df[2,]
# foo bar
# NA <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
如果我将一个子集放入一个不存在的数据框列中,我会熟悉它
df[, 3]
# Error in `[.data.frame`(df, , 3) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)
我(大致)知道数据帧行很奇怪并且需要小心处理,但是我没有看到与上述行为的连接.
有人可以解释为什么 R对于不存在的df行以这种方式行为?
更新
可以肯定的是,给出NA越界子集是1D向量的正常 R行为:
vec <- c("foo", "bar")
vec[3]
# [1] NA
Run Code Online (Sandbox Code Playgroud)
所以在某种程度上,这里奇怪的 …
我想将以下*.md转换成适当的LaTeX *.tex.
Lorem *ipsum* something.
Does anyone know lorem by heart?
That would *sad* because there's always Google.
Run Code Online (Sandbox Code Playgroud)
来自Pandoc的预期行为/产生的LaTeX
Lorem \emph{ipsum} something.
Does anyone know lorem by heart?
That would \emph{sad} because there's always Google.
Run Code Online (Sandbox Code Playgroud)
Pandoc中观察到的行为/产生的LaTeX
Lorem \emph{ipsum} something. Does anyone know lorem by heart?
That would \emph{sad} because there's always Google.
Run Code Online (Sandbox Code Playgroud)
我为什么在意?1.我正在将一个更大的git repo从markdown过渡到LaTeX,我想要一个干净的差异和历史.2.我实际上喜欢我的LaTeX,每行一句,即使它与排版无关.
我怎样才能让潘多克做到这一点?
Ps.:我知道这个选项hard_line_breaks,但只\\在两个第一行之间添加,并且实际上并没有保留我的换行符.
我想在我的泛型中设置一些标志(在调用之前UseMethod(),我知道很多:)),然后在方法中使用和/或更新这些标志.
像这样:
g <- function(x) {
y <- 10
UseMethod("g")
}
g.default <- function(x) {
c(x = x, y = y)
}
g.a <- function(x) {
y <- 5 # update y from generic here
NextMethod()
}
Run Code Online (Sandbox Code Playgroud)
这直接跳转到默认方法时有效:
g(structure(.Data = 1, class = "c")) # here y is never updated
# x y
# 1 10
Run Code Online (Sandbox Code Playgroud)
但是当我经历时NextMethod(),y神秘地消失了:
g(structure(.Data = 1, class = "a")) # here y is updated, but cannot be …Run Code Online (Sandbox Code Playgroud) 我有一些ggplot2包含大量文本的情节(没有办法解决这个问题),我正在建立一个内部*.Rmd,就像这样:
---
title: "SO Test"
output: pdf_document
---
```{r}
library(ggplot2)
df <- data.frame(rep(1:5,5),rep(1:5, each=5),rep("Test",5))
colnames(df) <- c("x", "y", "word")
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) + geom_text()
```
Run Code Online (Sandbox Code Playgroud)
这很好用,给我一些类似下面的PDF格式.

我现在想让这些标签(Test)尽可能大而不会过度绘图.
我的问题是我现在看到2个 "杠杆"我可以拉动来改变字体大小:
ggplot2,改变,添加,说,geom_text(size=12)knitr(或Rmarkdown?),添加一个块选项,如`fig.width = 15,fig.height = 15),这也改变了相对于整体绘图大小的字体大小(原因我不是真的了解).显然,1.将是直截了当的方式,但我需要geom_text(size=...)根据输出的大小进行调整,例如,当linewidthLaTeX中的更改或我的博客帖子的列宽时.至少可以说,这似乎是不优雅的.
我如何以优雅,可扩展的方式实现这一目标,从而产生漂亮的情节?
我对此仍然有点模糊,在工具链中哪里(Rmarkdown?,Knitr?GGplot2 …
我想保存,但不打印(现在),一堆ggplot()s进入网格(通过arrangeGrob(),正确吗?),然后打印并在以后检索它们.
这是对现有问题的重新启动.奇怪的是,这个答案不起作用,我不明白为什么.我使用完全相同的代码.
library(ggplot2)
p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()
p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()
library(gridExtra)
y <- arrangeGrob(p1, p2)
class(y)
y
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这并没有(如上面的答案)产量图的网格,但是:
> class(y)
[1] "gtable" "grob" "gDesc"
> y
TableGrob (2 x 1) "arrange": 2 grobs
z cells name grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (2-2,1-1) arrange gtable[layout]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我想为我的类myClass实现内部泛型[<-(〜help(Extract))的inset方法.在将实际插入传递给[<-via 之前,此方法应该运行一堆测试NextMethod().
我明白那个:
NextMethod()呼叫通常不需要任何参数(尽管手动提供他们似乎并没有帮助其一).这是我的代表:
x <- c(1,2)
class(x) <- c("myClass", "numeric")
`[<-.myClass` <- function(x, i, j, value, foo = TRUE, ...) {
if (foo) {
stop("'foo' must be false!")
}
NextMethod()
}
x[1] <- 3 # this errors out with *expected* error message, so dispatch works
x[1, foo = FALSE] <- 3 # this fails with "incorrect number of subscripts
Run Code Online (Sandbox Code Playgroud)
似乎正在发生的事情是,它NextMethod() 也传递 …
我正在构建一个交互式函数,它将重复构建和绘制相当复杂的ggplot2图.
用户提供输入(实际上是PCA加载矩阵的旋转角度),我想尽快向他们展示旋转结果.
不幸的是,用ggplot2绘制情节非常缓慢.
注意:
ggobi等等......).memoise,但这似乎没有多大帮助; 问题似乎是图形设备上的实际绘图.所以,我想,也许我想以某种方式预渲染所有必要的图,可能是通过将svg()图形设备保存到文件或其他东西,然后根据需要绘制这些缓存版本.
更新
ggvis和ggobi,但这些现在不是一个选项(开发带宽太小).grid.arranged)绘图函数,而且memoise在某些时候它们是d - 没有明显的速度增加.我正在创建一个可视化来说明主成分分析如何工作,通过绘制一些实际数据的特征值(为了说明的目的,我将子集化为2维).
我想要从这个梦幻般的PCA教程中结合这两个图,仅用于我的真实数据.


我可以绘制矢量并且一切正常:
Person1 <- c(-3,1,1,-3,0,-1,-1,0,-1,-1,3,4,5,-2,1,2,-2,-1,1,-2,1,-3,4,-6,1,-3,-4,3,3,-5,0,3,0,-3,1,-2,-1,0,-3,3,-4,-4,-7,-5,-2,-2,-1,1,1,2,0,0,2,-2,4,2,1,2,2,7,0,3,2,5,2,6,0,4,0,-2,-1,2,0,-1,-2,-4,-1)
Person2 <- c(-4,-3,4,-5,-1,-1,-2,2,1,0,3,2,3,-4,2,-1,2,-1,4,-2,6,-2,-1,-2,-1,-1,-3,5,2,-1,3,3,1,-3,1,3,-3,2,-2,4,-4,-6,-4,-7,0,-3,1,-2,0,2,-5,2,-2,-1,4,1,1,0,1,5,1,0,1,1,0,2,0,7,-2,3,-1,-2,-3,0,0,0,0)
df <- data.frame(cbind(Person1, Person2))
g <- ggplot(data = df, mapping = aes(x = Person1, y = Person2))
g <- g + geom_point(alpha = 1/3) # alpha b/c of overplotting
g <- g + geom_smooth(method = "lm") # just for comparsion
g <- g + coord_fixed() # otherwise, the angles of vectors are off
corre <- cor(x = df$Person1, y = df$Person2, method = …Run Code Online (Sandbox Code Playgroud) 我喜欢让我的 R 包保持最新,并且在开发我自己的包时,我想坚持 @Hadley\ 的建议:
\n\n\n\n\n一般来说,指定版本并保守地选择需要哪个版本总是更好。除非您另有所知,否则始终要求版本大于或等于您当前使用的\xe2\x80\x99 版本。
\n
所以,我需要其中一些DESCRIPTION:
Imports:\n knitr (>= 1.13),\n rmarkdown (>= 1.0)\nRun Code Online (Sandbox Code Playgroud)\n\n是否有现有工具可以根据我当前安装的软件包以编程方式更新依赖项的版本?
\n\n我知道这是一件小事,我可以手动完成,但我只知道这是一种很容易忘记的事情。
\n\n使用包的本地安装版本作为最小依赖项似乎也有意义,因为我使用这些依赖项进行了测试/构建。
\n\n我有理由不应该这样做吗?
\nr ×9
ggplot2 ×5
inheritance ×2
oop ×2
plot ×2
class-method ×1
dataframe ×1
devtools ×1
eigenvector ×1
gridextra ×1
internal ×1
knitr ×1
methods ×1
pandoc ×1
pca ×1
performance ×1
r-markdown ×1
rendering ×1
roxygen2 ×1
subset ×1