gpt4 book ai didi

r - 仅在图例中显示绘制的数据

转载 作者:行者123 更新时间:2023-12-04 12:03:57 25 4
gpt4 key购买 nike

考虑以下示例:

library(ggplot2)
df = data.frame(x = 1:5, y = 1:5, z = c('a', 'a', 'a', 'b', 'b'))

ggplot(df, aes(x, y, col = z)) + geom_line() + geom_point() +
coord_cartesian(xlim = c(1, 2.5))

enter image description here

仅来自 a 的数据已显示存储桶,但同时显示 a , 和 b出现在传说中。我该如何解决这个问题,以便只有实际绘制的桶出现在图例中?

对于上下文 - 我在尝试时遇到了这个问题 zooming into plotsshiny .

最佳答案

是否过滤 z涵盖您的实际用例?例如:

library(tidyverse)

df = data.frame(x = 1:5, y = 1:5, z = c('a', 'a', 'a', 'b', 'b'))

ggplot(df %>% filter(z %in% z[between(x,1,2.5)]),
aes(x, y, col = z)) +
geom_line() + geom_point() +
coord_cartesian(xlim = c(1, 2.5))

或者在可以进一步推广用户输入的美学变量的函数中。 (我还更新了函数以使用插值来绘制线条,即使在不包含数据点的绘图区域中,只要点之间至少有一条连接线穿过绘图区域。)
my_plot = function(xrng, data=df, step=0.01) {

levs = unique(data[["z"]])
n = length(levs)

# Generate interpolated data frame so we can plot lines even if
# no points appear in the graph region
dat_interp = split(data, data$z) %>%
map_df(function(d) {
x = seq(min(d$x), max(d$x), step)
data.frame(z=rep(unique(d$z), each=length(x)),
x, y=rep(approx(d$x, d$y, xout=x)$y, n))
})

ggplot(dat_interp %>% filter(z %in% z[between(x,xrng[1],xrng[2])]),
aes(x, y, col = z)) +
geom_point(data=data %>% filter(z %in% z[between(x,xrng[1],xrng[2])])) +
geom_line() +
coord_cartesian(xlim = xrng) +
scale_color_manual(values=setNames(hcl(seq(15,375,length=n+1)[1:n],100,65), levs))
}


gridExtra::grid.arrange(
my_plot(c(1,2.5)),
my_plot(c(1,4)),
my_plot(c(3,4)),
my_plot(c(4.3,6)),
my_plot(c(1.1,1.6)),
my_plot(c(4.2,4.9)))

enter image description here

关于r - 仅在图例中显示绘制的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com