假设我有一个像这样的多面 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$l和gt$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)
有谁知道这是否可能?
我正在尝试使用 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)
任何建议将不胜感激!
假设我有 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 是我编写的其他函数的结果。
编辑:
目的是保持单独的格式,如下所示:
我正在尝试绘制一条末端带有箭头的线段,并使其出现在图例中。我可以使用以下代码来做到这一点:
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 中创建一个范围条形图。我发现了大约 4 年前发布的类似问题,但答案有点尴尬和麻烦。它完成了工作,但我希望现在可以采用更简洁的方法。使用 ggplot2 是理想的选择。
如果可能的话,我还想包括某种点数据,或其他一些方式来指示汇总统计数据,例如该特定范围的平均值或中位数。
与所附图片相比,项目 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) 我正在对一个数据集进行探索性分析,其中包括过去 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。