【问题标题】:How to set the coordinate limits when x and y scales are very different?当 x 和 y 比例非常不同时,如何设置坐标限制?
【发布时间】:2020-09-05 03:11:19
【问题描述】:

目标

我想使用ggplot2ggbg::geom_car 绘制汽车(有关geom_car 的更多详细信息,请访问here)。

问题

x 和 y 的比例非常不同。车辆的记录 x 坐标比记录的 y 坐标太大。这会扭曲汽车的形状。

数据

> dput(mdfs)
structure(list(frames = 41595L, ed_x_m = -7846.10309712287, ed_y_m = 85.7376740407815, 
    length_ed_m = 4.64, width_ed_m = 2.08, lv = "Ford1", lv_x_m = -7362.6827203125, 
    lv_y_m = 86.6492784667969, length_lv_m = 5.36448, width_lv_m = 1.9812, 
    fv = NA_character_, fv_x_m = NA_real_, fv_y_m = NA_real_, 
    length_fv_m = NA_real_, width_fv_m = NA_real_, lvt = "WhiteC2", 
    lvt_x_m = -7792.6745578125, lvt_y_m = 83.0061333984375, length_lvt_m = 5.035296, 
    width_lvt_m = 1.880616, fvt = NA_character_, fvt_x_m = NA_real_, 
    fvt_y_m = NA_real_, length_fvt_m = NA_real_, width_fvt_m = NA_real_), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))  

我尝试过的情节:

ggplot(mdfs) +
  geom_car(aes(x=ed_x_m, y=ed_y_m, length=length_ed_m,
               width=width_ed_m, fill="ed")) +
  geom_car(aes(x=lv_x_m, y=lv_y_m, length=length_lv_m,
               width=width_lv_m, fill="lv")) +
  geom_car(aes(x=lvt_x_m, y=lvt_y_m, length=length_lvt_m,
               width=width_lvt_m, fill="lvt")) +
  geom_car(aes(x=fvt_x_m, y=fvt_y_m, length=length_fvt_m,
                 width=width_fvt_m, fill="fvt")) +
  ggtitle("Without coord_equal()")   

ggplot(mdfs) +
  geom_car(aes(x=ed_x_m, y=ed_y_m, length=length_ed_m,
               width=width_ed_m, fill="ed")) +
  geom_car(aes(x=lv_x_m, y=lv_y_m, length=length_lv_m,
               width=width_lv_m, fill="lv")) +
  geom_car(aes(x=lvt_x_m, y=lvt_y_m, length=length_lvt_m,
               width=width_lvt_m, fill="lvt")) +
  geom_car(aes(x=fvt_x_m, y=fvt_y_m, length=length_fvt_m,
                 width=width_fvt_m, fill="fvt")) +
  coord_equal() +
  ggtitle("With coord_equal()")

如何正确绘制汽车?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我无法重现您的问题,因为 ggbg 包不适用于 R v 4.0.2。但是,一种方法可能是重新调整您的 x 数据,然后使用适当的值对 x 轴进行别名。然后coord_equal() 应该可以工作:

    ggplot(mdfs) +
      geom_car(aes(x=ed_x_m/100, y=ed_y_m, length=length_ed_m,
                   width=width_ed_m, fill="ed")) +
      geom_car(aes(x=lv_x_m/100, y=lv_y_m, length=length_lv_m,
                   width=width_lv_m, fill="lv")) +
      geom_car(aes(x=lvt_x_m/100, y=lvt_y_m, length=length_lvt_m,
                   width=width_lvt_m, fill="lvt")) +
      geom_car(aes(x=fvt_x_m/100, y=fvt_y_m, length=length_fvt_m,
                     width=width_fvt_m, fill="fvt")) +
      coord_equal() +
      scale_x_continuous(breaks = c(-78, -76, -74), labels = c(-7800, -7600, -7400)) +
      ggtitle("With coord_equal()")
    

    【讨论】:

    • 谢谢。我像你一样尝试缩放。但问题是汽车的长度也必须按比例缩放,否则汽车之间的距离不是实际距离。如果我这样做length_ed_m/100,那么我又回到了我开始的地方(汽车变形了)
    • 对于复制:如果您下载汽车图像并使用链接问题中提供的代码创建geom_car,则不需要ggbg
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2016-02-02
    相关资源
    最近更新 更多