技术标签: python ggplot2 数据分析 r语言 数据分析log 数据可视化
针对于ggplot2的可视化教程网上有很多,展示了很多ggplot2的图示,根据代码照猫画虎我们都可以去复原,但复原出来的图会有一些粗糙感。如何优雅的将这些图形应用到生产实际中呢,网上的资料并没有系统的说明,那今天来演示一下,希望起到抛砖引玉的作用。
在数据分析领域,数据可视化是数据分析师所需具备的一个很重要的技能,论便捷程度excel作图当属第一,但涉及到图形多样性及可定制性的话,R语言和python 是首当其冲的好工具。由于工作需要,笔者经常需要多个工具切换使用,个人认为在可视化上还是R语言更胜python一筹,本文主要由R语言的ggplot2包说起,当然所碰到的问题也是从ggplot2开始。
咱们还是先假定一个场景。有以下的数据,需要展示出每日各个水果的销量(sold_amount),及购买用户数(customers)。考虑到图形传递信息的丰富度,我们用ggplot2来执行这项任务。
笔者刚接触ggplot2时也惊叹于他的各种示例图片,但实际工作中,又发现这些示例又有一些华而不实,想象一下借助ggplot2的示例,如果你把图做成这样放到你的汇报或总结里, 可能会有一些尴尬,懂得人知道你确实用到了很多的ggplot知识,不懂得人可能就会说,这图好丑呀?好吧 确实很丑,而且你用到了这些知识但没用好等于不会
library(ggplot2) ##做图
library(reshape2) ##揉数据
data <- read.table('clipboard',header = TRUE,stringsAsFactors = FALSE) #将长条形数据读入,这里直接用剪切板读了。
data$date <- as.Date(data$date,'%m/%d') #将日期列识别出来
data_melt <- melt(data,id.vars = c("date","goods_type")) #需要把数据揉成ggplot所需要的长表数据:日期列(date),水果名(goods_type),变量列(销量,顾客数),变量对应的值
head(data_melt)
##ggplot的常规默认作图
p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) + ##基本图形元素
geom_line()+ ##加入线形
facet_grid(variable~.,scales = 'free_y')+ ##调整分图y轴值范围
scale_x_date(date_breaks = "1 day", date_labels = "%m-%d")+ ##设置x轴lab的样式
theme(axis.text.x=element_text(angle=60, hjust=1)) ##设置x轴lab的位置和间距。
p
咱们先来分析一下,这个图为什么会丑。
针对第一个问题:很好解决,ggplot2有很多主题供我们选择,这里我们选择theme_light,看下效果先:
###美化后 +theme
p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) +
geom_line()
facet_grid(variable~.,scales = 'free_y')+
scale_x_date(date_breaks = "1 day", date_labels = "%m-%d")+
theme_light()+ ###调用ggplot自带的一些theme
theme(axis.text.x=element_text(angle=60, hjust=1))
p
针对第二个问题:我们参考excel的点线图去做,也很优雅。看看效果:
##+点线
p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) +
geom_line(linetype="solid",size=0.8)+ ##更改线型 线粗
geom_point(size=2)+ ##加入点 并调整点的大小
facet_grid(variable~.,scales = 'free_y')+
scale_x_date(date_breaks = "1 day", date_labels = "%m-%d")+
theme_light()+
theme(axis.text.x=element_text(angle=60, hjust=1))
p
针对第三个问题:就得看自己的审美了。调整布局,字体,图例类型 及摆放位置,再加上一些标题,副标题。
##美化后。+修改字体,及图例位置
p <- ggplot(data_melt,aes(date,value,group = goods_type,color=goods_type)) +
geom_line(linetype="solid",size=1.2)+
geom_point(size=2)+
facet_grid(variable~.,scales = 'free_y')+
scale_x_date(date_breaks = "1 day", date_labels = "%m-%d")+
theme_light()+
theme(axis.text.x=element_text(angle=60, hjust=1))+
ggtitle("Daily data of goods_type\n")+
xlab("Date") + ylab("Value")+
theme(
##图形标题设置 字体和大小
plot.title = element_text(family='Times', face='bold.italic',size = 36),
##x坐标轴
axis.title.x = element_text(family = 'Times',face = 'bold',size =27),
##y坐标轴
axis.title.y = element_text(family = 'Times',face = 'bold',size=27),
##图例标题
legend.title = element_text(family = 'Times',face = 'bold',size=26),
##图例内的字体
legend.text = element_text(family = 'Times',face = 'bold',size=20),
##分面或分幅字体
strip.text = element_text(family = 'Times',face = 'bold.italic',size=27),
##图例位置
legend.position="bottom"
)
p
当然,这个分享主要是针对于对R语言的ggplot2包 或python里的ggplot2包有了解的同学,关于ggplot2有很多有用和好用的东西值得去钻研和分享,希望大家共同努力。
Android作为开源框架,开放之余,所要面临的就是安全问题,世间之事,有正就有邪,有攻就有守,作为开发者虽然不需要进入专业安全领域,但还是需要掌握基本的安全常识和原理。
用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)参数说明:labels 就是要删除的行列的名字,用列表给定axis 默认为0,指删除行,因此删除columns时要指定axis=1;index 直接指定要删除的行columns 直接指定要删除的列inplace=False,默认该...
1、npm查看镜像配置地址npm get registry2、还原npm镜像配置npm config set registry https://registry.npmjs.org/3、查看npm镜像配置,我们会发现已经变了npm get registry
概述YOLOv5(v4.0 release开始)已经在本地集成了Weights & Biases,也就是可视化的工具wandb,可方便的追踪模型训练的整个过程,包括模型的性能、超参数、GPU的使用情况、模型预测,还有数据集。软硬件环境OS:CentOS 7.7.1908 [[email protected] yolov5-docker-image]$ cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core)[[email protected] y
2020-01-15【实现后的效果】首先,先展示效果,然后说明实现方案:在表格的其他任何位置点击如图所示的『121 电气零件』按钮,就会一下跳转到事先定义好的单元格,方便在数据众多的表格数据中进行定位。【实现方案】第一步,点击【插入】》【形状】,在表里随便拉个方框,输入按钮名称;第二步,点击【公式】》【名称管理器】,然后点击『新建』,按图所示设置公式名称和引用位置,点击『确定』;...
看了你提的问题,就是想向人工智能领域发展,而不知道,编程语言是学Python好还,学Java好,我给你截一张的我博客的评论,如下这是一名java工程师的回答,我想这应该是很有说服务力的吧,如果在前3年,Matlab、Scala、R、Java和Python,还有的一争,但是现在,Python作为AI时代的头牌语言已经确定。时至今日,Python已经是数据分析和AI的第一语言,网络攻防的第...
Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲金磊 鱼羊 发自 凹非寺 量子位 报道 | 公众号 ...
watch侦听器中,我们要将新的值赋给this.a出错watch: { value: (newV, oldV) =&amp;amp;gt; { this.a = newV; }}这里报错undefined,这里错误的原因是不能写成箭头函数。写成箭头函数后,this会取上下文,而不是组件里面的this了,正确写法为:watch: { value: function(newV, oldV) { t...
<br />Linux下应用程序开发:QT的内部进程通信<br />http://www.lupaworld.com/tutorial-view-aid-7177.html<br /> <br />Qt 作为一种跨平台的基于 C++ 的 GUI 系统,能够提供给用户构造图形用户界面的强大功能。自从 1996 年 Qt 被 Trolltech 公司发布以来,该系统成为世界上很多成功的图形用户应用所使用的主要系统。更为重要的是,Linux 操作系统的桌面环境系统 KDE 也是基于 Qt 构造的。目前,Qt 已经
lvs的是通过vrrp协议进行数据包转发的,提供的是4层的负载均衡。特点是效率高,只要你机器网卡抗的住就不是问题。 haproxy可以提供4层或7层的数据转发服务,能做到7层的好处是可以根据服务所处的状态等进行负载。 以上两者只是实现了负载均衡,但是他们本身是明显的单点故障,因此需要使用双机软件做热备,来保证高可用性。keepalived可以通过检测vrrp数据包来切换,...
https://github.com.cnpmjs.org/备用https://www.gitclone.com/gogs/https://gitclone.com/https://gitee.com/
中间件的添加在 server.Server 结构体有个一方法 Use // Use adds the given middleware in the Server. func (e *Server) Use(middleware Middleware) { e.ngin.use(middleware) } type Middleware func(next http.HandlerFunc) http.HandlerFunc