R ggplot2:修复对数色标的图例

R ggplot2:修复对数色标的图例,r,ggplot2,R,Ggplot2,我正在尝试在ggplot2中绘制拟合模型效果,作为effects包返回的绘图的替代,并且在将连续分组因子映射到scale\u color\u gradient时遇到了问题。这些问题源于分组因子具有偏斜分布这一事实。使用默认的颜色映射,大多数颜色彼此无法区分,但日志转换会弄乱图例。我已经看了一些不太符合要求的相关答案(,和) 以下是我的数据: myEffs <- structure(list(PrimeShiftIndex = c(-4, -0.2, 4, -4, -0.2, 4, -4,

我正在尝试在
ggplot2
中绘制拟合模型效果,作为
effects
包返回的绘图的替代,并且在将连续分组因子映射到
scale\u color\u gradient
时遇到了问题。这些问题源于分组因子具有偏斜分布这一事实。使用默认的颜色映射,大多数颜色彼此无法区分,但日志转换会弄乱图例。我已经看了一些不太符合要求的相关答案(,和)

以下是我的数据:

myEffs <- structure(list(PrimeShiftIndex = c(-4, -0.2, 4, -4, -0.2, 4,
-4, -0.2, 4, -4, -0.2, 4), PrimeVowelDur = c(0.03, 0.03, 0.03,
0.06, 0.06, 0.06, 0.09, 0.09, 0.09, 1.59, 1.59, 1.59), fit = c(-0.184306629528313,
-0.164313919815862, -0.142216714344205, -0.200749305969527, -0.178039844592615,
-0.152939913597082, -0.210367655099129, -0.186068995874736, -0.159212583047775,
-0.278488972243709, -0.242934925102426, -0.203638346683111),
    se = c(0.0437103286485701, 0.0342751848548937, 0.0446524040373885,
    0.0417352317881704, 0.0340007746839495, 0.042093900962637,
    0.0441609220226782, 0.0341565687974652, 0.0442166991273061,
    0.0995662189943997, 0.041203801253227, 0.0993299532144987
    ), lower = c(-0.269979086288845, -0.231493448847753, -0.229735643449126,
    -0.282550563276701, -0.24468152835471, -0.235444164230796,
    -0.296923277064622, -0.253016036857112, -0.245877528409642,
    -0.473639245768052, -0.323694575976204, -0.398325538129639
    ), upper = c(-0.0986341727677806, -0.0971343907839703, -0.0546977852392849,
    -0.118948048662354, -0.11139816083052, -0.0704356629633676,
    -0.123812033133635, -0.119121954892359, -0.0725476376859078,
    -0.0833386987193667, -0.162175274228647, -0.00895115523658357
    )), class = "data.frame", row.names = c(NA, -12L), .Names = c("PrimeShiftIndex",
"PrimeVowelDur", "fit", "se", "lower", "upper"))

我的直觉是,
ggplot
应该能够自然地处理
p+scale\u color\u gradient(trans=“log”)
解决方案,而不会弄乱图例。无论如何,我有一个建议的解决方案,但我想看看有没有比savvier更好的东西我遗漏了

如果您将基于连续分组因子的值的断点传递给
断点
标签
参数
缩放颜色梯度
,则图例将按预期显示。无论您使用默认的颜色栏指南还是图例指南,此选项都有效:

brks2 <- sort(unique(myEffs$PrimeVowelDur))
p + scale_color_gradient(trans="log", breaks=brks2, labels=brks2)
p + scale_color_gradient(trans="log", breaks=brks2, labels=brks2, guide="legend")

brks2如果您是通过采用离散值的因子进行分组,您不应该使用离散色标吗?这里,PrimeVowelDur分组因子基于连续预测因子,但为了通过效果包构建模型预测,它被设置为四个值。这些值表示原始数据中PrimeVowelDur的最小值(=1Q)、中值、3Q和最大值。
brks2 <- sort(unique(myEffs$PrimeVowelDur))
p + scale_color_gradient(trans="log", breaks=brks2, labels=brks2)
p + scale_color_gradient(trans="log", breaks=brks2, labels=brks2, guide="legend")