Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在geom_point中使用条形图( ggplot2 )创建条形图

在geom_point中使用条形图( ggplot2 )创建条形图
EN

Stack Overflow用户
提问于 2019-01-25 18:36:24
回答 1查看 247关注 0票数 1

我正在尝试创建一个条形图,除非在这些条形图中,条形图被相互叠加在一起的圆圈所取代。我有以下的公司价值数据集:

代码语言:javascript
运行
AI代码解释
复制
> dput(my.data)
structure(list(name = c("JUU", "Lyf", "Inf", "Coi", "Tan", "Rob", 
"Out", "Zen", "Com", "Pel", "Con", "Soc", "Ind", "Cro", "GRA", 
"Osc", "Zoo", "Kat", "Pro", "Nia", "Uni", "23a", "Ope", "Upt", 
"Qua", "Aff", "App", "Ava", "Gus", "Zoc", "Apt", "Spr", "red", 
"War", "Car", "Buz", "Quo", "Squ", "Afi", "Jet", "C3 ", "Hea", 
"Hum", "Nex", "STX", "Roc", "Avi", "Off", "Gin", "App", "Doc", 
"Rub", "Thu", "Zet", "Med", "Rub", "Clo", "Mar", "Kab", "Dra", 
"Vox", "Des", "Ada", "Age", "Ken", "SMS", "Sup", "Sym", "Zoo", 
"Par"), value = c(38, 15, 10, 8.05, 6.7, 5.6, 5.51, 4.5, 4.4, 
4.15, 4, 4, 3.45, 3.35, 3.2, 3.2, 3.2, 3, 3, 2.7, 2.6, 2.5, 2.47, 
2.3, 2.27, 2, 2, 2, 2, 2, 1.86, 1.81, 1.8, 1.75, 1.74, 1.7, 1.7, 
1.7, 1.6, 1.6, 1.51, 1.5, 1.5, 1.5, 1.5, 1.41, 1.4, 1.39, 1.38, 
1.35, 1.32, 1.3, 1.3, 1.3, 1.25, 1.23, 1.2, 1.2, 1.18, 1.07, 
1.07, 1.02, 1, 1, 1, 1, 1, 1, 1, 0.08), year = c(2017, 2015, 
2016, 2017, 2015, 2017, 2017, 2015, 2016, 2017, 2015, 2015, 2017, 
2017, 2017, 2015, 2016, 2017, 2016, 2017, 2016, 2015, 2016, 2015, 
2016, 2017, 2017, 2015, 2015, 2015, 2015, 2015, 2017, 2015, 2017, 
2015, 2017, 2017, 2017, 2016, 2017, 2017, 2016, 2015, 2016, 2017, 
2017, 2016, 2017, 2015, 2015, 2017, 2015, 2015, 2015, 2017, 2017, 
2015, 2015, 2015, 2015, 2017, 2015, 2016, 2016, 2016, 2017, 2017, 
2017, 2017)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-70L))

> head(my.data, 10)
# A tibble: 10 x 3
   name  value  year
   <chr> <dbl> <dbl>
 1 JUU   38     2017
 2 Lyf   15     2015
 3 Inf   10     2016
 4 Coi    8.05  2017
 5 Tan    6.7   2015
 6 Rob    5.6   2017
 7 Out    5.51  2017
 8 Zen    4.5   2015
 9 Com    4.4   2016
10 Pel    4.15  2017

这张图表应该有3个条形图,2015年、2016年和2017年每年都有一个。每个棒子由不同大小的圆圈组成,底部是最大的圆圈,顶部是最小的圆。使用value列,计算这些圆圈的y值cumValues

代码语言:javascript
运行
AI代码解释
复制
my.data <- my.data %>% 
  dplyr::arrange(desc(value)) %>% 
  dplyr::group_by(year) %>%
  # dplyr::mutate(cumValues = cumsum(valueEoy2018 ^ 0.5)) %>%
  dplyr::mutate(cumValues = cumsum(value)) %>%
  dplyr::ungroup()

> head(my.data %>% dplyr::filter(year == 2017))
# A tibble: 6 x 4
  name  value  year cumValues
  <chr> <dbl> <dbl>     <dbl>
1 JUU   38     2017      38  
2 Coi    8.05  2017      46.0
3 Rob    5.6   2017      51.6
4 Out    5.51  2017      57.2
5 Pel    4.15  2017      61.3
6 Ind    3.45  2017      64.8

