获取绘图区域ggplot2的笛卡尔坐标

伊琳娜(Irina Aleksashova)

我想将标签放置在图例附近。

在下面的代码中,我使用了硬编码的(x,y)geom_label来获取当前数据帧的所需结果:

#  Creating dataframe
library(ggplot2)
values <- c(rep(0,2), rep(2,3), rep(3,3), rep(4,3), 5, rep(6,2), 8, 9, rep(11,2) )
obs_number <- c(rep(18,18))
value_1 <- c(rep(4,18))
value_2 <- c(rep(7,18))
value_3 <- c(rep(3,18))
  
data_to_plot <- data.frame(values, obs_number, value_1, value_2, value_3)
#  Calculate max frequency value for using in `geom_label`

frequency_count <- data_to_plot %>% group_by(values) %>% count()%>% arrange(n)
max_frequency <- max(frequency_count$n)

# Plot
ggplot(data_to_plot, aes(x = values)) +
  geom_histogram(aes(y = ..count..), binwidth = 1, colour= "black", fill = "white") +
  geom_density(aes(y=..count..), fill="blue", alpha = .25)+
  
  
  geom_vline(aes(xintercept = value_1),
             color="red", linetype = "dashed", size = 0.5, alpha = 1) +
  
  geom_vline(aes(xintercept = value_1),
             color="forestgreen", linetype="dashed", size = 0.5, alpha = 1) +
  
  
  geom_vline(aes(xintercept = value_3),
             color="purple", linetype = "dashed", size = 0.5, alpha = 1) +
  
  
  geom_label(aes(label = obs_number, y = max_frequency*0.87, x = (max(values) - 2.2), color = 'blue'), size = 3.5, alpha = 1) +
  geom_label(aes(label = value_1, y = max_frequency * 0.83, x = (max(values) - 2.2 ), color = 'forestgreen'), size = 3.5, alpha = 1) +
  geom_label(aes(label = value_2, y = max_frequency * 0.79, x = (max(values) - 2.2) , color = 'purple'), size = 3.5, alpha = 1) +
  geom_label(aes(label = value_3, y = max_frequency * 0.75, x = (max(values) - 2.2) , color = 'red'), size = 3.5, alpha = 1) +
  
  
  scale_color_manual(name="Values", 
                     labels = c("Observations number",
                                "value_1",
                                "value_2",
                                "value_3"
                     ), 
                     
                     values = c( "blue",
                                 "forestgreen",
                                 "purple",
                                 "red")) +
  
  labs(title = "relevant_title", y = "Distribution fors DLT values", x = "DLT for the route: average values per batch") +
  theme(plot.title = element_text(hjust = 0.5), 
        axis.title.x = element_text(colour = "darkblue"),
        axis.text.x = element_text(face="plain", color="black", 
                                   size=10, angle=0),
        axis.title.y = element_text(colour = "darkblue"),
        axis.text.y = element_text(face="plain", color="black", 
                                   size=10, angle=0),
        legend.position = c(.90, .80)
  )+
  
  
  labs(title="DLT values", y = "frequency", x = "days")+
  scale_x_continuous(breaks = seq(0, max(data_to_plot$values), 1))

这是理想的结果: 所需结果

但这不适用于所有数据集。 绘制前14个值:标签不位于图例附近

题:

如何获得绘图区域的笛卡尔坐标,因此我将替换max_frequencymax(values)geom_label其中插入标签并使其与图例对齐legend.position = c(.90, .80)

也欢迎其他选择。

特朗布兰德

在“也欢迎使用替代字词”的旗帜下:为什么不对geom_vline()s使用文本字形并覆盖实际标签?

为了自己的理解,我对代码进行了一些重新排列,但这是一个示例:

library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
#> Warning: package 'tidyr' was built under R version 4.0.3
#> Warning: package 'readr' was built under R version 4.0.3
#> Warning: package 'dplyr' was built under R version 4.0.3
values <- c(rep(0,2), rep(2,3), rep(3,3), rep(4,3), 5, rep(6,2), 8, 9, rep(11,2) )
obs_number <- c(rep(18,18))
value_1 <- c(rep(4,18))
value_2 <- c(rep(7,18))
value_3 <- c(rep(3,18))

