- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在组合 ggplot 的多个绘图,使用网格视口(viewport),这是必要的(我相信),因为我想旋转绘图,这在标准 ggplot 中是不可能的,甚至可能是 gridExtra 包。
我想在两个图上画一条线,以使相关性更清晰。但要确切知道线条在哪里,我需要 ggplot 图中某个点的相对位置(grob?)。
我做了以下例子:
require(reshape2)
require(grid)
require(ggplot2)
datamat <- matrix(rnorm(50), ncol=5)
cov_mat <- cov(datamat)
cov_mat[lower.tri(cov_mat)] <- NA
data_df <- melt(datamat)
cov_df <- melt(cov_mat)
plot_1 <- ggplot(data_df, aes(x=as.factor(Var2), y=value)) + geom_boxplot()
plot_2 <- ggplot(cov_df, aes(x=Var1, y=Var2, fill=value)) +
geom_tile() +
scale_fill_gradient(na.value="transparent") +
coord_fixed() +
theme(
legend.position="none",
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid=element_blank(),
panel.background=element_blank(),
panel.border = element_blank(),
plot.margin = unit(c(0, 0, 0, 0), "npc"),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_text(size=unit(0,"npc")),
)
cov_heatmap <- ggplotGrob(plot_2)
boxplot <- ggplotGrob(plot_1)
grid.newpage()
pushViewport(viewport(height=unit(sqrt(2* 0.4 ^2), 'npc'),
width=unit(sqrt(2* 0.4 ^2), 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.63, 'npc'),
angle=-45,
clip="on")
)
grid.draw(cov_heatmap)
upViewport(0)
pushViewport(viewport(height=unit(0.5, 'npc'),
width=unit(1, 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.25, 'npc'),
clip="on")
)
grid.draw(boxplot)
如何找到(比方说)箱线图第一个框的相对 x 和 y 位置?以及三角协方差矩阵的相对 x 和 y 位置。
我知道我必须查看 grob 对象 boxplot
,但我不知道如何在那里找到相关数据。
biên tập:
这些线从底部图上的点到顶部图上的 block 。
1 Câu trả lời
这是一个老问题,所以答案可能不再相关,但无论如何......
这并不简单,但可以使用网格
编辑工具来完成。人们需要一路收集信息,这使得解决方案变得繁琐。这在很大程度上是一种一次性解决方案。很大程度上取决于两个 ggplots 的具体情况。但也许这里已经足够供某人使用了。关于要划定的界限的信息不足;我将绘制两条红线:一条从第一个箱线图的横线中心到热图左下图 block 的中心;另一条从第一个箱线图的横线中心到热图左下图 block 的中心;一个从第一个箱线图的横线中心到热图中的下一个图 block 。
几点:
grid
chức năng grid.move.to()
Vàgrid.line.to()
.# Draw the plot
require(reshape2)
require(grid)
require(ggplot2)
set.seed(4321)
datamat <- matrix(rnorm(50), ncol=5)
cov_mat <- cov(datamat)
cov_mat[lower.tri(cov_mat)] <- NA
data_df <- melt(datamat)
cov_df <- melt(cov_mat)
plot_1 <- ggplot(data_df, aes(x=as.factor(Var2), y=value)) + geom_boxplot()
plot_2 <- ggplot(cov_df, aes(x=Var1, y=Var2, fill=value)) +
geom_tile() +
scale_fill_gradient(na.value="transparent") +
coord_fixed() +
theme(
legend.position="none",
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid=element_blank(),
panel.background=element_blank(),
panel.border = element_blank(),
plot.margin = unit(c(0, 0, 0, 0), "npc"),
axis.ticks=element_blank(),
axis.title=element_blank(),
axis.text=element_text(size=unit(0,"npc")))
cov_heatmap <- ggplotGrob(plot_2)
boxplot <- ggplotGrob(plot_1)
grid.newpage()
pushViewport(viewport(height=unit(sqrt(2* 0.4 ^2), 'npc'),
width=unit(sqrt(2* 0.4 ^2), 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.63, 'npc'),
angle=-45,
clip="on",
name = "heatmap"))
grid.draw(cov_heatmap)
upViewport(0)
pushViewport(viewport(height=unit(0.5, 'npc'),
width=unit(1, 'npc'),
x=unit(0.5, 'npc'),
y=unit(0.25, 'npc'),
clip="on",
name = "boxplot"))
grid.draw(boxplot)
upViewport(0)
# So that grid can see all the grobs
grid.force()
# Get the names of the grobs
grid.ls()
相关部分位于与面板有关的部分中。热图 grob 的名称是:
geom_rect.rect.2
构成第一个箱线图的 grobs 的名称是(数字可以不同):
geom_boxplot.gTree.40
GRID.segments.34
geom_crossbar.gTree.39
geom_polygon.polygon.37
GRID.segments.38
获取热图中矩形的坐标。
names = grid.ls()$name
HMmatch = grep("geom_rect", names, value = TRUE)
hm = grid.get(HMmatch)
str(hm)
hm$x
hm$y
hm$width # heights are equal to the widths
hm$gp$fill
(请注意,just
Đặt thành "left", "top"
)热图是一个 5 X 5 的矩形网格,但只有上半部分是彩色的,因此在图中可见。选中的两个矩形的坐标分别为:(0.045,0.227)和(0.227,0.409),每个矩形的宽度和高度均为0.182
获取第一个箱线图中相关点的坐标。
BPmatch = grep("geom_boxplot.gTree", names, value = TRUE)[-1]
box1 = grid.gget(BPmatch[1])
str(box1)
晶须的 x 坐标为 0.115,横梁的 y 坐标为 0.507
现在,在两个视口(viewport)之间绘制线条。这些线条是在面板视口(viewport)中“绘制”的,但热图面板视口(viewport)的名称与箱线图面板视口(viewport)的名称相同。为了克服这个困难,我寻找箱线图视口(viewport),然后向下推到其面板视口(viewport);同样,我寻找热图视口(viewport),然后向下推至其面板视口(viewport)。
## First Line (and points)
seekViewport("boxplot")
downViewport("panel.7-5-7-5")
grid.move.to(x = .115, y = .503, default.units = "native")
grid.points(x = .115, y = .503, default.units = "native",
size = unit(5, "mm"), pch = 16, gp=gpar(col = "red"))
seekViewport("heatmap")
downViewport("panel.7-5-7-5")
grid.line.to(x = 0.045 + .5*.182, y = 0.227 - .5*.182, default.units = "native", gp = gpar(col = "red", lwd = 2))
grid.points(x = 0.045 + .5*.182, y = 0.227 - .5*.182, default.units = "native",
size = unit(5, "mm"), pch = 16, gp=gpar(col = "red"))
## Second line (and points)
seekViewport("boxplot")
downViewport("panel.7-5-7-5")
grid.move.to(x = .115, y = .503, default.units = "native")
seekViewport("heatmap")
downViewport("panel.7-5-7-5")
grid.line.to(x = 0.227 + .5*.182, y = 0.409 - .5*.182, default.units = "native", gp = gpar(col = "red", lwd = 2))
grid.points(x = 0.227 + .5*.182, y = 0.409 - .5*.182, default.units = "native",
size = unit(5, "mm"), pch = 16, gp=gpar(col = "red"))
享受吧。
关于r - ggplot 和网格 : Find the relative x and y positions of a point in a ggplot grob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782477/
Tôi vừa viết những mã này nhưng kết quả lại khác. Đầu ra của đoạn mã thứ hai đúng như tôi mong đợi, nhưng đầu ra của đoạn mã thứ nhất lại không chính xác. Nhưng tại sao? def fib(n): x = 0 y = 1 in x
#include #include #xác định CUBE(y)y*(y*y) main() { int j; j = CUBE(-2+4);
Câu hỏi này đã có câu trả lời ở đây: Thứ tự gán và đánh giá nhiều trong Python (11 câu trả lời) Đã đóng 1 năm trước. Tôi đã thấy đoạn mã sau nhưng không biết nó có tác dụng gì
Tôi đang đọc một cuốn sách và nó nói rằng định nghĩa của typeclass Eq có hai hàm == và /=. Trong các phương trình, chúng được triển khai như sau: x == y = not (x /= y) x /= y = not (
Gần đây tôi đã tham gia một cuộc thi về Sức mạnh của Mã lệnh. Trong phần biên tập của cuộc thi, tôi thấy một mối quan hệ tuyệt đẹp giữa các toán tử bitwise, tức là x + y = x & y + x | Vâng, tôi vẫn chưa biết bằng chứng. Tôi đã chạy một vài con số để xem phương trình này có đúng không. Tôi rất vui khi biết điều này
Tôi đặt một nút trong View của mình bằng cách sử dụng CGRectMake(x,x,x,x) trong đó x tất nhiên là vị trí và kích thước. Khi tôi xoay một View bằng cách sử dụng -(BOOL)shouldAutoRotate..., tôi muốn
này.x = (Math.random()*canvasWidth); này.y = (Math.random()*canvasHeight); (1) này.shift = {x: th
Tôi muốn chạy mã này như "nếu 'Britain' hoặc 'UK' trong chuỗi thì thực hiện một số thao tác, nhưng không thực hiện một số thao tác nếu "Ex UK" nằm trong chuỗi": #Case insen
Chào buổi sáng, tôi mới ở đây và có một câu hỏi nhỏ. Tôi đang gặp khó khăn trong việc phát triển một thuật toán hiệu quả cho vấn đề sau: Tôi cần tìm tổ hợp của ba số dương x, y và z sao cho x + y, x - y, y + z, y - z, x + z và x - z
Hiện tại tôi đang viết trình thông dịch cho scheme bằng C++. Tôi có một câu hỏi liên quan đến định nghĩa và lambda. (define (add xy) (+ xy)) mở rộng thành (define add (lambda (xy)
Tôi đang cố gắng sử dụng một máy chủ để tải nội dung qua FTP lên một máy chủ khác. "Tôi sẽ không mở kết nối tới 172.xxx.xxx.xxx (chỉ mở kết nối tới 54.xxx.xxx.xxx)" thậm chí còn không liên quan, vì tôi không kết nối tới máy chủ đó. Đây là Để
Trong Python, sự khác biệt giữa việc sử dụng [] để giải nén lệnh gọi hàm là gì? và () hoặc không có gì? def f(): trả về 0, 1 a, b = f() # 1 [a, b] = f() # 2
Cho phương trình z = z(x,y) 2 mặt I và II: z_I(x, y) = a0 + a1*y + a2*x + a3*y**2 + a4*x**2 + a5*x*y z_II(x, y)
Tôi đã nhận được câu hỏi phỏng vấn này cách đây vài năm và vẫn chưa tìm ra câu trả lời. X và y phải bằng bao nhiêu để tạo thành một vòng lặp vô hạn? trong khi (x = y && x != y) { } Chúng tôi đã thử Nan, vô cực +/-, null f
Tôi đang cố gắng sử dụng Camel FTP Producer để gửi tệp đến máy chủ ftp của bên thứ ba (có vẻ như được lưu trữ bởi Amazon), nhưng tôi gặp phải sự cố khiến việc ghi tệp không thành công với thông báo: Thao tác tệp không thành công... Máy chủ đang thử kết nối dữ liệu x.
đóng cửa. Câu hỏi này cần thông tin chi tiết hoặc rõ ràng. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này. Đã đóng 8 năm trước. Cải thiện
Tôi đang sử dụng torch.tensor.repeat() x = torch.tensor([[1, 2, 3], [4, 5, 6]]) period = x.size(1) repeats = [1
#include int main() { int x = 9; int y = 2; int z = x - (x / y) * y; printf("%d", z
Tôi thấy khó hiểu khi phải có một định nghĩa trước rồi mới có hai biểu thức XOR. Mục đích của định nghĩa này là gì? Tôi đã thử gửi x=8, y=7 và kết quả là x=15 và y=8. Tại sao điều này lại xảy ra? Đây là chương trình: #define FUNC(a,b) a^=b
Tôi đang cố gắng tối ưu hóa chức năng này bằng SIMD, nhưng tôi không biết bắt đầu từ đâu. long sum(int x,int y) { return x*x*x+y*y*y; } Hàm được dịch ngược như sau: 4007a0
Tôi là một lập trình viên xuất sắc, rất giỏi!