标签: ggridges

与ggtree ggjoy facet

是否可以将一个joyplot作为面板添加到包含ggtree的图中,如这些示例所示?这里有joyplots的例子.

我意识到我可以按照与树尖标签相同的顺序手动设置joyplot的物种标签,但我正在寻找一种自动解决方案.我想自动将joyplot行与树的提示相关联,类似于boxplot数据与tip标签的关联方式.

我认为Yuchuang Yu在上面链接的例子提供了合适的数据:

require(ggtree)
require(ggstance)

# generate tree
tr <- rtree(30)

# create simple ggtree object with tip labels
p <- ggtree(tr) + geom_tiplab(offset = 0.02)

# Generate categorical data for each "species"
d1 <- data.frame(id=tr$tip.label, location=sample(c("GZ", "HK", "CZ"), 30, replace=TRUE))

#Plot the categorical data as colored points on the tree tips
p1 <- p %<+% d1 + geom_tippoint(aes(color=location))

# Generate distribution of points for each species
d4 = data.frame(id=rep(tr$tip.label, each=20), 
            val=as.vector(sapply(1:30, function(i) 
                            rnorm(20, mean=i))) …
Run Code Online (Sandbox Code Playgroud)

r data-visualization ggplot2 ggtree ggridges

12
推荐指数
1
解决办法
2393
查看次数

geom_density_ridges 需要以下缺失的美学:y

无论我尝试什么,我都无法使用ggridges. 使用graphing_dataframe如下所示的数据框:

str(graphing_dataframe)
summary(graphing_dataframe)

> str(graphing_dataframe)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   14 obs. of  3 variables:
 $ id    : chr  "00343" "00343" "00343" "00343" ...
 $ week  : num  14 1 2 3 4 5 6 7 8 9 ...
 $ rating: num  14 4 12 8 14 19 16 16 7 8 ...
 - attr(*, "spec")=
  .. cols(
  ..   id = col_character(),
  ..   week = col_double(),
  ..   rating = col_double()
  .. )
> summary(graphing_dataframe)
      id …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggridges ridgeline-plot

12
推荐指数
4
解决办法
1万
查看次数

R ggrides 包绘制平均线(非中间)

我想在我的骑行图中画一条线来表示平均值。内置的分位数参数以我想要的样式画一条线,但在中位数. 我怎样才能平均绘制一个,最好不使用geom_vline()ggplot 构建对象的 pluck但留在 ggridges 生态中?

library(tidyverse)
library(ggridges)

#adding a column for the mean of each Species of the iris dataframe
iris_meaned <- iris %>%
  group_by(Species) %>% 
  mutate(mean_petal_len = mean(Petal.Length)) %>% 
  ungroup()


iris_meaned %>% 
  ggplot() +
  geom_density_ridges(
    aes(x = Petal.Length, y = Species, fill = Species), 
    quantile_lines = T, quantiles = 2 #adding lines for the median
  ) +
  geom_text(
    aes(x = mean_petal_len, y = Species, label = round(mean_petal_len, 2)),
    size = 2, nudge_x …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 tidyverse ggridges

12
推荐指数
1
解决办法
520
查看次数

为什么ggplot不允许抑制其geoms生成的消息?

包中的geom_density_ridgesgeom ggridges创建了脊线,如果没有指定带宽,它会尝试找到合理的值.然后使用baseR message函数报告该值(请参阅https://twitter.com/ClausWilke/status/921363157553172480).

base一个R函数suppressMessages功能被设计为抑制这样的消息.例如,此代码输出一条消息:

message('This is a message');
Run Code Online (Sandbox Code Playgroud)

这段代码什么都没输出:

suppressMessages(message('This is a message'));
Run Code Online (Sandbox Code Playgroud)

但是,出于某种原因,当将这个geom添加到ggplot时,抑制消息似乎被抑制了.下面的代码仍然会产生一条消息:

require('ggplot2');
require('ggridges');
suppressMessages(ggplot(Orange, aes(x=age,y=Tree)) + geom_density_ridges());
Run Code Online (Sandbox Code Playgroud)

(具体来说," Picking joint bandwidth of 319".)

为什么是这样?ggplot无论用户的规格如何,是否确实能够确保消息传递?或者这实际上是我刚才不知道的明智行为?

生成RMarkdown报告时,message可以将chunk选项设置为message=FALSE,这将抑制呈现级别的所有消息.因为那是我的用例,我的问题就解决了.

正如该ggridges软件包的作者C​​laus Wilke 建议的那样,您可以随时bandwidth手动设置以避免消息(https://twitter.com/ClausWilke/status/921361195231215616).

为什么suppressMessages首先压制消息呢?

我恰好不知道这种预期的行为吗?

r ggplot2 r-markdown ggridges

11
推荐指数
1
解决办法
772
查看次数

根据高度为山脊线添加颜色渐变

我想根据区域的高度而不是 X 轴使用渐变填充颜色为山脊线图着色。它会是这样的:

library(ggplot2)
library(ggridges)   
ggplot(lincoln_weather, aes(x = `Mean Temperature [F]`, y = `Month`, fill = stat(x))) +
      geom_density_ridges_gradient(scale = 3, size = 0.3, rel_min_height = 0.01) +
      scale_fill_viridis_c(name = "Temp. [F]", option = "C") +
      labs(title = 'Temperatures in Lincoln NE')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但在这里,我不是根据 x 轴填充渐变,而是希望对所有曲线使用相同的垂直渐变,因此曲线越高,颜色越深。因此,峰值的颜色会较深,而基线附近的颜色会较浅。

PD:我用geom_ridgeline()的是我的图geom_density_ridges_gradient(),但我认为这个例子更清楚地说明了问题。并且也有负值。

PD2:我知道这里有一个类似的问题“已解决” 。但它已经过时了,因为如果您从建议的包中检查 github,就会出现一个问题,指出所需的函数不起作用,因为它基于另一个已弃用的函数。

r ggplot2 ggridges

11
推荐指数
2
解决办法
1276
查看次数

阻止 geom_density_ridges 显示不存在的尾部值

当我使用 时geom_density_ridges(),该图通常最终会显示数据中不存在的值的长尾。

下面是一个例子:

library(tidyverse)
library(ggridges)

data("lincoln_weather")

# Remove all negative values for "Minimum Temperature"
d <- lincoln_weather[lincoln_weather$`Min Temperature [F]`>=0,]

ggplot(d, aes(`Min Temperature [F]`, Month)) +
  geom_density_ridges(rel_min_height=.01)
Run Code Online (Sandbox Code Playgroud)

geom_ridgline 如您所见,一月、二月和十二月都显示负温度,但数据中根本没有负值。

当然,我可以对 x 轴添加限制,但这并不能解决问题,因为它只是截断了现有的错误密度。

ggplot(d, aes(`Min Temperature [F]`, Month)) +
  geom_density_ridges(rel_min_height=.01) +
  xlim(0,80)
Run Code Online (Sandbox Code Playgroud)

带轴限制的 geom_ridgeline 现在,该图使 1 月和 2 月的值看起来为零(没有)。这也使得 0 度看起来在 12 月经常发生,而实际上只有 1 个这样的日子。

我怎样才能解决这个问题?

r ggplot2 ggridges ridgeline-plot

9
推荐指数
2
解决办法
3811
查看次数

如何调整 R 中脊线图的带宽

使用包geom_density_ridges中的函数时ggridges,它始终为图中的所有密度选择带宽。但是有没有办法调整它选择的带宽呢?

我目前有一些代码可以制作山脊图,但对于底部密度来说带宽太低。我想对其进行调整,使其更平滑、不那么粗糙。

在此输入图像描述

这是我的代码:

hier_plot <- ggplot(hier_df, aes(x=x, y=as.factor(beta), fill = factor(beta))) +
  theme(axis.title = element_text(size = 15),
        axis.text = element_text(size = 15),
        legend.text = element_text(size = 10),
        panel.background = element_rect(fill = "#fffffC")) +
  labs(y = expression(beta), x = 'x', expression(beta), fill = expression(beta)) +
  geom_density_ridges(scale = 2.5) +
  scale_x_continuous(expand = c(0.01, 0)) +
  scale_y_discrete(expand = c(0.05, 0)) +
  scale_fill_brewer(palette = 'Reds')

hier_plot 
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggridges ridgeline-plot

8
推荐指数
1
解决办法
5228
查看次数

如何在ggridges的ridgeplot中添加垂直颜色渐变?

ggridges包让你画ridgeplots有两种纯色:

ggplot(iris, aes(x=Sepal.Width, y=Species))+
geom_density_ridges(alpha=0.33, scale=2, fill="#0570b0", colour=alpha(0.1))+
theme_classic()
Run Code Online (Sandbox Code Playgroud)

或使用水平颜色渐变:

ggplot(iris, aes(x=Sepal.Width, y=Species, fill=..x..))+
geom_density_ridges_gradient(scale=2,colour=alpha(0.1))+
theme_classic()+
scale_fill_gradient(low="#0570b0", high="White")
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否可以生成具有垂直颜色渐变的类似图表,例如本示例(使用D3.js绘制)。有没有办法在R中实现类似的东西?

来自ONS的D3.js中的垂直梯度ridgeplot

图片来源ONS:最有可能死于自杀和药物中毒的中年人

r ggplot2 ggridges

7
推荐指数
1
解决办法
141
查看次数

图像作为轴刻度ggplot

我一直在寻找一种在 ggplot2 中使用 png 图像作为轴刻度的方法,更准确地说是在 我阅读过的ggridges 中,并试图复制这些帖子的答案,但是从那时起,软件包在语法上发生了很大变化发布日期:

使用额外的刻度和标签注释 ggplot 如何在 ggplot2 中使用通过 grImport 导入的图形作为轴刻度标签(使用网格函数)? 图标作为 R 中的 x 轴标签 - ggplot2

我想将 png(或其他类型的)图像添加到刻度标签,而不是标签 virginica、setosa 和 versicolor;

library(ggridges)
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Species)) + geom_density_ridges()
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggridges

6
推荐指数
1
解决办法
1337
查看次数

添加自定义垂直线joyplots ggridges

我想使用ggridges.

# toy example
ggplot(iris, aes(x=Sepal.Length, y=Species, fill=..x..)) +
geom_density_ridges_gradient(jittered_points = FALSE, quantile_lines = 
FALSE, quantiles = 2, scale=0.9, color='white') +
scale_y_discrete(expand = c(0.01, 0)) +
theme_ridges(grid = FALSE, center = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想在 7 处为 virginica 添加一条垂直线,为 versicolor 添加 4 条,为 setosa 添加 5 条垂直线。关于如何做到这一点的任何想法?

r ggplot2 ggridges ridgeline-plot

5
推荐指数
1
解决办法
2136
查看次数