首页 理论教育 基于ggplot的政经数据可视化教程:简易图片保存方法

基于ggplot的政经数据可视化教程:简易图片保存方法

时间:2023-11-19 理论教育 版权反馈
【摘要】:保存图片的最简单方法是直接在屏幕上截图,Rstudio用户亦可通过点击中绘图窗口上方的Export按钮保存图片。文件后缀名决定了图片的格式,如果你希望保存png格式的图片,就以".png"为后缀名。参数width和height在默认状态下会使用当前作图窗口的尺寸,这意味着我们在保存前只要把窗口拉伸到合适的大小就可以了。图片尺寸与dpi的关系是如下:例如,宽为7,高为6,单位为英寸,dpi为800,则被保存图片的宽就是7*800=5600像素,高是6*800=4800像素。

基于ggplot的政经数据可视化教程:简易图片保存方法

保存图片的最简单方法是直接在屏幕上截图,Rstudio用户亦可通过点击中绘图窗口上方的Export按钮保存图片。不过,如果我们要对图片的尺寸、清晰度和格式作更精细的调整,最好使用ggplot2包中的ggsave函数。关于确保汉字能够正常显示并保存的方法,请参阅后面关于添加文字的章节。

如果我们已经画出一个图表了,那么使用ggsave("文件名")就可进行保存了。常用的参数有:

filename:文件名。文件后缀名决定了图片的格式,如果你希望保存png格式的图片,就以".png"为后缀名。

plot:默认状态下,ggsave会保存现有的最后一个图表。但如果我们把图表赋值给一个变量,则plot要指向这个变量。

width、height、units:图片的宽、高以及使用的单位。其中,units的可选项为"in"、"cm"、"mm",这一项一般无需改动,使用默认的"in"(英寸)即可。参数width和height在默认状态下会使用当前作图窗口的尺寸,这意味着我们在保存前只要把窗口拉伸到合适的大小就可以了。不过,有时(特别是需要保证作图的可重复性时),需要明确指定这两个参数的数值。要强调的是,ggsave不能以像素为单位。在默认以"in"为单位的情况下,务必不要设置像width为800、height为600这样大的数值。

dpi:以每英寸像素数表示的分辨率。默认值为300。如果我们需要得到更清晰的图片,就应增加dpi。图片尺寸与dpi的关系是如下:例如,宽为7,高为6,单位为英寸,dpi为800,则被保存图片的宽就是7*800=5600像素,高是6*800=4800像素。

library(ggplot2)

dat=read.csv("happy small.csv", row.names=1) # 课件中的文件

p=ggplot(dat)+geom_point(aes(GDP_percap, Satisfaction), size=10)+

labs(title="A Very Long Title", x="标题")+

theme(text=element_text(size=23), axis.line=element_line(size= 2))

## 通过拉伸窗口确定尺寸

# 在拉伸窗口至合适大小后用ggsave("文件名", plot=p, dpi=500)

## 通过设置宽和高的确定尺寸(www.xing528.com)

# 请尝试用以下两种设置保存图片

# ggsave("文件名", plot=p, width=8, height=6, dpi=150) # 图片1

# ggsave("文件名", plot=p, width=4, height=3, dpi=300) # 图片2

在用看图软件查看图片时,我们会发现尽管两张图片有相同的像素数,但是与图片2相比,似乎图片1上的点和文字更小,线更细。实际上,ggplot中的点、文字和线是以绝对单位绘制的,因此严格来讲,它们的大小并没有发生变化;只不过,在尺寸较大的图片(图片1)上,图形显得小一些或细一些而已。这就是说,就呈现出来的效果而言,图表上图形的大小既取决于我们作图时设置的参数(如size参数),也取决于保存图片时对整个图片的尺寸的设置。

#==========

# 练习去掉图片的白边

#==========

# 绘图时若使用coord_fixed或theme(aspect.ratio=...)得到的图片可能有多余的白边我们可以用image_trim函数去掉白边

library(magick)

ggplot()+geom_point(aes(c(0, 1, 2, 3, 4, 5), c(0, 2, 4, 6, 8, 10)))+ coord_fixed()

# ggsave("文件名")

# img=image_read("文件名")

new=image_trim(img)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