..。最后,我创建了散点图:

代码语言:javascript
运行
AI代码解释
复制
  minValue = min(my.data$value)
  maxValue = max(my.data$value)
  valueRange = c(minValue, maxValue)
  my.data %>%
    ggplot() +
    geom_point(aes(x = year, y = cumValues, size = value),
               alpha = 0.95, pch = 21, fill = colorGold, color = 'black') +
    geom_text(aes(x = year, y = cumValues, label = ifelse(value > 5, name, '')),
              size = 3, fontface = 'bold', hjust = 0.4, vjust = 1.) +
    scale_size_continuous(range = valueRange) 

...and收到以下消息:

这是关闭我想要的,但是我正在为2种问候而挣扎。First,最重要的是--圆圈重叠太多了。我要一个圆圈的底部去触摸它下面的圆顶。或者只是有点重叠。但没有目前的图表那么多。

在计算cumValues时,我尝试过使用不同的函数,我也尝试过使用ggplots scale_size_continuous函数,但都没有效果。我也尝试过使用scale_radius,但也没有成功。

任何帮助这将是非常感谢,因为我认为这是一个酷类型的图形,我正在努力构建。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-25 21:03:01

这里有一种使用ggforce::geom_circle来精确控制圆圈放置的方法。我遇到的挑战是,原始数据的数值高度为100+,但数值宽度仅为2(2015年至2017年),但ggforce::geom_circle创建了一个与坐标成比例的圆圈。所以,如果我们把x和y保持不变,你就会得到一个非常高很窄的图表,否则你就会得到非常拥挤的圆圈。我的方法是从一开始就缩放值。(我使用它们的平方根,以便将值缩放到区域,而不是半径。)

我不确定最后的图表中是否会使用y值。如果您可以删除它们,那么这就足够了,但是如果您需要它们,那么您可以手动更改y断点上的标签,或者使用标签器让它们以原来的比例尺显示。

代码语言:javascript
运行
AI代码解释
复制
my.data <- my.data %>% 
  dplyr::arrange(desc(value)) %>% 
  dplyr::group_by(year) %>%
  dplyr::mutate(value_sqrt = sqrt(value/100),
                cum_value_sqrt = cumsum(value_sqrt),
                height = cum_value_sqrt - value_sqrt/2) %>%
  dplyr::ungroup()

my.data %>%
  ggplot() +
  ggforce::geom_circle(aes(x0 = year, 
                           y0 = height, 
                           r = value_sqrt/2),
             alpha = 0.95, fill = "gold", color = 'black') +
  geom_text(aes(x = year, y = height, label = ifelse(value > 5, name, '')),
            size = 3, fontface = 'bold', hjust = 0.4, vjust = 1) +
  scale_x_continuous(breaks = 2015:2017, minor_breaks = F) +
  coord_equal(ratio = 1)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54375220

