首页 > 解决方案 > 图上的 R Windrose 百分比标签

问题描述

我正在使用此处发布的 windrose 功能:带 ggplot (R) 的 Windrose?

我需要将图中的百分比显示在各行(而不是左侧)上,但到目前为止我还没有弄清楚如何。(目标描述见下图)

这是制作该图的代码:

  p.windrose <- ggplot(data = data,
                   aes(x = dir.binned,y = (..count..)/sum(..count..),
                       fill = spd.binned)) +
                        geom_bar()+
scale_y_continuous(breaks = ybreaks.prct,labels=percent)+
ylab("")+
scale_x_discrete(drop = FALSE,
                 labels = waiver()) +
xlab("")+
coord_polar(start = -((dirres/2)/360) * 2*pi) +
scale_fill_manual(name = "Wind Speed (m/s)", 
                  values = spd.colors,
                  drop = FALSE)+
theme_bw(base_size = 12, base_family = "Helvetica")

我用我正在尝试做的事情标记了我到目前为止的数字!如果标签自动选择该方向上风最小的位置,或者它有一个放置标签以便可以更改它,那就太好了。 在此处输入图像描述

我尝试使用 geom_text,但我收到一条错误消息,提示“美学必须是有效的数据列”。

谢谢你的帮助!

标签: rggplot2

解决方案


@teunbrand 的回答让我非常接近!我想添加我用来让一切正常的代码,以防将来有人遇到类似问题。

# Create the labels:
  x_location <- pi # x location of the labels

# Get the percentage
  T_data <- data %>%
    dplyr::group_by(dir.binned) %>%
    dplyr::summarise(count= n()) %>%
    dplyr::mutate(y = count/sum(count))

  labels <- data.frame(x = x_location,
                       y = scales::extended_breaks()(range(T_data$y)))
  # Create figure
  p.windrose <- ggplot() +
    geom_bar(data = data,
             aes(x = dir.binned, y = (..count..)/sum(..count..),
                 fill = spd.binned))+
    geom_text(data = labels,
              aes(x=x, y=y, label = scales::percent(y, 1))) +
    scale_y_continuous(breaks = waiver(),labels=NULL)+
    scale_x_discrete(drop = FALSE,
                     labels = waiver()) +
    ylab("")+xlab("")+
    coord_polar(start = -((dirres/2)/360) * 2*pi) +
    scale_fill_manual(name = "Wind Speed (m/s)", 
                      values = spd.colors,
                      drop = FALSE)+
    theme_bw(base_size = 12, base_family = "Helvetica") +
    theme(axis.ticks.y = element_blank(), # Disables default y-axis
          axis.text.y = element_blank())

在此处输入图像描述


推荐阅读