【问题标题】:Remove Pixelation on RMarkdown Plots去除 RMarkdown 图上的像素化
【发布时间】:2018-03-12 08:26:22
【问题描述】:

我正在尝试使用以下代码在 RMarkdown 上创建绘图,但由于某种原因,我绘制的线条变得像素化(见下文)。我似乎找不到解决方案,因为更改代码块的 dpi 没有奏效。

数据链接:https://catalog.data.gov/dataset/2013-cartographic-boundary-file-state-for-united-states-1-20000000

```{r}
library(nycflights13)
library(maps)
library(maptools)
library(rgdal)

usa <- readShapePoly(
"data/census_bureau/cb_2013_us_state_20m/cb_2013_us_state_20m.shp")

conterm <- usa[usa$STATEFP != "02" & usa$STATEFP != "15" & usa$STATEFP != "72",]
conterm_projected <- spTransform(conterm, CRS(conterm_proj4)

proj4string(conterm) <- CRS("+proj=longlat")
conterm_proj4 <- "+proj=aea +lat_1=29.5 +lat_2=45.5 +lon_0=97.2w"


sfo <- airports[airports$faa == "SFO",]
jfk <- airports[airports$faa == "JFK",]

latlon <- data.frame(lon=c(sfo$lon, jfk$lon), lat=c(sfo$lat, jfk$lat))
coordinates(latlon) <- c("lon", "lat")
proj4string(latlon) <- CRS("+proj=longlat")
latlon_projected <- spTransform(latlon, CRS(conterm_proj4))


par(mfrow=c(2,1), mar = rep(1,4))
plot(conterm, border="#cccccc", lwd=0.5, main = "Mercator Projection")
points(c(sfo$lon, jfk$lon), c(sfo$lat, jfk$lat), col="red", lwd=2, pch=19)
lines(c(sfo$lon, jfk$lon), c(sfo$lat, jfk$lat), col="red", lwd=2)

plot(conterm_projected, border="#cccccc", lwd=0.5, main = "Albers Projection")
points(latlon_projected@coords, col="red", lwd=2, pch=19)
lines(latlon_projected@coords, col="red", lwd=2)
```

这是上面代码的输出,注意像素化的红线

【问题讨论】:

  • 你试过用 svg 代替 png 吗? (代码块选项中带有dev = 'svg'
  • @F.Privé 是的,我现在刚刚尝试过,但没有成功。虽然我可能把它弄错了。 ```{r, dev='svg'}
  • 您介意发布一个可复制的示例吗?
  • @OttToomet 我已经对其进行了编辑,以包含我用来获取机场数据的包。整个集合都可以从我添加的包中重现。
  • fig.retina=2。这应该是最新 rmarkdown 中的默认设置,但请在块中试一试。

标签: r knitr r-markdown


【解决方案1】:

你的身材太小了。对我来说,这段代码在 pdf 和 html 中都给出了流畅的线条:

```{r, fig.width=20, fig.height=25}
library(nycflights13)
library(maps)
library(maptools)
library(rgdal)

usa <- readShapePoly("~/d/cb_2013_us_state_20m.shp")
conterm_proj4 <- "+proj=aea +lat_1=29.5 +lat_2=45.5 +lon_0=97.2w"
conterm <- usa[usa$STATEFP != "02" & usa$STATEFP != "15" & usa$STATEFP != "72",]
proj4string(conterm) <- CRS("+proj=longlat")

sfo <- airports[airports$faa == "SFO",]
jfk <- airports[airports$faa == "JFK",]

latlon <- data.frame(lon=c(sfo$lon, jfk$lon), lat=c(sfo$lat, jfk$lat))
coordinates(latlon) <- c("lon", "lat")
proj4string(latlon) <- CRS("+proj=longlat")
latlon_projected <- spTransform(latlon, CRS(conterm_proj4))


par(mfrow=c(2,1), mar = rep(1,4))
plot(conterm, border="#cccccc", lwd=0.5, main = "Mercator Projection")
points(c(sfo$lon, jfk$lon), c(sfo$lat, jfk$lat), col="red", lwd=2, pch=19)
lines(c(sfo$lon, jfk$lon), c(sfo$lat, jfk$lat), col="red", lwd=2)

plot(conterm, border="#cccccc", lwd=0.5, main = "Albers Projection")
points(latlon_projected@coords, col="red", lwd=2, pch=19)
lines(latlon_projected@coords, col="red", lwd=2)
```

请注意,您使用par(mfrow=c(2,1)) 在图像画布上挤压两个大致二次图形,因此每个图像大约是标准尺寸的 1/4。

或者,分别插入两个图像。这样,这两个都应该是全尺寸的。

【讨论】:

  • 感谢您的评论!我刚才试了一下,还是有像素化的。
猜你喜欢
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2018-10-03
  • 2012-07-13
  • 2021-08-02
  • 2022-01-20
  • 2017-07-01
  • 1970-01-01
相关资源
最近更新 更多