- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的一个绘图中的颜色创建一个手动比例。我的数据范围从 0 到 10,而且我有很多非常小的数字。重要的是我想要两种颜色渐变。一个用于值 < 1 的点,一个用于值 >= 1 的点。由于我有很多非常小的数字,我希望颜色渐变处于对数刻度(发散为 1)。
模拟数据:
library(cowplot)
df <- data_frame(xs = rnorm(1000),
ys = rnorm(1000),
color_vals =c(runif(500, 0,.001), runif(500, .01,10)))
我知道我可以像这样自动执行此操作(我知道有一个白点没有意义,但这只是我更复杂的 map 绘制的玩具示例):
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradient2(low="blue", high = "red", mid = "white", trans="log10")
不过我不想要这种类型的渐变,因为我想要两个递增的渐变,以 1 分割:(1) 从灰色到蓝色,(2) 从黄色到红色。
我知道我可以用 scale_color_gradientn
这样指定它:
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(c(0,1,1.000001, max(df$colors))))
但是当我尝试与对数变换一起执行此操作时,梯度结果不正确。
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(c(0.000001,1,1.000001, max(df$colors))))
我得到的最接近的方法是尝试对 rescale
中的数字进行对数转换,但这不能正常工作(尽管它很接近)。
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(log10(c(0.000001,1,1.000001, max(df$colors)))))
那么如果我还想对梯度进行对数变换,我该如何为我的两个梯度指定正确的值呢?
最佳答案
您只指定了 2 种颜色的限制,但您有 4 种颜色。每种颜色都需要一个起点和终点。尝试以下操作。您可以根据需要的起点/终点更改参数:
ggplot(df, aes(x = xs, y = ys, color = color_vals)) +
geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(log10(
c(0, 1, #grey parameters
1.000001, 2, #blue parameters
2.1, 3, #yellow parameters
3.1, max(df$color_vals))))) #red parameters
既然你提到你只想绘制 2 种颜色,你会删除两个中间值参数,并删除两个颜色选项,如下所示:
ggplot(df, aes(x = xs, y=ys, color = color_vals)) +
geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("blue", "pink"),
values = scales::rescale(log10(
c(min(df$color_vals), 1, # <1 (blue) parameters
1, max(df$color_vals))))) # >1 (pink) parameters
关于r - 使用转换后的颜色/填充变量 ggplot2 为 scale_*_gradientn 指定手动值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41985921/
我正在使用 R (3.0.1) 和 ggplot2 (ggplot2_0.9.3.1) 与 geom_tile和 scale_fill_gradient .我正在使用' limits ' scale_
目标 使用 ggplot2::scale_*_time 以特定方式格式化时间轴(使用最新版本的 ggplot2)。 最小 Reprex # Example data tib1 % dplyr:
以下将 scale_x_continuous 与 geom_sf 结合使用可完全删除 x 轴标签。我假设指定的中断实际上并不存在于 ggplot 对象中,因此根本不会显示任何中断。 这是由coord_
我想创建一个具有不同于默认刻度线的主题,以避免每次创建自定义绘图时都重复 + scale_x_continuous。 让我们举一个简单的例子,我只想要极限处的刻度线: A = 1; f = 5; p
我正在尝试为我的一个绘图中的颜色创建一个手动比例。我的数据范围从 0 到 10,而且我有很多非常小的数字。重要的是我想要两种颜色渐变。一个用于值 = 1 的点。由于我有很多非常小的数字,我希望颜色渐变
我有例如两个数据集,第一个包含计算点,第二个包含网格坐标。我想使用 ggplot 绘制它们,我希望图例如下所示: 数据 df1% bind_rows(.id = "df") 比将变量映射到美学。
我是一名优秀的程序员,十分优秀!