使用 ggplot2 创建一个指示线段长度的条形图

2023-12-07

我想用ggplot2绘制一些风速和风向数据。 所以我编码如下:

library(dplyr)
library(ggplot2)

data <- data.frame(
  long = 1:4,
  lat = 2,
  wd_x = cos(1:4),
  wd_y = sin(1:4),
  ws = 1:4
)

data %>%
  ggplot() +
  geom_segment(aes(x = long, y = lat,
                   xend = long + wd_x * ws / 5,
                   yend = lat + wd_y * ws / 5),
               arrow = arrow(length = unit(0.15, "cm")))

给出了以下情节:

enter image description here

.

现在我想指出,箭头的1个单位长度等于5m/s的风速,或者同样地,箭头的五分之一单位长度等于1m/s的风速。如何在此处创建指示风速(ws)的比例尺?


我了解您打算创建一个图例,显示代表主图中向量的长度/速度/速度的箭头。有一个非常相似的问题,但给定的答案(免责声明:我的答案)尚未被投票或接受,因此我对于是否将这个问题作为重复项关闭感到犹豫。

建议的解决方案是通过注释创建假图例。

注意:你对向量长度的计算在我看来是错误的。 (这也是为什么我的情节中图例中的箭头长度如此长的原因)。从您提供的数据中很难猜测您想要的向量长度,但是计算线段长度的公式是

xend = x + 速度 * cos(方向[角度] * pi / 180)

yend = y + 速度 * sin(方向[角度] * pi / 180)

其中 0 度指向右侧,这是更常见的约定,但可能并不总是如此。

library(tidyverse)

data <- data.frame(
  long = 1:4,
  lat = 2,
  wd_x = cos(1:4),
  wd_y = sin(1:4),
  ws = 1:4
)

## I prefer to prepare data outside of ggplot calls
df <- data %>%
  mutate(xend = long + wd_x * ws / 5,
         yend = lat + wd_y * ws / 5)

## defining x or y coordinates for your annotation can be daunting.
## First get x and y range 
ylims <- range(c(df$lat, df$yend))
xlims <- range(c(df$long, df$xend))
df_leg <-
  data.frame(
    ws = c(1, 5),
    y = ylims[1] - c(ylims[1]/1.6, ylims[1]/1.3),
    x = xlims[1]
  ) %>%
  ## for the label x coord
  mutate(xend = x + ws)

## your plot, just slightly modified
ggplot(df) +
  geom_segment(aes(x = long, y = lat,
                   xend = xend, yend = yend),
               arrow = arrow(length = unit(0.15, "cm"))) +
  geom_segment(
    data = df_leg,
    aes(
      x = x, y = y, xend = xend,
      yend = y
    ), 
    ## you need to experiment with the arrow head length, I'd pass a vector
    arrow = arrow(length = unit(3:4, "pt")), show.legend = FALSE
  ) +
  geom_text(
    data = df_leg, aes(x = xend, y = y, label = paste(ws, "m/s")),
    hjust = -.1
  ) +
  coord_fixed(ratio = 1, xlim = xlims, ylim = ylims, clip = "off") +
  theme(legend.position = "none", 
        plot.margin = margin(r = 2.6, unit = "in"))

