小编max*_*eld的帖子

如何将ggplot2的geom_dotplot()与fill和group一起使用

我真的很喜欢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)

导致这个情节:

没有颜色的Dotplot

但是当我添加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)被折叠,我希望它们具有不同的颜色.

带有颜色的Dotplot

当我尝试指定组时,忽略填充颜色:

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)

指定组的Dotplot

通过启用堆栈组可以避免崩溃:

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)

带有stackgroups的dotpoot

但后来我将数据的中心丢失到了其他3个图中的"x"和"y".

有没有办法使用geom_dotplot()两个组和填充?

r ggplot2

17
推荐指数
1
解决办法
6938
查看次数

为什么子集化数据帧行"越界"会产生所有NA行?

我确信这是基本的,但我想在这里真正理解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)

所以在某种程度上,这里奇怪的 …

r subset dataframe data-structures

13
推荐指数
1
解决办法
269
查看次数

在Pandoc Markdown中保留换行符 - > LaTeX Conversion

我想将以下*.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,但只\\在两个第一行之间添加,并且实际上并没有保留我的换行符.

pandoc

12
推荐指数
2
解决办法
8569
查看次数

为什么方法继承会杀死其他参数?

我想在我的泛型中设置一些标志(调用之前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)

oop inheritance r class-method

12
推荐指数
1
解决办法
174
查看次数

在Rmarkdown文档中自动缩放ggplot2的字体大小(等)

我有一些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个 "杠杆"我可以拉动来改变字体大小:

  1. "内部" ggplot2,改变,添加,说,geom_text(size=12)
  2. 在绘图时,"内部" knitr(或Rmarkdown?),添加一个块选项,如`fig.width = 15,fig.height = 15),这改变了对于整体绘图大小的字体大小(原因我不是真的了解).

显然,1.将是直截了当的方式,但我需要geom_text(size=...)根据输出的大小进行调整,例如,当linewidthLaTeX中的更改或我的博客帖子的列宽时.至少可以说,这似乎是不优雅的.

我如何以优雅,可扩展的方式实现这一目标,从而产生漂亮的情节?

我对此仍然有点模糊,在工具链中哪里(Rmarkdown?,KnitrGGplot2 …

plot r ggplot2 knitr r-markdown

10
推荐指数
1
解决办法
3724
查看次数

store arrangeGrob to object,不创建可打印对象

我想保存,但不打印(现在),一堆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)

这里发生了什么?

r ggplot2 gridextra

10
推荐指数
1
解决办法
2365
查看次数

如何为内部泛型的方法添加其他参数?

我想为我的类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() 传递 …

oop methods inheritance r internal

9
推荐指数
1
解决办法
274
查看次数

加速ggplot2:预渲染图是否有意义?

我正在构建一个交互式函数,它将重复构建和绘制相当复杂的ggplot2图.

用户提供输入(实际上是PCA加载矩阵的旋转角度),我想尽快向他们展示旋转结果.

不幸的是,用ggplot2绘制情节非常缓慢.

注意:

  • 重点不是很多数据(<100个数据点左右),所以预处理无济于事(这就是这个以及很多其他SO ggplot2性​​能帖子的问题).
  • 我现在必须坚持使用ggplot2.(我知道,我知道,ggobi等等......).
  • 知道该范围的可能的输入提前(0-360):这是一个非常有限的.
  • 已经缓存了ggplot生成函数memoise,但这似乎没有多大帮助; 问题似乎是图形设备上的实际绘图.
  • (我也注意到RStudio的内部图形设备特别迟钝).

所以,我想,也许我想以某种方式预渲染所有必要的图,可能是通过将svg()图形设备保存到文件或其他东西,然后根据需要绘制这些缓存版本.

  • 在1-10的范围内,一个想法是多么愚蠢?
  • 有更好的想法吗?
  • 这甚至会加速绘图,还是图形设备仍然会成为瓶颈?
  • 为什么我们不能在R中进行硬件加速:(.

更新

  • 这不是托管软件(现在),只是在本地工作,它应该可以在任意数量的客户端和任意数量的平台上运行.
  • 我知道(快得多)ggvisggobi,但这些现在不是一个选项(开发带宽太小).
  • 实际上有几个相对复杂的嵌套(grid.arranged)绘图函数,而且memoise在某些时候它们是d - 没有明显的速度增加.
  • 在外部文件查看器中打开预渲染文件似乎会危及跨平台的吸引力 - 对吗?

performance plot rendering r ggplot2

8
推荐指数
0
解决办法
716
查看次数

如何从散点图中的每个点垂直线到(本征)向量?

我正在创建一个可视化来说明主成分分析如何工作,通过绘制一些实际数据的特征值(为了说明的目的,我将子集化为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 eigenvector ggplot2 pca

7
推荐指数
1
解决办法
1072
查看次数

如何在描述中自动添加/更新依赖/导入/建议版本?

我喜欢让我的 R 包保持最新,并且在开发我自己的包时,我想坚持 @Hadley\ 的建议

\n\n
\n

一般来说,指定版本并保守地选择需要哪个版本总是更好。除非您另有所知,否则始终要求版本大于或等于您当前使用的\xe2\x80\x99 版本。

\n
\n\n

所以,我需要其中一些DESCRIPTION

\n\n
Imports:\n knitr (>= 1.13),\n rmarkdown (>= 1.0)\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否有现有工具可以根据我当前安装的软件包以编程方式更新依赖项的版本?

\n\n

我知道这是一件小事,我可以手动完成,但我只知道这是一种很容易忘记的事情。

\n\n

使用包的本地安装版本作为最小依赖项似乎也有意义,因为我使用这些依赖项进行了测试/构建。

\n\n

我有理由不应该这样做吗?

\n

r devtools roxygen2 package-development

7
推荐指数
2
解决办法
1660
查看次数