复制
相关文章
移动开发-媒体查询布局
每种媒体类型都有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格,暂且了解三个,注意他们要加小括号包含
小城故事
2022/11/21
1.3K0
CMT:当CNN遇到Transformer,“迷途知返”
由于其所具有的长距离依赖建模能力,Vision Transformers已被成功应用到图像识别任务中。然而,其性能与计算量距离优秀的CNN仍存在差距。
AIWalker
2021/07/29
1.2K0
CMT:当CNN遇到Transformer,“迷途知返”
当大模型不是问题时,如何应对 LLM 的工程化落地挑战?
几个月前,在 Thoughtworks 的内部 AIGC 研讨会里,我们一直达成了一系列一致观点,诸如于:如果没有 “开源模型” 降低企业应用 LLM 的成本,那么 LLM 会很快消亡。所以,我们相信开源 LLM + LoRA 微调会成为企业的一种主流方式。现今,我们可以看到 LLaMA 2、Code LLaMA 2 等模型在不断刷新这种可能性。
Phodal
2023/09/10
2.2K1
当大模型不是问题时,如何应对 LLM 的工程化落地挑战?
当AI泡沫破裂时……
很显然我们目前处于一个不稳定的状态。这到底是一场泡沫还是一次革命?答案是当然包含一点革命——深度神经架构所创造的实实在在的成功已经颠覆了视觉和语音识别领域,更通用的机器学习也已经有了大量真实世界用例。
刀刀老高
2018/07/24
3620
当AI泡沫破裂时……
很显然我们目前处于一个不稳定的状态。这到底是一场泡沫还是一次革命?答案是当然包含一点革命——深度神经架构所创造的实实在在的成功已经颠覆了视觉和语音识别领域,更通用的机器学习也已经有了大量真实世界用例。
机器之心
2018/07/26
3800
windows根据jps查询java进程然后关闭脚本
下面的脚本可以通过jps查询到具体进程,然后关闭该进程,最后一行脚本是重启该应用,下面一段脚本可以用于windows上重新发包功能
johnhuster的分享
2022/03/29
1K0
shell sort排序是从小到大_shell sort
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169879.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
1.4K0
shell sort排序是从小到大_shell sort
html --- rem 媒体查询
手机屏幕的分辨率越来越高,比如iPhone 5为640*1136 px、iPhone 6/6S为750*1334 px。我拿到的UI图,其参考分辨率为1440*2560 px。
小蔚
2019/09/11
1.5K0
响应式设计
给所有用户提供同一份 HTML 和 CSS。通过使用几个关键技术,根据用户浏览器视口的大小(或者屏幕分辨率)让内容有不一样的渲染结果。这种方式不需要分别维护两个网站。只需要创建一个网站,就可以在智能手机、平板,或者其他任何设备上运行。网页设计师 Ethan Marcotte 称这种方式为响应式设计(responsive design)。
Cellinlab
2023/05/17
2.2K0
CSS 媒体查询适配
media在引入css时可以加media属性来设置在特定媒体下的样式,但是要注意将其写在所有样式的最下方
圆圆的冬瓜
2022/06/17
1.4K0
【提问帖】GO中调用redis时,当并发量比较大时出现的问题。
GO中调用redis时,实始化一个连接池,做法也是一般的用户: &redis.Pool{ MaxIdle: beego.AppConfig.DefaultInt("redis::maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis::maxactive", 10), IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_tim
李海彬
2018/03/27
2.2K0
CSS-媒体查询
由于媒体查询需要根据不同的浏览器宽度调整元素的样式, 所以不适合用于比较复杂的网页
程序员 NEO
2023/09/29
2270
CSS-媒体查询
前端响应式布局为什么是个坑?
响应式设计:Responseive design,就是一个网站,一套代码能在所有终端能够正常展示,并不是为每个终端做一个特定版本,响应式是为解决移动互联网浏览器而诞生的。
呆呆
2021/10/01
1.8K0
当安装、卸载件包时,出现依赖问题 error: Failed dependencies
依赖关系非常复杂,当你试图先安装任何一个包时都会出现这样的依赖关系错误,这时候你就应该强制安装了,我认为只要你把服务或软件需要的包都装上,强制安装也不会出问题的,不会有什么影响。
yaohong
2019/09/11
1.4K0
前端响应式布局为什么是个坑?
响应式设计:Responseive design,就是一个网站,一套代码能在所有终端能够正常展示,并不是为每个终端做一个特定版本,响应式是为解决移动互联网浏览器而诞生的。
呆呆
2021/11/30
9820
前端响应式布局为什么是个坑?
响应式设计:Responseive design,就是一个网站,一套代码能在所有终端能够正常展示,并不是为每个终端做一个特定版本,响应式是为解决移动互联网浏览器而诞生的。
呆呆
2021/09/30
9460
用PHP实现冒泡排序(从小到大)
改进代码: 添加一个布尔变量 $exchange, 以监视每($i+1)次冒泡排序是否发生过相邻元素交换的情况。如果有($exchange为true),则需继续进行下一次冒泡排序。如果没有发生过相邻元素交换的情况,则说明排序任务已经完成,无需进行下一次冒泡排序。这时,使用 break,立刻跳出 $i 循环体。
用户7108768
2021/09/23
5180
这个问题你应该很熟悉,然后懵逼,然后放弃
今天早晨决定写这篇博文,但是晚上回家的时候,突然一道闪电从脑海劈过,于是临时决定将这个熟悉然后到懵逼最后到放弃的问题分为两部分。第一部分为抛出问题,诚邀各路英雄豪杰解答;第二部分为解答,就是一周之后会给出我的答案。
IMWeb前端团队
2019/12/04
2810
这个问题你应该很熟悉,然后懵逼,然后放弃
点击加载更多

相似问题

将面板回归常数和残差保存在变量中

111

循环回归并将残差保存在列中

110

线性回归残差散点图

123

R循环残差回归

34

matlab优化选项将残差保存在变量中

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档