Created on 2023-03-23 with reprex v2.0.2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ggplot2 创建一个指示线段长度的条形图 的相关文章

  • 在 R 中组合/合并列

    我可能在这个问题上遗漏了一些很容易的东西 我在任何地方都找不到正确的答案 我真的需要继续前进 所以我过度简化了我的数据 eventID lt c 2 4 Time lt c 09 32 09 43 df1 lt data frame eve
  • R 绘制一些 unicode 字符,但不绘制其他字符

    我们的系统管理员刚刚将我们的操作系统升级到 SLES12SP1 我重新安装了 Rv3 2 3 并尝试绘图 我用cairo pdf并尝试绘制 x 标签为的图 u0298即太阳能符号 但它不起作用 标签只是空白 例如 cairo pdf Rpl
  • R ggplot结合颜色图例和不同因子长度的填充

    我正在使用不完整因子设计的数据绘制图表 由于设计的原因 我的颜色手动比例和填充手动比例的长度不同 因此 我得到了两个传说 我怎样才能删除其中之一或者更好地将它们组合起来 我看过这些问题 合并单独的大小并填充 ggplot 中的图例 http
  • 使用 R 并行处理 XML 节点

    我正在尝试与 R 并行处理 XML 文档xml2包装和foreach功能 但我收到 node attrs x node nsMap ns 中的错误 外部指针无效 尝试导出树集群导出 示例代码 library xml2 library for
  • 如何使用 ggplot2 在轴标签中使用上标

    如何在x轴上打印埃平方 我尝试如下 labs x x axis 2 y y axis 我们可以用bquote library ggplot2 ggplot mtcars aes hp mpg geom point labs x bquote
  • 我想将两个变量合并为一个具有日期格式的变量

    我有一个包含几个月的字符列的数据集 MONTH 和指示年份的数字列 YEAR 为了将其用作面板数据 我需要将这些结合起来YEAR and MONTH转换为日期格式的变量 我尝试过改变变量MONTH转换为数字格式 然后合并MONTH与柱YEA
  • 在 R 中调用“boot”时没有数据

    我有一个包含很多列的数据框 第一列包含 系统 1 系统 2 等类别 第二列包含代表 0 和 1 的数字 请看下面 例如 SYSTEM Q1 Q2 S1 0 1 S1 1 0 S2 1 1 S2 0 0 S2 1 1 我在 R 中有这段代码来
  • 在ggplot2中设置base_size时重叠轴标签

    我正在改变base size via theme set 当我在屏幕上查看结果图时 它看起来很棒 但是 当我将其另存为 pdf 时 x 轴标签有点太接近轴编号 一件小事 theme set theme bw base size 9 不会造成
  • 使用 R 中的剪切函数对缺失值进行 NA 级别[重复]

    这个问题在这里已经有答案了 R 中的 cut 函数省略了 NA 但我想要一个缺失值的级别 这是我的 MWE set seed 12345 Y lt c rnorm n 50 mean 500 sd 1 NA Y1 lt cut log Y
  • 如何使 quarto html 文档使用全屏宽度?

    我正在使用 R 创建一个四开 html 文档并将其发布到 rpubs com 上的网络上 该文档仅使用窗口的中间三分之一 而将左侧和右侧的三分之一留为空白 我怎样才能告诉四开使用整个窗口 这是一个非常简单的可重现示例 由于某种原因 它确实使
  • 如何在其他脚本中包含(源)R 脚本

    我创建了一个实用程序 R 脚本 util R 我想从项目中的其他脚本中使用它 确保此脚本定义的函数可在我的其他脚本中运行的正确方法是什么 我正在寻找类似的东西require函数 仅在尚未加载的情况下加载包 我不想打电话source util
  • R data.table如何创建重复项[重复]

    这个问题在这里已经有答案了 I have dataDT lt data table A 1 3 B 1 3 dataDT A B 1 1 1 2 2 2 3 3 3 I want dataDT lt data table A c 1 3 1
  • 在 data.table 1.9.4 或更早版本上,按字符串键 `order(-x,v)` 对 data.table 中的行进行降序排序会出现错误

    假设我有以下内容data table in R library data table DT data table x rep c b a c each 3 y c 1 3 6 v 1 9 我想按两列排序 例如列x and v 我用过这个 D
  • 如何从 R 中的列表列表中提取元素?

    我有一堆列表 其中包含列表 广义线性模型输出 我想编写一个函数 该函数将从每个列表中提取多个元素 然后将结果组合到数据框中 我想提取modelset 1 likelihood modelset 1 fixef modelset 2 like
  • 使用清单修改 Latex 文档中 R 代码的字体颜色

    我试图在 Latex 文档中突出显示 R 代码 但我似乎无法更改代码框中的字体颜色 举个例子 我认为commentstyle color red 应该给我红色字体的评论 但评论显示为蓝色或黑色 不太清楚 另外 我认为backgroundco
  • R - 数据框列中唯一值的数量

    对于数据框df 我需要找到的唯一值some col 尝试了以下方法 length unique df some col 但这并没有给出预期的结果 然而length unique some vector 对向量进行处理并给出预期结果 创建 d
  • 从数据框中提取具有最高值和最低值的行

    我对 R 还很陌生 我主要用它来可视化统计数据ggplot2图书馆 现在我遇到了数据准备的问题 我需要编写一个函数 该函数将从数据框中删除指定列中具有最高和最低值的一些数字 2 5 或 10 行 并将它们放入另一个数据框中 并对两个因素的每
  • Stata的xtnbreg有R函数吗?

    一直在使用 Stata 在复制中运行负二项式回归 不确定 Stata 是如何做到这一点的 但想知道是否有 R 函数 包可以做同样的事情 R 会让我更好地了解它是如何工作的 因为我可以看到代码 看看glm nb函数在MASS包裹 如果您对 幕
  • tmap 仅在 sf 几何列中绘制第一个多边形

    tmap 仅绘制 sf 几何列中的第一个多边形 但是plot 得到他们全部 一些 github 问题tmap https github com mtennekes tmap issues 360 and leaflet https gith
  • 如何引用基于 data.frame 中的变量的列表?

    我有一张简单的桌子emp id and job code 我想返回正确的payout基于job code 我已经用嵌套的 ifelse 来解决这个问题 但是如果我有更多怎么办job code s library dplyr set seed

随机推荐