ggplot2 填充未正确转换 ggplotly 颜色映射
ggplot2 fill not converting ggplotly color mapping correctly
我正在尝试使用 ggplotly()
转换 ggplot2 图像,但转换不正确。我的 ggplot 图像始终包含两行,geom_line
分量有一个颜色变量,geom_point
分量有一个填充变量。
这是我的基本 ggplot 部分的代码:
test_data1 = data.frame(
filter = "Filter 1",
time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
ovr_perc = rnorm(n = 60, mean = 8, sd = 2),
neg_perc = rnorm(n = 60, mean = 6, sd = 2),
count = sample(50:250,60,replace=T)
)
test_data2 = data.frame(
filter = "Filter 2",
time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
ovr_perc = rnorm(n = 60, mean = 20, sd = 6),
neg_perc = rnorm(n = 60, mean = 6, sd = 2),
count = sample(50:250,60,replace=T)
)
test_data = rbind(test_data1, test_data2)
p = ggplot(test_data, aes(x=time, y=ovr_perc, group = factor(filter))) +
geom_line(aes(color=factor(filter))) +
geom_point(aes(fill=neg_perc, size = count), shape=21) +
scale_fill_gradient2(low = "darkgreen", mid = "yellow", high = "red1",
midpoint = 5, limits = c(0, 10), oob = squish) +
scale_colour_manual(values = c("pink", "green")) +
theme_classic()
p
图像应该看起来像这样,这几乎正是我想要的样子:
但是,当我尝试添加 ggplotly
代码以获得工具提示功能时,它变成了:
ggplotly(p)
每个点的整个配色方案都消失了。我怎样才能改变它,使它从 ggplot 图像到 ggplotly 图像保持相同的色阶?
如上面链接的开放错误报告中所述,geom_point
对 fill
的美学映射无法正常工作,而 color
可以正常工作。根据错误报告,问题在包的开发版本中消失了,但如果您无法轻松访问它(我也没有),以下工作,至少在我这边:
library(dplyr)
library(plotly)
p2 <- ggplot(test_data, aes(x=time, y=ovr_perc, linetype = filter)) +
geom_line(data = . %>% filter(filter == "Filter 1"),
colour = "pink") +
geom_line(data = . %>% filter(filter == "Filter 2"),
colour = "green") +
geom_point(aes(color = neg_perc, size = count)) +
scale_color_gradient2(low = "darkgreen", mid = "yellow", high = "red1",
midpoint = 5, limits = c(0, 10), oob = squish) +
scale_linetype_manual(values = c("solid", "solid"),
guide = guide_legend(override.aes = list(
color = c("pink", "green")
))) +
theme_classic(); p2
ggplotly(p2)
解释:
这对 geom_point
使用 color
而不是 fill
,效果很好。
线条绘制在单独的 geom_line
图层中,颜色直接指定在 aes()
.
之外
线的线型映射在 aes()
内,以强制为每个过滤器值创建图例,而 scale_linetype_manual
中指定的实际映射将两条线设置为扎实。
我正在尝试使用 ggplotly()
转换 ggplot2 图像,但转换不正确。我的 ggplot 图像始终包含两行,geom_line
分量有一个颜色变量,geom_point
分量有一个填充变量。
这是我的基本 ggplot 部分的代码:
test_data1 = data.frame(
filter = "Filter 1",
time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
ovr_perc = rnorm(n = 60, mean = 8, sd = 2),
neg_perc = rnorm(n = 60, mean = 6, sd = 2),
count = sample(50:250,60,replace=T)
)
test_data2 = data.frame(
filter = "Filter 2",
time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
ovr_perc = rnorm(n = 60, mean = 20, sd = 6),
neg_perc = rnorm(n = 60, mean = 6, sd = 2),
count = sample(50:250,60,replace=T)
)
test_data = rbind(test_data1, test_data2)
p = ggplot(test_data, aes(x=time, y=ovr_perc, group = factor(filter))) +
geom_line(aes(color=factor(filter))) +
geom_point(aes(fill=neg_perc, size = count), shape=21) +
scale_fill_gradient2(low = "darkgreen", mid = "yellow", high = "red1",
midpoint = 5, limits = c(0, 10), oob = squish) +
scale_colour_manual(values = c("pink", "green")) +
theme_classic()
p
图像应该看起来像这样,这几乎正是我想要的样子:
但是,当我尝试添加 ggplotly
代码以获得工具提示功能时,它变成了:
ggplotly(p)
每个点的整个配色方案都消失了。我怎样才能改变它,使它从 ggplot 图像到 ggplotly 图像保持相同的色阶?
如上面链接的开放错误报告中所述,geom_point
对 fill
的美学映射无法正常工作,而 color
可以正常工作。根据错误报告,问题在包的开发版本中消失了,但如果您无法轻松访问它(我也没有),以下工作,至少在我这边:
library(dplyr)
library(plotly)
p2 <- ggplot(test_data, aes(x=time, y=ovr_perc, linetype = filter)) +
geom_line(data = . %>% filter(filter == "Filter 1"),
colour = "pink") +
geom_line(data = . %>% filter(filter == "Filter 2"),
colour = "green") +
geom_point(aes(color = neg_perc, size = count)) +
scale_color_gradient2(low = "darkgreen", mid = "yellow", high = "red1",
midpoint = 5, limits = c(0, 10), oob = squish) +
scale_linetype_manual(values = c("solid", "solid"),
guide = guide_legend(override.aes = list(
color = c("pink", "green")
))) +
theme_classic(); p2
ggplotly(p2)
解释:
这对
geom_point
使用color
而不是fill
,效果很好。线条绘制在单独的
geom_line
图层中,颜色直接指定在aes()
. 之外
线的线型映射在
aes()
内,以强制为每个过滤器值创建图例,而scale_linetype_manual
中指定的实际映射将两条线设置为扎实。