我想要在半对数刻度上绘制一些数据,但是当点之间有大的跳跃时,我会得到一些伪像。在线性比例上,在后续点之间绘制直线,这是可视化的精细近似。但是,使用对数比例(通过使用scale_x_log10或scale_x_continuous与日志转换)完成相同的操作。半对数刻度上两点之间的线应显示为弯曲。换句话说,这个:
df <- data.frame(x = c(0, 1), y = c(0, 1))
ggplot(data = df, aes(x, y)) + geom_line() + scale_x_log10(limits = c(10^-3, 10^0))
产生这个:
当我期待更像这样的事情时:
由此代码生成:
df <- data.frame(x = seq(0, 1, 0.01), y = seq(0, 1, 0.01))
ggplot(data = df, aes(x, y)) + geom_line() + scale_x_log10(limits = c(10^-3, 10^0))
很明显发生了什么,但我不确定解决插值问题的最佳方法是什么。在我绘制的实际数据中,在不同的点上有一些跳跃,这使得这些图在试图比较两条线时非常误导。 (在这种情况下,它们是ROC曲线。)
有一种想法是我可以搜索数据以获取跳转并自己填充一些插值点,但我希望有一种更简洁的方式,不会让我添加一堆伪数据点。
答案 0 :(得分:2)
您所描述的是坐标系的转换,而不是尺度的转换。区别在于尺度变换在任何统计变换之前发生,并且之后发生坐标变换。在这种情况下,“统计变换”是“在点之间画一条直线”。通过变换的比例,线在变换(对数)空间中是直的;使用变换后的坐标,它在原始(线性)空间中是直的,因此在对数空间中弯曲。
# don't include 0 in the data because log 0 is -Inf
DF <- data.frame(x = c(0.1, 1), y = c(0.1, 1))
ggplot(data = DF, aes(x = x, y = y)) +
geom_line() +
coord_trans(x="log10")