data_to_plot <- data.frame(values, obs_number, value_1, value_2, value_3)

# Extra dataframe for storing the xintercepts and labels
vals <- data.frame(xintercept = c(18, 4, 7, 3),
                   label = c("Observations number", "value_1", "value_2", "value_3"))


frequency_count <- data_to_plot %>% group_by(values) %>% count()%>% arrange(n)
max_frequency <- max(frequency_count$n)

ggplot(data_to_plot, aes(x = values)) +
  geom_histogram(aes(y = ..count..), 
                 binwidth = 1, colour= "black", fill = "white") +
  geom_density(aes(y=..count..), 
               fill="blue", alpha = .25)+
  geom_vline(aes(xintercept = xintercept, color = label),
             data = vals[2:nrow(vals), ], 
             linetype = "dashed", size = 0.5, alpha = 1,
             # Give different legend glyph for vlines
             key_glyph = draw_key_text) +
  scale_color_manual(
    name= "Values", 
    limits = vals$label,
    values = c("blue", "forestgreen", "purple", "red"),
    # Override the labels and set size to something sensible
    guide = guide_legend(override.aes = list(label = vals$xintercept, 
                                             size = 3.88))
  ) +
  labs(title = "relevant_title", y = "Distribution fors DLT values", 
       x = "DLT for the route: average values per batch") +
  theme(plot.title = element_text(hjust = 0.5), 
        axis.title.x = element_text(colour = "darkblue"),
        axis.text.x = element_text(face="plain", color="black", 
                                   size=10, angle=0),
        axis.title.y = element_text(colour = "darkblue"),
        axis.text.y = element_text(face="plain", color="black", 
                                   size=10, angle=0),
        legend.position = c(.90, .80)
  )+
  labs(title="DLT values", y = "frequency", x = "days")+
  scale_x_continuous(breaks = seq(0, max(data_to_plot$values), 1))

reprex软件包(v0.3.0)创建于2021-01-08

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

2数组的笛卡尔积

来自分类Dev

从ggplot2绘图生成栅格

来自分类Dev

旋转ggplot2绘图对象

来自分类Dev

如何删除ggplot2中绘图区域和面板之间的边距?

来自分类Dev

将彩色箭头添加到ggplot2的轴(部分在绘图区域之外)

来自分类Dev

C程序,从旋转角度获取笛卡尔坐标

来自分类Dev

获取笛卡尔积?

来自分类Dev

将图像从笛卡尔坐标转换为极坐标

来自分类Dev

绘图区域外部的ggplot2注解_ticks

来自分类Dev

如何从极坐标中补偿笛卡尔坐标中的误差

来自分类Dev

ggplot2在绘图区域外添加较小的刻度线,而无需关闭剪辑

来自分类Dev

天文RA和DEC到笛卡尔坐标,然后在2D图像FOV中绘图

来自分类Dev

为什么我的2个Livecharts笛卡尔坐标实例不起作用?

来自分类Dev

绘图中的不同区域如何具有不同的ggplot2背景

来自分类Dev

ggplot2绘图区域内的两个轴标签

来自分类Dev

C程序,从旋转角度获取笛卡尔坐标

来自分类Dev

如何使用ggplot2在同一绘图区域内绘制绘图的缩放比例?

来自分类Dev

笛卡尔坐标系中的JavaScript / JSF2数据(矩形)可视化

来自分类Dev

枫树,从极坐标转换为笛卡尔坐标?

来自分类Dev

笛卡尔坐标中的饼图

来自分类Dev

如何从列表中获取笛卡尔积

来自分类Dev

简单的笛卡尔坐标计算器

来自分类Dev

获取笛卡尔积的算法

来自分类Dev

MatOfPoint笛卡尔坐标

来自分类Dev

将笛卡尔坐标转换为极坐标-Matlab

来自分类Dev

计算笛卡尔或极坐标系中2个位置之间的角度

来自分类Dev

opengl,从笛卡尔坐标转换球坐标

来自分类Dev

Oracle - 过滤笛卡尔坐标

来自分类Dev

获取 LINQ 笛卡尔积的单个项目

Related 相关文章

热门标签

归档