不均等坐标系绘制

    通常来说,进行图片绘制的时候如果存在数据分布差异过大的情况,我们更倾向于选择坐标系截断(gg.map等)的方式去展示于结论更加相关的信息。但是截断毕竟会损失部分信息,如果想要更加全面...

    通常来说,进行图片绘制的时候如果存在数据分布差异过大的情况,我们更倾向于选择坐标系截断(gg.map等)的方式去展示于结论更加相关的信息。但是截断毕竟会损失部分信息,如果想要更加全面地展示,数据转换是一种不错的方式。


1. 指数型——使用logn(y)进行转换

原始数据:

attachments-2025-01-1fLf5nMP6780df01d4943.png

代码:

p <- ggplot(df, aes(x, y)) +
  geom_boxplot() +
  xlab(NULL) +
  ylab(NULL) +
  scale_y_log10(breaks = c(1, 2, 5, 10, 50, 100))
print(p)

scale_y_log10可以将y轴的刻度转换为对数刻度,具体来说是对数底为10的刻度。其作用是使y轴上的数据在对数尺度上均匀分布

假设有一组数据,其y值分布在1到10000之间,如果使用普通的线性尺度,那么1到100之间的数据点将会非常密集,而1000到10000之间的数据点则会非常稀疏。但如果使用scale_y_log10将y轴转换为对数刻度,那么1到10、10到100、100到1000、1000到10000这些区间在y轴上所占的距离将会相等,从而使得数据在各个数量级上的分布更加均匀,便于观察和分析。

结果如下:

attachments-2025-01-gyu4d2VF6780dfb293f8b.png

2. 特定尺度变化——自己写一些简单函数进行转换

原始数据:

attachments-2025-01-DOxqiqeG6780e22fe9e1e.png

代码:

# 自定义正向变换函数
custom_transform <- function(x) {
  ifelse(x <= 100, x, ifelse(x <= 150, 100 + (x - 100) * 0.8, 
                             ifelse(x <= 250, 140 + (x - 150) * 0.6, 
                                    ifelse(x <= 350, 220 + (x - 250) * 0.4, x))))
}
# 自定义反向变换函数
custom_inverse <- function(x) {
  ifelse(x <= 100, x, ifelse(x <= 140, 100 + (x - 100) / 0.8, 
                             ifelse(x <= 220, 150 + (x - 140) / 0.6, 
                                    ifelse(x <= 300, 250 + (x - 220) / 0.4, x))))
}
# 创建自定义转换器对象
custom_trans <- trans_new(
  name = "custom",
  transform = custom_transform,
  inverse = custom_inverse
)
# 绘制图形
ggplot(df, aes(x, y,fill=x)) +
  geom_boxplot() +
  scale_y_continuous(trans = custom_trans, breaks = c(50, 100, 150, 250, 350))
在这里,custom_transform函数用于将原始的y值转换为图形上的坐标值,而custom_inverse函数用于将图形上的坐标值转换回原始的y值。通过这种方式,我们可以确保在绘制图形时,数据点的位置和坐标轴的刻度标签都是正确的。正向变换和反向变换的重要性在于它们确保了数据在不同空间之间的转换是准确和可逆的。
大家自己的数据如果有特定的尺度转换要求,可以参考这个函数的写法。

结果如下:

attachments-2025-01-iVKmJf8Q6780e38a1a851.png

  • 发表于 2天前
  • 阅读 ( 46 )
  • 分类:R

0 条评论

请先 登录 后评论
Ti Amo
Ti Amo

51 篇文章

作家榜 »

  1. omicsgene 706 文章
  2. 安生水 352 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. rzx 79 文章
  7. 红橙子 78 文章
  8. CORNERSTONE 72 文章