Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群

R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群

作者头像
拓端
发布于 2021-08-12 07:00:41
发布于 2021-08-12 07:00:41
1.9K00
代码可运行
举报
文章被收录于专栏:拓端tecdat拓端tecdat
运行总次数:0
代码可运行

原文链接:http://tecdat.cn/?p=23322

月亮图和饼图

饼图把一个圆分成多个部分,这些部分的弧长(以及面积)代表一个整体的比例。月亮图也是如此,它把一个圆分成多个部分,这些部分的面积代表整个圆的比例,但在月亮图中,这些部分被画成圆的月牙形,就像月相。

使用月亮图而不是饼图背后的动机主要是审美的选择。还要注意的是,由于月亮图的各部分是从圆的一侧或另一侧扫过的,所以一般只适合于描述一个或两个群体。

月亮图与Kosara(2019)1的 "圆形切片 "图类似。在研究受试者对不同图表类型中百分比的感知时,"圆形切片 "的表现与饼图类似。月亮图与 "圆形切片 "的不同之处在于,后者是在一个基础圆上滑动第二个同样大小的圆盘,更像是月食而不是月相。然而,两者都依赖面积作为视觉线索。

用法

ggplot2数据可视化包,为R语言中的月亮图提供支持。它们的绘制方式与ggplot2中的点最为相似:它们的位置由一个x和一个y坐标定义,它们的大小与坐标系无关,所以它们总是保持圆形。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data.frame(x = 1:5, y = 1)) +
  geom_point(y = 2) +
  scale_size(range = c(5, 10))+

两个新的美学在geom_moon中也很重要:比例和填充

比例美学

比率控制要绘制的月亮的比例。它必须在0("新月",实际上什么都没画)和1("满月",即一个圆)之间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data.frame(x = 1:5, y = 0, ratio = 0:4 * 0.25), aes(x = x, y = y),ratio = ratio), size = 20, fill = "black") +
  geom_text(aes(y = y + 1, label = ratio)) +

填充美学

右边需要一个布尔值,控制月亮是 "升 "还是 "降",也就是说,它是由右边还是左边 "填充 "的。

用两种颜色制作一个 "完整 "的月亮的一种方法是用right = TRUE表示一种颜色,用right = FALSE表示另一种颜色,比例互补。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot( moons) +
  geom(aes(x, y, ratio = ratio, right = right, fill = right)) +

图例关键字

三个关键字,用于不同类型的图例:默认值,绘制一个右边的悬臂月(见上文)。

left从左边画出一个新月,与长臂月互补,这对组合图例很有用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(aes(x, y, ratio = ratio, right = right, size = 2^x)) +
  geom(data = subset(moons, right)) +
  geom(
    key = left
  )

key画的是一个圆。它类似于 "点 "的形状,但计算方式略有不同,所以如果你想让图例月亮的尺寸和月亮的尺寸相匹配,就更合适。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(tidymoons) +
  geom(key = full
  ) +

工作实例

地图上的月亮图

多饼图的一个常见用途是表示地图上不同坐标处的比例。x和y维度已经致力于地图坐标,所以像柱状图这样的比例可视化就比较困难。这是一个尝试月形图的绝佳机会!

饼图地图在人口遗传学中很流行,所以让我们看一下该领域的一个例子。数据包含果蝇种群中Adh基因的两个变体的频率。这些种群中有许多都很接近,所以我们必须处理过度绘制的问题,我们在下面手动处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
moonmap <- ggplot(da, aes(long, lat)) +
  geom_polygon(
    data = map_data(
      "world"),
    aes(group = group),
  ) +

如果我们想在图例中明确标注等位基因,那么我们需要将它们映射到一个组中,这就要求我们将数据重新排列成一个 "较长"("整齐")的格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 reshape(
  v.names = "percent",
  times = c("dhF", "dhS"),
  direction = "long"
)

月球数据

