Bộ lọc trên z
có bao gồm trường hợp sử dụng thực tế của bạn không? Ví dụ:
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))
Hoặc trong một hàm có thể được khái quát hóa thêm cho các biến thẩm mỹ do người dùng nhập. (Tôi cũng đã cập nhật chức năng sử dụng phép nội suy để vẽ đường ngay cả trong khu vực cốt truyện không chứa điểm dữ liệu, vì vậy miễn là ít nhất một kết nối ranh giới giữa điểm đi qua khu vực cốt truyện.)
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)))
Nếu bạn có các điểm bên ngoài khu vực vẽ đồ thị có thể nhìn thấy, đó là trường hợp sau khi phóng to, sau đó hiển thị tất cả các lớp điểm khác nhau là hành vi mặc định. – Heikki
@Heikki haha, ok, nó không được tôi mong muốn - do đó câu hỏi – eddi
bạn có thể sử dụng những gì được trả về bởi 'shiny' để lọc dữ liệu thay vì chỉ định nó bằng cách sử dụng' coord_cartesian' – bouncyball