- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章R语言绘图-点图dot plot由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
点图又叫Cleveland dot plot,克利夫兰点图。可以在水平线上绘制大量的点,更好的表示点之间的关系。强调数据的排序展示以及数据之间的差距.
点图一般是横向展示,所以y轴为类别型变量,x轴为需要展示的数据值.
。
dotchart(x, labels = NULL, groups = NULL, gdata = NULL, ann = par("ann"), xaxt = par("xaxt"), frame.plot = TRUE, log = "", cex = par("cex"), pt.cex = cex, pch = 21, gpch = 21, bg = par("bg"), color = par("fg"), gcolor = par("fg"), lcolor = "gray", xlim = range(x[is.finite(x)]), main = NULL, xlab = NULL, ylab = NULL, ...)
R语言的base包里面自带的dotchart函数可以绘制点图.
上面简介中的例子copy自dotchart的函数帮助文档.
dotchart(VADeaths, main = "Death Rates in Virginia - 1940")
数据是1940年每1000人的死亡率。数据按照年龄段来区分,并且按照地方,男女性分组.
> VADeaths Rural Male Rural Female Urban Male Urban Female50-54 11.7 8.7 15.4 8.455-59 18.1 11.7 24.3 13.660-64 26.9 20.3 37.0 19.365-69 41.0 30.9 54.6 35.170-74 66.0 54.3 71.1 50.0
。
我想比较特定地方的男女死亡率的比较。这样的话,数据需要处理。下面的code处理的比较麻烦。但是达到了我要的效果.
ruralDFMale <- data.frame(rownames(VADeaths),VADeaths[,1], c("Male","Male","Male","Male","Male"))names(ruralDFMale ) <- c("AgeGroup", "DeathRate","Gender" )ruralDFFeMale <- data.frame(rownames(VADeaths),VADeaths[,2], c("Female","Female","Female","Female","Female"))names(ruralDFFeMale) <- c("AgeGroup", "DeathRate","Gender" )ruralDF <- rbind(ruralDFMale, ruralDFFeMale)colorFun <- function(gender) { colorVec <- vector() for(g in gender) { if(g == "Female") { colorVec <- c(colorVec, "Red") } else { colorVec <- c(colorVec, "Blue") } } colorVec }dotchart(ruralDF$DeathRate, main = "Death Rates in Virginia - 1940", groups=ruralDF$AgeGroup,color=colorFun(ruralDF$Gender))
处理过后的数据 。
> ruralDF AgeGroup DeathRate Gender50-54 50-54 11.7 Male55-59 55-59 18.1 Male60-64 60-64 26.9 Male65-69 65-69 41.0 Male70-74 70-74 66.0 Male50-541 50-54 8.7 Female55-591 55-59 11.7 Female60-641 60-64 20.3 Female65-691 65-69 30.9 Female70-741 70-74 54.3 Female
图中的红色为女性,蓝色为男性。结果符合一般的常识,女性的寿命高于男性。所以同一年龄段的女性死亡率比男性低.
补充:R语言作图――violin plot(小提琴图) 。
小仙同学决定学习R语言来提升自己作图的“逼格”的时候,心中还有有些疑虑的(嘿嘿,我这么懒,可不愿意做无用功了?)。仔细想了想,貌似又找到了两个学习R的理由.
一是R可以帮助我们避免重复劳动,实现“一劳永逸”的终极梦想。尽管非常不想承认这一事实,在科研的过程中,小仙同学制造出了大量“无效”的数据(sign…),但也不得不“绞尽脑汁”、“竭尽全力”地进行花式分析,试图找出合理的解释。这时候用Excel或者Origin作图的劣势就显现出来了,每换一种分析方法或者是数据,我们都需要经过“插入图表”、“调整颜色”、“调整间距”等等繁杂的工序画出一张可以拿去“面圣”的图。小仙同学一想到这些就感觉“累觉不爱”了.
二是R可以自动生成比较貌美的图。不知道大家有没有这样的感受,自己辛辛苦苦画了半天、调整的半天的图会得到真实却很残忍的评价“很丑”(这是小仙同学心中永远的痛)。即使本小仙自以为眼光独特、品味高雅,费劲尝试“高级”的色系,但搭配出来总是那么不尽人意(实测网红晚晚带火的“莫兰迪色”不适用于科研绘图)。颜色的搭配、饱和度和透明度的调整没有想象中那么容易。折腾了半天,天生就爱不服气的本小仙,最后决定还是把专业的事交给专业的人做啦(偷偷告诉你,据说有科学家专门研究paper插图的配色,所以自己画的图没有那么貌美的时候也不要“妄自菲薄”啦).
好了,叨叨这么多,终于要开始进入正题啦。一开始用R绘图的时候,小仙同学其实是非常痛苦的,因为没有编程基础,又怼了好几年瓶瓶罐罐,看到一行行代码,脑子里飘过的全是“&%#@$”。尤其是当你有实验要做、报告要写、作业要交的时候,平心静气地坐下来踏踏实实学习真的太难了(有人说小仙同学那么忙是因为效率低,好像真有些道理,我这真是“唉”,有苦说不出).
后来本小仙的学习策略就非常简单,用到啥就去搜啥,我对数据结构、语法结构一点都不感兴趣,能让我用最短的时间内画出我想要的图,就是最好的方法。即使这样,小仙同学还是费了一些功夫。因为网上的一些教程,很多都是从别处复制粘贴过来的,本身就不完整。另外一个原因,某些大神觉得自己的教程已经足够通俗易懂了,有些大家都知道的基础知识根本不需要讲(小仙同学不服,有基础的同学不用看教程也可以自己摸索出来,真正需要教程的就是我们这些小白).
小仙同学愿意尝试一下,把最最全面、稍作修改就能拿去的方法code分享一下,也不枉费花了那么多的时间.
那就先从violin plot开始吧.
(假设你已经安装了R和RStudio) 。
。
首先要把你想要绘图的数据调整成R语言可以识别的格式.
一般我们的数据都是保存在excel文档里,这里建议大家在excel中保存成csv格式,读写的速度会比xlsx快很多。(小仙同学的亲身经验,我的有些数据有两万行,xlsx在我的耐心范围内读不进去,RStudio崩溃).
数据的格式如下图:一列表示一种变量,第一行是列名 。
。
data<-read.csv(“your file path”, header = T) #注释:header=T表示数据中
的第一行是列名,如果没有列名就用header=F 。
。
install.package(“ggplot2”) #注释:ggplot2是目前公认绘图很强的一个安装包library(ggplot2) #注释:package在使用之前需要调用
。
data$dose <- as.factor(data$dose) #注释:此处dose可用你的变量名称替换,$表示取数据集里的某一个元素
p<-ggplot(data, aes(x = dose, y = len)) #注释:”x=”,”y=”表示x轴和y轴表示的变量数值,p表示图像对象p+geom_violin() #注释:画出violin plot的函数
。
p+geom_violin(aes(fill = dose)) #注释:按组别填充不同的颜色
*如果你想手动改变颜色,可以使用这一句 。
p+geom_violin(aes(fill = “dose”))+scale_fill_manual(values=c("#56B4E9"))#注释:”#56B4E9”可以用其他颜色的代码来替换
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.
原文链接:https://blog.csdn.net/santiagozhang/article/details/104401717 。
最后此篇关于R语言绘图-点图dot plot的文章就讲到这里了,如果你想了解更多关于R语言绘图-点图dot plot的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
至少在某些 ML 系列语言中,您可以定义可以执行模式匹配的记录,例如http://learnyouahaskell.com/making-our-own-types-and-typeclasses -
这可能是其他人已经看到的一个问题,但我正在尝试寻找一种专为(或支持)并发编程而设计的语言,该语言可以在 .net 平台上运行。 我一直在 erlang 中进行辅助开发,以了解该语言,并且喜欢建立一个稳
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我正在寻找一种进程间通信工具,可以在相同或不同系统上运行的语言和/或环境之间使用。例如,它应该允许在 Java、C# 和/或 C++ 组件之间发送信号,并且还应该支持某种排队机制。唯一明显与环境和语言
我有一些以不同语言返回的文本。现在,客户端返回的文本格式为(en-us,又名美国英语): Stuff here to keep. -- Delete Here -- all of this below
问题:我希望在 R 中找到类似 findInterval 的函数,它为输入提供一个标量和一个表示区间起点的向量,并返回标量落入的区间的索引。例如在 R 中: findInterval(x = 2.6,
我是安卓新手。我正在尝试进行简单的登录 Activity ,但当我单击“登录”按钮时出现运行时错误。我认为我没有正确获取数据。我已经检查过,SQLite 中有一个与该 PK 相对应的数据。 日志猫。
大家好,感谢您帮助我。 我用 C# 制作了这个计算器,但遇到了一个问题。 当我添加像 5+5+5 这样的东西时,它给了我正确的结果,但是当我想减去两个以上的数字并且还想除或乘以两个以上的数字时,我没有
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
这就是我所拥有的 #include #include void print(int a[], int size); void sort (int a[], int size); v
你好,我正在寻找我哪里做错了? #include #include int main(int argc, char *argv[]) { int account_on_the_ban
嘿,当我开始向数组输入数据时,我的代码崩溃了。该程序应该将数字读入数组,然后将新数字插入数组中,最后按升序排列所有内容。我不确定它出了什么问题。有人有建议吗? 这是我的代码 #include #in
我已经盯着这个问题好几个星期了,但我一无所获!它不起作用,我知道那么多,但我不知道为什么或出了什么问题。我确实知道开发人员针对我突出显示的行吐出了“错误:预期表达式”,但这实际上只是冰山一角。如果有人
我正在编写一个点对点聊天程序。在此程序中,客户端和服务器功能写入一个唯一的文件中。首先我想问一下我程序中的机制是否正确? I fork() two processes, one for client
基本上我需要找到一种方法来发现段落是否以句点 (.) 结束。 此时我已经可以计算给定文本的段落数,但我没有想出任何东西来检查它是否在句点内结束。 任何帮助都会帮助我,谢谢 char ch; FI
我的函数 save_words 接收 Armazena 和大小。 Armazena 是一个包含段落的动态数组,size 是数组的大小。在这个函数中,我想将单词放入其他称为单词的动态数组中。当我运行它时
我有一个结构 struct Human { char *name; struct location *location; int
我正在尝试缩进以下代码的字符串输出,但由于某种原因,我的变量不断从文件中提取,并且具有不同长度的噪声或空间(我不确定)。 这是我的代码: #include #include int main (v
我想让用户选择一个选项。所以我声明了一个名为 Choice 的变量,我希望它输入一个只能是 'M' 的 char 、'C'、'O' 或 'P'。 这是我的代码: char Choice; printf
我正在寻找一种解决方案,将定义和变量的值连接到数组中。我已经尝试过像这样使用 memcpy 但它不起作用: #define ADDRESS {0x00, 0x00, 0x00, 0x00, 0x0
我是一名优秀的程序员,十分优秀!