有时你只是想绘制月球的文字表述。改编自NASA的月球数据,包含了2019年每天从地球到月球的距离,以及月球四个主要阶段每次出现的日期(UTC)。我们可以用月球图(在这种情况下与饼图相同)绘制这些主要阶段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(lunardist, aes(date, distance)) +
  geom_line() +
  # 将下层绘制成一个完整的圆
  geom(data = phase, ratio = 1, size = 5, fill = "black") +

Harvey balls哈维球分析法

"哈维球 "本质上是用于定性比较的饼图,通常以表格形式出现。我们可以使用月形图来达到同样的目的。

首先,让我们获取一些数据。

哈维月亮的图表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先,我们将数据变化为 "长 "格式,以方便绘图。
rest <- reshape(
  restaurants,
  timevar = "Category",
  direction = "long"
)

ggplot(rest, aes(0, 0)) +
  geom(aes(ratio = (Score - 1) / 4), fill = "black") +
  theme(
    panel.grid = element_blank()

参考文献

  • Kosara, R. 2019. Circular Part-to-Whole Charts Using the Area Visual Cue. EuroVis 2019 - Short Papers. https://doi.org/10.2312/evs.20191163↩︎
  • Oakeshott, J.G., et al. 1982. Alcohol dehydrogenase and glycerol-3-phosphate dehydrogenase clines in Drosophila melanogaster on different continents. Evolution, 36(1): 86-96.↩︎
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拓端数据部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WCF后续之旅(15): 逻辑地址和物理地址
在WCF中,每个终结点都包含两个不同的地址——逻辑地址和物理地址。逻辑地址就是终结点Address属性表示的地址。至于物理地址,对于消息发送放来讲,就是消息被真正发送的目的地址;而对于消息的接收放来讲,就是监听器真正监听的地址。 一、服务端的物理地址 在默认的情况下,终结点的逻辑地址和物理地址是同一个URI。换句话说,终结的逻辑地址是必须的,如何物理地址没有指定的,默认使用逻辑地址作为物理地址。对于消息接收方的终结点来讲,物理地址就是监听地址,通过ServiceEndpoint的ListenUri表示:
蒋金楠
2018/01/16
8350
WCF后续之旅(15): 逻辑地址和物理地址
WCF服务端运行时架构体系详解[上篇]
WCF的服务端架构体系又可以成为服务寄宿端架构体系。我们知道,对于一个基于某种类型的服务进行寄宿只需要使用到一个唯一的对象,那就是ServiceHost。甚至在某种语境下,我们所说的服务实际上就是指的对应的ServiceHost对象。整个服务寄宿过程包括两个阶段,即服务描述的创建和服务端运行框架的建立。而第一个阶段创建的服务描述是为了第二个阶段对服务端运行时框架建立服务的,所以我们有必要在对服务描述进行简单的介绍。 目录: 一、从服务描述(Service Description)谈起
蒋金楠
2018/02/07
7120
WCF服务端运行时架构体系详解[上篇]
WCF配置文件与文件下载之坎坷路
题外话:本以为我会WCF了,精通WCF了,毕竟刚做过一个WCF的项目,不就是写写契约接口,然后实现接口,改下配置。最后用控制台或者服务发布一下,不就能用了。不就是简单ABC吗?不是So Easy吗?做第二个项目的时候我悲剧了,被碰的头破血流!忽然发现什么什么都不会(第一个项目比照网上教程一步一步弄的),连写一个简单hello world都写不出来。我之前还以为自己很懂了…… 一、WCF文件配置       为了不重蹈覆辙,这次争取把他整懂整透(当然这才是入门而已)。WCF很强大,它的强大跟它的配置有很大的
hbbliyong
2018/03/06
1.2K0
[WCF 4.0新特性] 默认终结点
很多WCF的初学者是从之前的Web服务上转移过来的,他们非常怀念.asmx Web服务无配置的服务寄宿方式。你只需要在定义Web服务的时候再表示服务操作的方法上应用WebMethodAttribute特性就可以了,完全可以不需要手工进行相应的配置,因为Web服务运行时会自动为你添加默认的配置。但是对于WCF来说,在进行服务寄宿的时候,你必须以编程或者配置的方式为服务添加至少一个终结点,而终结点需要具备基本的ABC三要素。 对于最新版本的WCF编程人员来说,你也可以采用无配置的服务寄宿了,这主要得益于WCF提
蒋金楠
2018/02/07
8000
WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?
任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源。同理,一个WCF服务的监听与执行同样需要通过一个进程来承载。我们将为WCF服务创建或指定一个进程的方式称为服务寄宿(Service Hosting)。服务寄宿的本质通过某种方式,创建或者指定一个进程用以监听服务的请求和执行服务操作,为服务提供一个运行环境。 服务寄宿的方式大体分两种:一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿,所有的托管的应用程序均可作为WCF服务的宿主,比如C
蒋金楠
2018/01/16
1.1K0
快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式。记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winform时,使用过Remoting,再之后做B/S架构时,就会经常使用.NET平台下的Web Service,直到使用上WCF。看上去有了一些WCF的使用经验,实则不然,比如对安全、分布式事务、可靠会话等主题仍然接触甚少,因而决定重新回顾学习一下相关知识,尤其是对WCF框架的理解(已于2015年开源,可下载源码,h
用户1216676
2018/01/24
1.1K0
快速入门系列--WCF--01基础概念
菜菜从零学习WCF三(配置服务)
在设计和实现服务协定后,即可配置服务。在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到服务的地址、服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型。
aehyok
2018/09/11
8450
菜菜从零学习WCF三(配置服务)
我的WCF之旅(1):创建一个简单的WCF程序
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。对那些对WCF不是很了解的读者来说,这个例子将带领你正式进入WCF的世界。 在这个例子中,我们将实现一个简单的计算服务(CalculatorService),提供基本的加、减、乘、除的运算。和传统的分布式通信框架一样,WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用。在本例中,客户端和服务通过运行在相同的同一台机器上不同进程模拟,图1体现了客户端
蒋金楠
2018/02/07
9600
我的WCF之旅(1):创建一个简单的WCF程序
WCF系列教程之WCF服务配置工具
本文参考自http://www.cnblogs.com/wangweimutou/p/4367905.html Visual studio 针对服务配置提供了一个可视化的配置界面(Microsoft
郑小超.
2018/01/26
1K0
WCF简单教程(3) 试着去掉配置文件
通过配置文件来设置Host、Endpoint、Binding等是WCF中推荐的方法,这样可以使发布尽量灵活。其实配置文件中的值,最终还是要体现到代码中的,只不过这部分工作由底层帮你做了。我们今天来尝试去掉配置文件,用纯代码实现发布过程,同时加深一下对层次关系的理解。
py3study
2020/01/07
5160
WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序)
通过《如何将一个服务发布成WSDL[编程篇]》的介绍我们知道了如何可以通过编程或者配置的方式将ServiceMetadataBehavior这样一个服务形式应用到相应的服务上面,从而实现基于HTTP-GET或者WS-MEX的元数据发布机制。那么在WCF内部具体的实现原理又是怎样的呢?相信很多人对此都心存好奇,本篇文章的内容将围绕着这个主题展开。 一、 从WCF分发体系谈起 如果读者想对WCF内部的元数据发布机制的实现原理有一个全面而深入的了解,必须对WCF服务端的分发体系有一个清晰的认识。在这里我们先对
蒋金楠
2018/01/16
7990
WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序)
我的WCF之旅(2):Endpoint Overview
WCF实际上是构建了一个框架,这个框架实现了在互联系统中各个Application之间如何通信。使得Developers和Architect在构建分布式系统中,无需在考虑如何去实现通信相关的问题,更加关注与系统的业务逻辑本身。而在WCF Infrastructure中,各个Application之间的通信是由Endpoint来实现的。 Endpoint的结构 Endpoint包含以下4个对象: Address: Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF service
蒋金楠
2018/02/07
8680
我的WCF之旅(2):Endpoint Overview
WCF技术剖析之二十七: 如何将一个服务发布成WSDL[编程篇]
对于WCF服务端元数据架构体系来说,通过MetadataExporter将服务的终结点导出成MetadataSet(参考《如何导出WCF服务的元数据》),仅仅是完成了一半的工作。被成功导出的以MetadataSet对象表示的元数据需要最终作为可被访问的网络资源发布出来,才能被服务消费者获取,进而有效地帮助他们进行服务调用。元数据的发布最终是通过ServiceMetadataBehavior这样一个服务行为实现的,我们先来认识一下ServiceMetadataBehavior。 一、 元数据发布的实现者:S
蒋金楠
2018/01/16
7980
快速入门系列--WCF--08扩展与新特性
最后一章将进行WCF扩展和新特性的学习,这部分内容有一定深度,有一个基本的了解即可,当需要自定义一个完整的SOA框架时,可以再进行细致的学习和实践。 服务端架构体系的构建主要包含接下来的几个要素:服
用户1216676
2018/01/24
6500
快速入门系列--WCF--08扩展与新特性
关于WCF的一个非常“无语”的BUG!
这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。 创建自定义行为(服务行为、终结点行为、契约行为和操作行为)是对WCF进行扩展最为常用的形式。通过下面的代码,我们创建了一个自定义的服务行为,为了简单我们没有编写任何逻辑代码。 1: namespace Artech.Bu
蒋金楠
2018/01/16
4920
关于WCF的一个非常“无语”的BUG!
[WCF-Discovery] 实例演示:如何利用服务发现机制实现服务的“动态”调用?
前面两篇(《服务如何能被”发现”》和《客户端如何能够“探测”到可用的服务?》)我们分别介绍了可被发现服务如何被发布,以及客户端如果探测可用的服务。接下来我们通过一个简单的例子来演示如果创建和发布一个可被发现的服务,客户端如何在不知道服务终结点地址的情况下动态探测可用的服务并调用之。该实例的解决方案采用如右图所示的结构,即包含项目Service.Interface(类库)、Client(控制台应用)和Service(控制台应用)分别定义服务契约、服务(包括服务寄宿)和客户端程序。[源代码从这里下载,Dyn
蒋金楠
2018/02/07
6620
[WCF-Discovery] 实例演示:如何利用服务发现机制实现服务的“动态”调用?
WCF技术剖析_学习笔记之一
本系列适合新手,从0学起。共同学习,共同探讨。 基础概念 SOA:就是采用Web服务的架构 它有一些特性,需要了解: 1、自治的:不依赖于访问它的客户端和其他服务,可以独立的进行部署和实施版本策略和安全策略。 2、依赖于开放的标准:让不同的厂商开发的服务能够进行互操作。 3、支持跨平台 4、鼓励创建可组合的服务 5、鼓励服务的复用 6、强调松耦合:契约的实现 WCF应用实例,帮助理解WCF服务的基本结构 过程: 1、构建解决方案 Contracts:定义服务的契约(接口部分) Services:定义服务的实
小端
2018/04/16
5380
WCF技术剖析_学习笔记之一
创建一个自托管(Self-Host)的WCF Service
若确保上述self-host server能运行,需要用管理员权限开一个powershell,运行:
用户10555056
2023/05/25
4720
WCF浅尝
1.首先先建立一个WCF服务应用程序 2.再建立一个宿主程序,这里用控制台,添加服务引用,这里会报错: 点击页面确定,回到添加服务页面 点击箭头有如下内容: 这里告诉我们问题的所在,我们只要重新生成解
hbbliyong
2018/03/06
9340
WCF浅尝
WCF 学习总结2 -- 配置WCF
前面一篇文章《WCF 学习总结1 -- 简单实例》一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫。现在回过头来看看IDE提供的Wcf Service Library项目模板中的默认服务端配置文件——App.config里面究竟有什么秘密。 服务端的配置文件主要是对services、bindings、behaviors的配置。在默认的App.config中,使用的是WCF Framework定义好的wsHttpBinding默
hbbliyong
2018/03/05
1.1K0
WCF 学习总结2 -- 配置WCF
推荐阅读
相关推荐
WCF后续之旅(15): 逻辑地址和物理地址
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验