我想用与斯特拉瓦类似的方式绘制一次 run 的结果.我使用geom_ol绘制数据,但我希望从底部而不是从顶部绘制条形图,同时保持y轴的反转(因为速度值越高,速度就越低).

library(ggplot2)
df <- data.frame(km = 1:20, avePace = c(321, 301, 319, 312, 312, 313, 305, 309, 313, 341,
                                       352, 352, 355, 355, 372, 362, 372, 363, 340, 316))


ggplot(data = df, aes(x=km, y = avePace, fill = avePace)) +
 geom_col(show.legend = FALSE, orientation="x") +
 scale_fill_distiller() +
 scale_y_reverse(labels = function(t) strftime(t, "%M:%S")) +
 coord_cartesian(ylim = c(7*60, 3*60 )) +
 ylab("Pace (min/km)")

我知道这是阿尔瓦罗·莫拉莱斯问的similar question分,但我不能重复建议的解决方案.

enter image description here

The desired image looks something like this: Strava example

推荐答案

您可以使用scales包中的reciprocal转换来接近您需要的内容:

library(scales)
ggplot(data = df, aes(x=km, y = avePace, fill = avePace)) +
  geom_col(show.legend = FALSE, orientation="x") +
  scale_y_continuous(
    trans = "reciprocal"
    labels = function(t) strftime(as.POSIXlt(t, origin = as.Date("1970-01-01")), "%M:%S"))) +
  coord_cartesian(ylim = c(7*60, 3*60 )) +
  ylab("Pace (min/km)")

enter image description here

但是,正如@teunbrand在他的 comments 中指出的那样,对于这种类型的数据来说,这是错误的可视化.这些条的起源是无意义的(无限速度?),因此它们的大小是不可比较的.例如:15公里的横杆(372 S/公里)大约是1公里(321 S/公里)横杆的一半.但你的速度没有减半:在1公里时,你的速度是3.12米/S,在15公里时,你的速度是2.69米/S.

R相关问答推荐

将模拟变量乘以多个观测结果中的模拟变量

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

如何使下一个按钮只出现在Rshiny 的一段时间后?""

使用sf或terra的LINESTRAING的累积长度

一小时满足条件的日期的 Select

DEN扩展包中的RECT树形图出现异常行为

使用RSelenium在R中抓取Reddit时捕获多个标签

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

如何在PDF格式的kableExtra表格中显示管道字符?

如何在R中使用hmm TMB提前一步预测观察到的状态?

是否可以将线性模型的p值添加到tbl_summary中

按组和连续id计算日期差

随机 Select 的非NA列的行均数

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

生存时间序列的逻辑检验

R将函数参数传递给ggploy

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

残差与拟合图上标记点的故障排除