簡體   English   中英

如何使用 ggplot2 以所需的比例繪制?

[英]How to draw at a desired scale using ggplot2?

目標

我有一些車輛的位置,我想將其可視化為交通的俯視圖

數據

我有以下 2 個數據集:

dat1 <- structure(list(
  fvn = 1L, Time = 0, xn1 = 100, vn1 = 13.9, ln1 = 5,
  sn_star = 9.41820693123826, v_dot = -1.44071910265916, xn = 85,
  vn = 12, sn = 10, deltav = -1.9
), row.names = c(NA, -1L), class = "data.frame")


dat2 <- structure(list(fvn = 1:5, Time = c(0, 0, 0, 0, 0), xn1 = c(
  100,
  85, 70, 55, 40
), vn1 = c(13.9, 12, 12, 12, 12), ln1 = c(
  5, 5,
  5, 5, 5
), sn_star = c(9.41820693123826, 16, 16, 16, 16), v_dot = c(
  -1.44071910265916,
  -1.5, -1.5, -1.5, -1.5
), xn = c(85, 70, 55, 40, 25), vn = c(
  12,
  12, 12, 12, 12
), sn = c(10, 10, 10, 10, 10), deltav = c(
  -1.9,
  0, 0, 0, 0
)), row.names = c(NA, -5L), class = "data.frame")

Plot

結果不好

在下面的 plot 中,您可以看到由於 x 和 y 的比例不同,汽車(矩形)看起來更寬而不是更長:

library(ggplot2)

ggplot() +
  geom_rect(data = dat1,
            aes(xmin = xn1 - ln1,
                xmax = xn1,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_rect(data = dat2,
            aes(group = fvn,
                fill = as.factor(fvn),
                xmin = xn - 5,
                xmax = xn,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_hline(yintercept = 3.6, linetype = "longdash") +
  ylim(c(0, 8)) +
  xlim(c(20, 100))

在此處輸入圖像描述

更好的結果

如果我更改ylim ,情況會有所改善:

ggplot() +
  geom_rect(data = dat1,
            aes(xmin = xn1 - ln1,
                xmax = xn1,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_rect(data = dat2,
            aes(group = fvn,
                fill = as.factor(fvn),
                xmin = xn - 5,
                xmax = xn,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_hline(yintercept = 3.6, linetype = "longdash") +
  ylim(c(0, 75)) +
  xlim(c(20, 100))

在此處輸入圖像描述

這更好,因為汽車現在看起來像預期的那樣更長,但是 plot 的很大一部分是空的。 我怎樣才能擺脫那個空白空間?

您可以使用coord_fixed保持ratio=1

ggplot() +
  geom_rect(data = dat1,
            aes(xmin = xn1 - ln1,
                xmax = xn1,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_rect(data = dat2,
            aes(group = fvn,
                fill = as.factor(fvn),
                xmin = xn - 5,
                xmax = xn,
                
                ymin = 0.628,
                ymax = 3.028)) +
  geom_hline(yintercept = 3.6, linetype = "longdash") +
  coord_fixed(ratio=1)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM