本期运用cursor解决生信基本技能学习过程中出现的问题。cursor是一款基于ChatGPT4的代码编辑器,正确运用能够大幅缩短学习周期。
以下记录了问题解决的过程,文章中包含的代码源于《R语言实战》第三章中的案例。
问题一:绘图时背景色显示失败
install.packages("RColorBrewer")
library(RColorBrewer)
n <- 7
mycolors1 <- brewer.pal(n, "Set1")
barplot(rep(1,n), col=mycolors) #条形图
plot(dose, drugA, type="o", main="病人对两种药物五个剂量水平上的响应情况",
lty=4,pch=11,cex=1,lwd=1,col=mycolors1,col.axis="red",col.lab="blue",col.main="purple"
,bg="black")
•输出结果中无法显示黑色背景
![](http://dingyue.ws.126.net/2023/0512/2393b31cj00ruiqt7004qd200u000clg00it007v.jpg)
解决方案
•直接用par()函数,即可输出黑背景,par()函数对代码中所有图形均有效
par(bg="black")
plot(dose, drugA, type="o", main="病人对两种药物五个剂量水平上的响应情况", lty=4, pch=11,cex=1,lwd=1,col=mycolors1,col.axis="red",col.lab="blue",col.main="purple")
•输出结果如下
![](http://dingyue.ws.126.net/2023/0512/d5843ea8j00ruiqt8004yd200u000acg00it006h.jpg)
延伸问题
1.打开新页面时,背景色不显示
dev.new() #打开新页面
plot(dose, drugA, type="o", main="病人对两种药物五个剂量水平上的响应情况", lty=4, pch=11,cex=1,lwd=1, col=mycolors1,col.axis="red", col.lab="blue",col.main="purple",bg="black")
![](http://dingyue.ws.126.net/2023/0512/86e659aaj00ruiqta006md200u000grg00g2008y.jpg)
•原因:bg参数对于plot函数无效,plot显示区域背景为黑色可能是因为之前通过par设置了背景为黑色,与询问后得到的回答一致
![](http://dingyue.ws.126.net/2023/0512/6e282e7fj00ruiqta001dd200gb00dtg009w008d.jpg)
解决方案补充
•可以用ggplot2解决背景色问题,但其他参数需要进一步设置
![](http://dingyue.ws.126.net/2023/0512/e7d59f33j00ruiqtb0029d200ge00ezg009u008z.jpg)
![](http://dingyue.ws.126.net/2023/0512/671239eej00ruiqtd005ud200u000eug00g2007x.jpg)
问题二:PDF保存时出现乱码
•代码同问题一,结果如下
![](http://dingyue.ws.126.net/2023/0512/5ee56557j00ruiqtd000gd2008t006lg008t006l.jpg)
•询问后,结果提示标题字体没有安装
![](http://dingyue.ws.126.net/2023/0512/3f813c07j00ruiqtd001hd20082005kg009t006r.jpg)
解决方案 思路一:解决字体问题,保存为PDF
•安装字体并保存为PDF,Rstudio中图片得到改善但PDF仍有问题
windowsFonts(myfont=windowsFont("SimHei"))
plot(dose, drugA, type="o", main="病人对两种药物五个剂量水平上的响应情况",lty=4, pch=11,cex=1,lwd=1, col=mycolors1,col.axis="red",col.lab="blue",col.main="purple")
par(bg="black")
![](http://dingyue.ws.126.net/2023/0512/974baf0bj00ruiqte005rd200u000bcg00it0073.jpg)
![](http://dingyue.ws.126.net/2023/0512/e8fab54dj00ruiqtf003id200u000jwg00fu00ah.jpg)
•继续询问
![](http://dingyue.ws.126.net/2023/0512/ae5f727fj00ruiqtg002wd200g300i3g009b00ag.jpg)
•尝试extrafont包,但是报错了
•将报错内容直接询问,得到同样答案,放弃该思路
![](http://dingyue.ws.126.net/2023/0512/34667619j00ruiqti0045d200gp00mwg00au00eu.jpg)
思路二:改变输出为PDF的代码,让字体成功显示
•以下是cursor提供的代码,提示使用Cairo包保存
library(Cairo)
CairoPDF("plot.png", width = 6, height = 6, dpi = 300, type = "cairo")
plot(x, y, main = "你好世界")
dev.off()
![](http://dingyue.ws.126.net/2023/0512/eabbc749j00ruiqtj001pd200gt00dpg009n007u.jpg)
•尝试后报错,针对报错语句继续询问
![](http://dingyue.ws.126.net/2023/0512/921e11dap00ruiqtj000od200li003dg00d00021.png)
![](http://dingyue.ws.126.net/2023/0512/096df874j00ruiqtl003xd200gf00krg009q00ca.jpg)
•提示直接删除语句,操作后仍不成功
![](http://dingyue.ws.126.net/2023/0512/a4cd63baj00ruiqtm005od200u000hog00f2008v.jpg)
•最后在plot()函数中加上family参数,问题解决
![](http://dingyue.ws.126.net/2023/0512/7ba425f9j00ruiqto004rd200u000jcg00f3009p.jpg)
思路三 安装字体,export保存为图片
•结果没问题
![](http://dingyue.ws.126.net/2023/0512/90d808d5j00ruiqtp0036d200u000g5g00it00a4.jpg)
来自师姐的补充 问题一:
其实这是一个值得注意的好问题,我们?plot()一下,就会发现 在绘制散点图时,plot函数里面的参数bg用法同points函数,不同于par函数,如图:
![](http://dingyue.ws.126.net/2023/0512/90d4db88p00ruiqtp0002d200a8003jg00a8003j.png)
points函数里的bg参数是这样解释的:
![](http://dingyue.ws.126.net/2023/0512/a90e92c9p00ruiqtq0001d200an002kg00an002k.png)
而par函数里的bg参数是这样:
![](http://dingyue.ws.126.net/2023/0512/652052eap00ruiqtq0006d200ix003tg00it003s.png)
师妹这个代码的pch是11,如果调整为21(即圆点),再用bg=“black”,就会发现那些点里是黑色填充的(草图附在下面)
总结来说,不同的函数又有不同的参数,虽然熟练了之后很多都见过了,但是想要全部记住是很困难的,学习新的R包的时候也会遇到没有见过的参数,这时候千万不要忘记去help里看一下,耐心读一下这些英文的注释,可能会很有帮助,也会提供一些思路~
cursor的功能虽然很强大,但是可能首先需要我们精准的提出问题,通过郭师妹的尝试我们也看到了,它解读代码的能力是很强的,也会给出很多思路,不过不一定能精确地解决问题;
我想也许下次我们在使用的时候,首先人工摸索一番,再拆解出最关键的那步进行提问,可能能最大化的利用这个AI的功能
![](http://dingyue.ws.126.net/2023/0512/cb92cae8j00ruiqtr0008d200ak00d6g009a00bk.jpg)
问题二:
可以看出来郭师妹是很认真的在尝试解决问题的~cursor提供的回答也确实提供了一些思路,不过可能不能完全依赖它。
其实会出现这个点点点主要是因为在保存PDF时,中文字体会出现乱码。
如果把标题变为英文就不会有这个问题,而一般我们做的图也基本都是英文;但如果想要保存为中文标题的话,可以考虑安装Cairo包,用CairoPDF()函数保存,并在plot函数里使用family参数定义一个中文字体,例如“GB1”就是宋体,这样就可以保存了
正如师兄说的,发现问题解决问题是一种能力,基于问题的学习是很重要的;
有时候学习十几行代码是很容易的,但是蹦出来的一个报错却需要花上成倍的时间去解决,可是解决报错的时候,我们也极大的锻炼了提出问题的能力,检索答案的能力,等等。
正所谓不打不相识,其实在和error过招的时候,也恰恰是我们培养和R语言默契的过程呀~
祝师弟师妹享受解决报错的过程(狗头)
以下就是解决保存PDF时中文字体会出现乱码的方法:
library(Cairo)
CairoPDF("myplot1.pdf") #重新起一个pdf文件名字
myplot <- plot(dose,drugA,type="o",main = "病人对两种药物五个剂量水平上的响应情况",
family="GB1", #宋体
lty = 4, pch = 11, cex= 1, lwd= 1,col=mycolors1,
col.axis="red",col.lab = "black",col.main = "black",bg = "black")
dev.off()
![](http://dingyue.ws.126.net/2023/0512/231995b3j00ruiqtr000sd200mh00m0g00b100as.jpg)
SCI母语润色
专注生物医学领域
唯 问 生 物
专注肿瘤基础研究
19901610324同微信
热门跟贴