我正在尝试为多个因子的2组创建一个箱线图以及观察数量的标签.当一个因子级别没有观察到一个组时,具有观察值的组的框占用两个空间并且看起来很奇怪.
最小的例子:
library(tidyverse)
mtcars %>%
select(mpg, cyl,am) %>%
filter(!(cyl == 8 & am == 0)) %>%
ggplot(aes(factor(cyl),mpg,fill=factor(am))) +
stat_boxplot(geom = "errorbar") + ## Draw horizontal lines across ends of whiskers
geom_boxplot(outlier.shape=1, outlier.size=3,
position = position_dodge(width = 0.75)) +
geom_text(data = mtcars %>%
select(mpg, cyl, am) %>%
filter(!(cyl == 8 & am == 0)) %>%
group_by(cyl, am) %>%
summarize(Count = n(),
q3 = quantile(mpg, 0.75),
iqr = IQR(mpg),
lab_pos = max(ifelse(mpg < q3+1.5*iqr, mpg, NA), na.rm = TRUE)),
aes(x= factor(cyl), y …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个用于发布的图表,而我所在领域的绘图惯例对于此信息(绘制听力图)来说是非标准的。
一些示例数据:
subsetAudio <-
structure(list(Subject = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L), Frequency = c(250, 250, 250, 500, 500, 500, 750,
750, 750, 1000, 1000, 1000, …Run Code Online (Sandbox Code Playgroud) 我正在处理一些时频分解的 EEG 数据,并希望使用 ggplot2 生成类似频谱图的图形。但是,我最终在每个时间点之间都有空白。
Data <- read.csv(url("https://www.dropbox.com/s/al3cygigm86mr3s/Test_Spec_Data.csv?dl=0"))
Run Code Online (Sandbox Code Playgroud)
如果我创建一个 vanilla geom_raster,我会在 x 和 y 数据中得到间隙:
ggplot(Data,aes(Times,Frequency)) +
geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)
如果我做Frequency一个因子,它会填补 y 的空白;但是,沿 x 轴的间隙仍然存在:
ggplot(Data,aes(Times,factor(round(Frequency,digits=1)))) +
geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)
我可以通过制作Times一个因子来消除差距。
但是,管理scale_x_discrete这么多数据点很麻烦(注意 x 轴标签)。此外,这些时间数据是连续的,并不是真正的因子。
geom_raster没有width类似的论点geom_bar,我在geom_raster文档中看不到任何类似的内容。
有没有办法保持Times连续但消除观察之间的差距?
我正在使用大型数据框而不是将操作写入内存,我一直在努力做与管道一样多的操作.在尝试在中间步骤中检查我的因子水平时,我遇到了使用该levels功能的问题,并想知道是否有人可能知道问题是什么.
一个例子:
library(dplyr)
Data <- data.frame(x = rep(LETTERS[1:5],3),
y = sample(1:10,length(x), replace=T))
Run Code Online (Sandbox Code Playgroud)
通常的方式有效:
levels(Data$x)
[1] "A" "B" "C" "D" "E"
Run Code Online (Sandbox Code Playgroud)
它主要用于我使用sapply:
Data %>% select(x) %>% sapply(levels)
x
[1,] "A"
[2,] "B"
[3,] "C"
[4,] "D"
[5,] "E"
Run Code Online (Sandbox Code Playgroud)
但管道不起作用并返回NULL:
Data %>% select(x) %>% levels()
NULL
Run Code Online (Sandbox Code Playgroud)
为什么要Data %>% select(x) %>% levels()回来NULL?
有没有办法使用管道数据的水平?