小编mor*_*121的帖子

是否可以仅更改 1 个方面标题的对齐方式

假设我有一个像这样的多面 ggplot:

data(iris)
ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
  facet_grid(. ~ Species) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

题:

是否可以仅将第一个方面标签(“setosa”)与左侧对齐,但将其他方面保持在中央?

我对直接没有任何运气ggplot,所以我尝试转换为 gtable(下面的代码),我可以看到我可能需要修改的元素是 tableGrb #13 - strip-t-1,但我不确定怎么做。我尝试将gt$layout$lgt$layout$r值更改为 4(原为 5),但这会将标题完全移出构面。

pl <- ggplot(iris, aes(x = Petal.Width, y = Sepal.Length)) +
  facet_grid(. ~ Species) +
  geom_point()
gt <- ggplotGrob(pl)

gt$layout[gt$layout$name == 'strip-t-1', c('l', 'r')] <- c(4, 4) # my attempt
grid.newpage()
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能?

r ggplot2 facet-grid ggtext

8
推荐指数
2
解决办法
299
查看次数

使用 mapview 包时出错: (!is.na(getProjection(lst[[i]]))) { : 参数长度为零

我正在尝试使用 mapview 包来绘制栅格和 sf 特征。

streamsTransform <- st_transform(streams, 2958)
st_crs(streamsTransform)

dem17N <- projectRaster(dem, crs = "+proj=utm +zone=17 +ellps=GRS80 
                        +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")

course <- raster::aggregate(dem17N,8)
mapview(course) + mapview(streamsTransform)
Run Code Online (Sandbox Code Playgroud)

我已经使用 st_transform 和 projectRaster 确保它们在相同的投影坐标系中,但我仍然收到以下错误:

(!is.na(getProjection(lst[[i]]))) { : 
  argument is of length zero
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激!

r raster r-sf

6
推荐指数
0
解决办法
450
查看次数

合并flextables并保留格式的方法

假设我有 2 个 flextables:

ft1 <- regulartable(head(iris))
ft2 <- regulartable(tail(iris))
Run Code Online (Sandbox Code Playgroud)

它们具有不同的格式:

ft1 <- bg(ft1, bg="green")
ft2 <- color(ft2, color = "blue")
Run Code Online (Sandbox Code Playgroud)

有没有办法在它们已经是 flextables 之后合并这两个,并保持格式?

我可以使用这个合并它们:

ft3 <- regulartable(rbind(ft1$body$dataset, ft2$body$dataset))
Run Code Online (Sandbox Code Playgroud)

但我丢失了所有格式。

我知道在转换为 flextables 之前合并数据帧会更容易,但是我的实际数据的生成方式很困难,因为我试图合并的两个 flextables 是我编写的其他函数的结果。

编辑:

目的是保持单独的格式,如下所示:

在此处输入图片说明

r flextable

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

在图例ggplot中显示填充箭头

我正在尝试绘制一条末端带有箭头的线段,并使其出现在图例中。我可以使用以下代码来做到这一点:

library(ggplot2)

# sample data
dat <- data.frame(
  x = as.factor(1:10),
  y = c(20,30,13,37,12,50,31,2,40,30),
  z = rep('a', 10)
)

# basic plot
ggplot(dat) +
  geom_segment(
    aes(x = x, xend = x, y = 0, yend = y+15, linetype = z), 
    arrow = arrow(length = unit(0.25, 'cm'), type = 'closed'),
    size = 0.7
  ) 
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

问题:

我的问题是图例中的箭头没有像情节那样牢固地填充。我尝试过使用guide_legend(override.aes = aes(fill='black'))andguide_legend(override.aes = aes(type='closed'))但都没有对图例产生任何影响。

有谁知道如何使三角形填充并纯黑?

编辑:

我有一个类似的问题,geom_label不包括图例中标签周围的黑线。我设法通过geom_rect在我想要的确切位置添加 a 来解决这个问题,但希望这不是最好的解决方案:P

任何解决方案都会非常有帮助!

在此输入图像描述

r ggplot2

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

在 R 中创建范围条形图

我想在 R 中创建一个范围条形图。我发现了大约 4 年前发布的类似问题,但答案有点尴尬和麻烦。它完成了工作,但我希望现在可以采用更简洁的方法。使用 ggplot2 是理想的选择。

以日期作为 r 中绘制值的浮动条形图

如果可能的话,我还想包括某种点数据,或其他一些方式来指示汇总统计数据,例如该特定范围的平均值或中位数。

与所附图片相比,项目 ID 将取代沿 y 轴给出的月份,并且“开始”和“结束”值将沿 x 轴水平表示。

尽管数据不必以这种方式构建,但这里有一个示例数据框,可以使事情变得更容易:

structure(list(Item = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17, 18, 19, 20), Start = c(500, 550, 500, 
450, 400, 400, 500, 400, 300, 300, 350, 250, 300, 200, 200, 100, 
100, 50, 0, 0), End = c(550, 600, 550, 550, 700, 600, 600, 700, 
850, 600, 650, 650, 750, 900, 800, …
Run Code Online (Sandbox Code Playgroud)

plot r range bar-chart ggplot2

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

如何仅选择R中一列中具有特定值的行?

我正在对一个数据集进行探索性分析,其中包括过去 20 年中游戏数量以及每个平台的销量。

我想选择在任天堂平台上发布的所有游戏,我为实现这一目标所做的工作是:

dfNintendo <- dfNintendo[dfNintendo$Platform=="GBA", ]
Run Code Online (Sandbox Code Playgroud)

它仅用于提取在 Nintendo GBA 上发布的游戏,但我不知道如何同时提取具有与 GBA 不同的标签的多行,我尝试过:

dfNintendo <- dfNintendo[dfNintendo$Platform=="GBA" | 
                         dfNintendo$Platform=="Wii" | 
                         dfNintendo$Platform=="WiiU", ]
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我最终得到一个空的 data.frame。

bind r multiple-columns dataframe

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