小编Joh*_* J.的帖子

阻止 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
查看次数

如何根据单元格的值有条件地设置 [gt] 表中单元格的格式

该包使用户可以根据有关行的条件语句gt轻松格式化单元格。我正在寻找一种根据单元格中的值格式化每个单元格的方法。

这就是我的意思。在下表中,我想根据每个单元格包含的值用 S&P 值对每个单元格进行着色。

library(gt)
library(dplyr)
library(tidyr)

# some arbitrary values of the S&P 500
jan08 <- sp500 %>% 
  filter(between(date, as.Date("2008-01-01"), as.Date("2008-01-15"))) %>%
  select(date, open, high, low, close)

gt(jan08)
Run Code Online (Sandbox Code Playgroud)

基本GT表

此函数以字符串形式返回每个值的适当颜色名称。

## this is the range of values
sp500.range <- jan08 %>% pivot_longer(cols = c(open, high, low, close))
heat_palette <- leaflet::colorNumeric(palette = "YlOrRd",
                                      domain = sp500.range$value)

# For example:
> heat_palette(1411.88)
[1] "#FEB852"
Run Code Online (Sandbox Code Playgroud)

每个单元格都可以手动着色,但这显然不实用。

gt(jan08) %>%
  tab_style(style = cell_fill(color = heat_palette(1411.88)),
            locations = cells_body(columns = "open", 
                                   rows = …
Run Code Online (Sandbox Code Playgroud)

r gt

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

在geom_text中,"labels = scales :: percent"可以舍入吗?

我正在制作一系列条形图,其中百分比值位于每个条形图上方.我想把它舍入到0位小数,但默认为小数点后1位.这是使用mtcars的示例.

library(ggplot2)
library(scales)

d <- mtcars

g <- ggplot(d, aes(gear)) +
geom_bar(aes(y = (..count..)/sum(..count..), fill=factor(..x..)), stat= "count")+
geom_text(aes(label = scales::percent((..count..)/sum(..count..)),
            y= ((..count..)/sum(..count..))), stat="count",
        vjust = -.25)
Run Code Online (Sandbox Code Playgroud)

这给你:在此输入图像描述

有没有办法将它们舍入到最接近的整数,这样条形标记为47%,38%和16%?

解决方法可能包括手动注释标签或生成摘要data.frame,从中拉出标签.但是,由于我生成了大量的表,我更倾向于在单个ggplot命令中包含我的所有代码.

r ggplot2

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

在rmarkdown pdf输出中包装比例表的列名的有效方法

我正在使用Questionr包制作加权的行比例表。我想在列名太长时包装它们。因为我要制作数百个表,所以该解决方案需要在具有不同列数的表上工作。我也想避免将所有列设置为特定宽度。理想情况下,短列名称应保持其正常宽度,而超过指定最大长度的名称将被换行。

到目前为止,我尝试了很多解决方案,它们写为.Rmd文件:

---
title: "Example"
output: pdf_document
---

```{r setup, include=FALSE}
library(questionr)
library(knitr)
data("happy")
```


A simple weighted table with the "kable" method:
```{r table1, echo=TRUE}
kable(wtd.table(happy$degree, happy$happy, weights = happy$wtssall),
  digits = 0)
```

The same "kable" table, but with row proportions:
```{r table2, echo=TRUE}
kable(rprop(wtd.table(happy$degree, happy$happy, weights = happy$wtssall)),
  digits = 0)
```

I want to wrap the column headers, but kableExtra::column_spec() gives an error.
Even if it worked it requires manually setting each column width.:
```{r table3, …
Run Code Online (Sandbox Code Playgroud)

r pandoc r-markdown kableextra kable

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

如何使用 SF 包计算质心和多边形边缘之间的最大距离?

我有一堆不同形状和大小的具有质心的多边形。我想计算从每个质心到其各自多边形最远点的距离。

这个问题已经在这里使用 package::sp 和 package::rgeos 解决了。

根据其简介,SF 包“旨在长期接替 SP”。查看文档我无法找到解决方案,但我不是简单功能的专家。有没有一个好的方法可以使用 sf 包完成此操作,或者我现在应该坚持使用 sf 和 rgeos 吗?

gis r r-sp r-sf

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

如何使用分组 ggplot 中包含颜色名称的变量分配颜色?

在这个简单的示例中,我创建了一个包含颜色名称的变量。

df <- mtcars %>%
  mutate(color = "green",
     color = replace(color, cyl==6, "blue"),
     color = replace(color, cyl==8, "red"))
Run Code Online (Sandbox Code Playgroud)

运行下面的代码可以按预期工作。

ggplot(df, aes(wt, mpg)) +
  geom_point(color = df$color)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我想使用 geom_line 创建三条线——绿色、蓝色和红色,该怎么办?

ggplot(df, aes(wt, mpg, group=cyl)) +
  geom_line(color = df$color)
Run Code Online (Sandbox Code Playgroud)

相反,我得到了三条颜色循环的线。 在此输入图像描述

如何使用带有颜色名称的变量来分配不同线条的颜色?

r ggplot2

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

用最近对之间绘制的线连接所有点

取一组 10 个点,像这样。

\n
library(tidyverse)\nlibrary(sf)\n\ndf.sf <- structure(list(component_number = c(51, 51, 51, 51, 51, 51, 51, \n51, 51, 51), geometry = structure(list(structure(c(2529693.76455455, \n437803.242940758), class = c("XY", "POINT", "sfg")), structure(c(2528862.86355918, \n436123.858325239), class = c("XY", "POINT", "sfg")), structure(c(2528991.21479502, \n436854.889372002), class = c("XY", "POINT", "sfg")), structure(c(2529138.56071318, \n436573.087631819), class = c("XY", "POINT", "sfg")), structure(c(2529133.32326354, \n436834.480073507), class = c("XY", "POINT", "sfg")), structure(c(2529133.70746582, \n437094.447431574), class = c("XY", "POINT", "sfg")), structure(c(2529134.07395407, \n437354.456933641), class = c("XY", "POINT", "sfg")), structure(c(2529193.24413696, \n437824.056422966), class = c("XY", "POINT", "sfg")), structure(c(2529456.32924802, \n437147.290262866), class = …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
2
解决办法
110
查看次数

使用带有简单特征(SF)函数的apply()

我写了一个函数来计算质心和多边形边缘之间的最大距离,但我无法弄清楚如何在一个简单特征("sf)data.frame的每个单独的多边形上运行它.

library(sf)

distance.func <- function(polygon){
  max(st_distance(st_cast(polygon, "POINT"), st_centroid(polygon)))
}
Run Code Online (Sandbox Code Playgroud)

如果我在单个多边形上测试该函数,它就可以工作.(警告消息与当前问题无关).

nc <- st_read(system.file("shape/nc.shp", package="sf")) # built in w/package
nc.1row <- nc[c(1),] # Just keep the first polygon

>distance.func(nc.1row)
24309.07 m
Warning messages:
1: In st_cast.sf(polygon, "POINT") :
   repeating attributes for all sub-geometries for which they may not be constant
2: In st_centroid.sfc(st_geometry(x), of_largest_polygon = of_largest_polygon) :
   st_centroid does not give correct centroids for longitude/latitude data
Run Code Online (Sandbox Code Playgroud)

问题是将此函数应用于整个data.frame.

nc$distance <- apply(nc, 1, distance.func)
Error in UseMethod("st_cast") :
 no applicable method for 'st_cast' …
Run Code Online (Sandbox Code Playgroud)

gis r r-sf

3
推荐指数
1
解决办法
903
查看次数

如何在函数内部使用 rlang::as_string()?

我正在编写一个函数,其中我提供一个变量名作为符号。在函数的另一个步骤中,我想将变量名用作字符串。根据文档,rlang::as_string“将符号转换为字符串”。

这是一个基本的例子。此函数返回一个标题为 的列的小标题mean

find_mean <- function(varname){
  tibble(mean = mean(pull(mtcars, {{varname}})))
> find_mean(qsec)
# A tibble: 1 × 1
   mean
  <dbl>
1  17.8
Run Code Online (Sandbox Code Playgroud)

我想将变量名作为字符串添加另一列,如下所示:

# A tibble: 1 × 2
   mean variable
  <dbl> <chr>   
1  17.8 qsec   
Run Code Online (Sandbox Code Playgroud)

我以为这会奏效。

find_mean <- function(varname){
  tibble(mean = mean(pull(mtcars, {{varname}})),
         variable = rlang::as_string({{varname}}))
}
Run Code Online (Sandbox Code Playgroud)

但它返回此错误。

> find_mean(qsec)
 Error in ~qsec : object 'qsec' not found 
Run Code Online (Sandbox Code Playgroud)

我知道我在rlang的非标准评估规则方面犯了一些基本错误,但是谷歌搜索还没有帮助我弄清楚这一点。

r nse rlang

2
推荐指数
1
解决办法
38
查看次数

标签 统计

r ×9

ggplot2 ×3

gis ×2

r-sf ×2

ggridges ×1

gt ×1

kable ×1

kableextra ×1

nse ×1

pandoc ×1

r-markdown ×1

r-sp ×1

ridgeline-plot ×1

rlang ×1