编织为 pdf 时,ggplot2 条形图中出现不需要的条纹

Nin*_*ino 5 r ggplot2 knitr r-markdown

当将简单的条形图编织为 pdf 时,我的条形图中出现了一些不需要的条纹(请参见所附屏幕截图的右侧)。

---
title: "Don't Panic"
author: "Ford Perfect"
output: pdf_document
---


```{r, include = F}
library(ggplot2)
```

# Introduction

```{r, echo = F, fig.cap = "My plot"}
ggplot(mpg) + geom_bar(aes(x = as.factor(cyl), y = hwy), stat="identity")
```
Run Code Online (Sandbox Code Playgroud)

当我直接在 R-Studio 中创建绘图时,这些条纹不会出现(请参见所附屏幕截图的左侧)。

我找到了一种通过聚合之前的数据来删除这些条纹的方法:

ggplot(aggregate(hwy~cyl,mpg,"sum")) + 
  geom_bar(aes(x = as.factor(cyl), y = hwy), stat="identity")
Run Code Online (Sandbox Code Playgroud)

所以我知道这些条纹应该来自堆叠数据集中的所有其他组。这个理论似乎是合理的,因为当我按年份聚合数据集时,我得到了两条条纹(mpg 数据集中有 2 个唯一值)。

ggplot(aggregate(hwy~cyl*year,mpg,"sum")) + 
  geom_bar(aes(x = as.factor(cyl), y = hwy), stat="identity")
Run Code Online (Sandbox Code Playgroud)

但我认为当我将stat设置为Identity时,ggplot2 会自动为我进行聚合?实际上它可以直接在 R-Studio 中运行。那么也许这个问题与knitr有更多关系?

我确实相信我过去没有遇到过同样的问题。那么也许更新后有些东西发生了变化?实际上我所有的同事(另外 6 台 mac 和 windows 电脑)都有完全相同的问题。

R 版本 3.4.0 (2017-04-21)
平台:x86_64-w64-mingw32/x64(64 位)
ggplot2:2.2.1
knit:1.15.1

Pet*_*ter 3

正如评论中所述,图形的文件类型会影响图形在输出 pdf 中的呈现方式。

使用提供的块:

```{r, echo = F, fig.cap = "My plot"}
ggplot(mpg) + geom_bar(aes(x = as.factor(cyl), y = hwy), stat="identity")
```
Run Code Online (Sandbox Code Playgroud)

默认dev为 pdf,pdf 中生成的图形如问题帖子中所示:

在此输入图像描述

如果您明确使用dev,如下面的块所示,那么将生成一个 png,并且生成的 pdf 中的图像将如您所愿。

```{r, echo = F, fig.cap = "My plot", dev = "png"}
ggplot(mpg) + geom_bar(aes(x = as.factor(cyl), y = hwy), stat="identity")
```
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述