我stat_bin2d在ggplot2包中创建了一个2d直方图.我想控制颜色渐变中的断点数,以及这些断点所在的位置.我敢肯定我只是忽略了一些小事,但我无法弄清楚如何控制分档中的休息时间.
例:
x <- rnorm(100)^2
y <- rnorm(100)^2
df <- data.frame(x,y)
require(ggplot2)
p <- ggplot(df, aes(x, y))
p <- p + stat_bin2d(bins = 20)
p + scale_colour_gradient2(breaks=c(1,2,3,4,5,6))
Run Code Online (Sandbox Code Playgroud)
这会产生:

c(5,10,15)尽管我徒劳地尝试休息,但这个情节只有3次休息c(1,2,3,4,5,6))
任何提示?
我在R.工作.我有十进制度的一系列坐标,我想按这些数字的小数位数排序这些坐标(即我想丢弃小数位数太少的坐标).
R中是否有一个函数可以返回一个数字所具有的小数位数,我可以将其合并到函数编写中?
输入示例:
AniSom4 -17.23300000 -65.81700
AniSom5 -18.15000000 -63.86700
AniSom6 1.42444444 -75.86972
AniSom7 2.41700000 -76.81700
AniLac9 8.6000000 -71.15000
AniLac5 -0.4000000 -78.00000
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会编写一个废弃AniLac9和AniLac 5的脚本,因为这些坐标没有以足够的精度记录.我想丢弃经度和纬度都少于3个非零十进制值的坐标.
假设我有这个情节:
ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, colour=Sepal.Length)) + scale_colour_gradient()
什么是离散色标的正确方法,如下面接受的答案下面显示的图(ggplot stat_bin2d图中的渐变断点)?
ggplot正确识别离散值,并为这些使用离散标度,但我的问题是,如果你有连续数据,你想要一个离散的颜色条(每个方格对应一个值,方块仍然以渐变着色),什么是最好的方法吗?离散/分箱是否应该发生在ggplot之外并作为单独的离散值列放入数据帧中,或者有没有办法在ggplot中进行?我正在寻找的一个例子类似于此处显示的比例:

除了我正在绘制散点图而不是像geom_tile/ heatmap 这样的东西.
谢谢.
我有大约100个有序类别的数据.我想将每个类别分别绘制为一条线,线条颜色范围从低值(比如蓝色)到高值(比如红色).
这是一些示例数据和一个图.
# Example data: normal CDFs
library(ggplot2)
category <- 1:100
X <- seq(0, 1, by = .1)
df <- data.frame(expand.grid(category, X))
names(df) <- c("category", "X")
df <- within(df, {
Y <- pnorm(X, mean = category / 100)
category <- factor(category)
})
# Plot with ggplot
qplot(data = df, x = X, y = Y, color = category, geom = "line")
Run Code Online (Sandbox Code Playgroud)
这会产生漂亮的彩虹(下图)
但我宁愿从蓝色到红色渐变.我有什么想法可以做到这一点?
我有这样的数据框
BP R2 LOG10
96162057 0.2118000 2.66514431
96162096 0.0124700 0.31749391
96162281 0.0008941 0.07012148
96163560 0.5011000 2.48505399
96163638 0.8702000 3.37778598
Run Code Online (Sandbox Code Playgroud)
我想在BP10上绘制BP,并用R2对点进行着色.R2是0-1的连续值.
myplot <- read.cvs("mytable.csv",head=TRUE)
attach(myplot)
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是我想以手动选择的间隔和颜色显示R2颜色,如下所示(如果我有离散值).
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() +
scale_color_manual(breaks= c("1","0.8","0.6","0.4","0.2","0"),
values = c("red","yellow","green","lightblue","darkblue"))
Error: Continuous value supplied to discrete scale
Run Code Online (Sandbox Code Playgroud)
这看起来很漂亮,但我宁愿设置我自己的颜色.
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point(shape=1) +
scale_colour_gradientn(colours = rainbow(10))
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能从连续值(1-0.8,0.8-0.6,0.6-0.4,0.4-0.2,0.2-0)手动选择间隔,并根据我的喜好(红色,黄色,绿色,浅色,深蓝色)进行着色?颜色之间的平滑渐变很酷,但并不重要.
我想将各个图例变量分组,并添加组名称和"括号",如下图所示:

我的数据有2列:
1 - 美国
2州 - 活动水平,范围从10(高) - 1(低)
我也在使用数据 -
us <-map_data("state"),它包含在ggplot/map包中.
我的代码:
ggplot()+ geom_map(data=us, map=us,aes(x=long, y=lat, map_id=region),
fill="#ffffff", color="#ffffff", size=0.15) +
geom_map(data=dfm4,map=us,aes(fill=ACTIVITY.LEVEL,map_id=STATENAME)
,color="#ffffff", size=0.15)+
scale_fill_manual("Activity",
values=c("10"="red4","9"="red2","8"="darkorange3",
"7"="orange3","6"="orange1",
"5"="gold2","4"="yellow","3"="olivedrab3","2"="olivedrab2",
"1"="olivedrab1"),
breaks=c("10","9","8","7","6","5","4","3","2","1"),
labels=c("High - 3","High - 2","High - 1","Moderate - 2","Moderate -
1","Minimal - 2","Minimal - 1","Low - 3","Low - 2","Low - 1"))+
labs(x="Longitude",y="Latitude")
Run Code Online (Sandbox Code Playgroud)
可重复的数据:
state<-c("alabama",
"alaska", "arizona", "arkansas", "california", "colorado", "connecticut",
"delaware", "district of columbia", "florida", "georgia", "hawaii",
"idaho", "illinois", "indiana", "iowa", "kansas", "kentucky",
"louisiana", "maine", "maryland", …Run Code Online (Sandbox Code Playgroud) 图片应该很好地说明了我想要实现的目标。理想情况下,生成的颜色条将保持连续性,即应该基于连续而不是离散的美学,或者至少非常接近于表现得像它。
这也意味着,不仅仅是将离散填充的图例键靠得足够近的简单方法。
是的,我可以创建一个假的 legend,但我想要一个在图例绘图级别进行修改的解决方案。
我也会很高兴有趣的网格技巧!
library(ggplot2)
ggplot(iris, aes(Sepal.Length, y = Sepal.Width, fill = Petal.Length))+
geom_point(shape = 21) +
scale_fill_continuous() +
guides(fill = guide_colorbar(ticks.colour = "black"))
Run Code Online (Sandbox Code Playgroud)
那是photoshopped,道歉!我不想创建箭头,只是使用分隔符而不是刻度的连续比例

最终目标是重现此线程中最初提出的颜色条

然而,这不是关于创建离散梯度条,这只是关于分隔符!
离散渐变栏是没有问题的,也有已经在那里的解决方案(例如,/sf/answers/4378108381/,/sf/answers/4378973441/,https://开头stackoverflow.com/a/50540633/7941188 )
我很高兴地发现我可以通过添加key_glyph = draw_key_rect到我的 geom 层来更改图例中使用的字形。我想让图例更宽更短,以类似于Timo Grossenbacher在这张地图中的图例:

我试过调整scale_fill_manual(guide = guide_legend(keyheight = unit(0.01, units = "mm") , keywidth = unit(40, units = "mm")))改变图例尺寸的方法,但似乎只有当我把字形变大时才有效。我似乎无法使键高更小。
有没有更好的方法来调整图例字形的尺寸?

此处简化代码:
df <- data_frame(x_value = c(1:10),
y_value = c(rev(1:10)),
value = c("a","a","a","a","b","b","b","b","c","c"))
library(ggplot2)
ggplot(data = df) +
geom_point(aes(x_value, y_value, fill = value),
shape = 21,
size = 9,
key_glyph = draw_key_rect) +
theme(legend.justification = c(0,0), # set which corner of legend legen.position references
legend.position = c(0.05, 0.04)) +
scale_fill_manual(values = c("red", "green", …Run Code Online (Sandbox Code Playgroud) 我试图从 BBC 复制这个数字。我很接近,但我正在努力使图例符号变薄。这可能吗?
library(tidyverse)
library("rio")
url <- "https://gist.githubusercontent.com/ericpgreen/a728be304b811fe7708699682eb4ba42/raw/fd924596e30c131dbaf97c00c9d9863bb40abb9a/bbcCovid.R"
df_plot <- rio::import(url)
ggplot(df_plot, aes(x=date,
y=reorder(Country.Region,
total,
order=TRUE))) +
geom_tile(aes(fill=casesRollf),
color="white",
na.rm = TRUE
#, key_glyph = draw_key_timeseries
) +
theme_bw() + theme_minimal() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.title = element_blank(),
plot.title.position = "plot") +
scale_x_date(breaks = as.Date(c("2020-02-14",
"2020-03-05",
"2020-03-25",
"2020-04-14")),
date_labels = "%d %b") +
scale_fill_manual(values=
c("#e4e4e4", "#ffeed2",
"#ffda64", "#faab19",
"#d2700d",
"#d56666", "#9a1200",
"#5b0600", "#000000"),
guide = guide_legend(reverse = TRUE),
labels=c("No cases", "1 to 10",
"11 to 50", "51 …Run Code Online (Sandbox Code Playgroud) 我根据这样的一段代码绘制了一张地图:
ggplot(faithfuld, aes(y=eruptions, x=waiting, z=100*density)) +
geom_contour_filled(breaks = c(-Inf,-2., -1.5, -1., -0.5, 0, 0.5, 1, 1.5, 2, 3, 4, 5, 7, 9, 11,Inf))+
theme(plot.title = element_text(size = 10,hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)
这是我的情节目前看起来像:
但是我的老板让我把这个传奇变成这样:
或者像这样:
此链接 ( https://ggplot2.tidyverse.org/reference/theme.html ) 中的参数只是为图例提供了细微的更改。而且我找不到任何可以实现这一点的论据,ggplot 是否可行?或者我必须使用其他绘图包?
创建具有不同间隔宽度且图例级别之间没有间距的离散颜色条这个问题(答案第 4 号)提供了一种方法,可以创建像我的老板要求的颜色条,但是,我正在使用geom_contour_filled(breaks = c(-Inf,-2., -1.5, -1., -0.5, 0, 0.5, 1, 1.5, 2, 3, 4, 5, 7, 9, 11,Inf))此参数,因此图例始终与大量文字:
有什么解决办法吗?
推理:我想轻松使用现成的连续尺度(来自任何提供scale_..._continuous等的包),用于有序因子类数据,例如mtcars$cyl. 因为这些数据只包含几种离散值,我想直接标记图例键,而不是 bin 限制。怎么做?
library(ggplot2)
ggplot(mtcars, aes(mpg, disp, color = cyl))+
geom_point() +
scale_color_continuous(limits = range(mtcars$cyl),
guide = guide_colorsteps(ticks.colour = "black"))
Run Code Online (Sandbox Code Playgroud)
不想要的:

hacky 方式,实际上是四个 (!) hacks,并且是不想要的。
# Hack 1 - create the colors manually from the palette. This is already annoying.
cont_col <- colorRampPalette(c("#132B43","#56B1F7"))(length(unique(mtcars$cyl)))
# Hack 2- you need to modify the underlying draw_key function
# from https://github.com/tidyverse/ggplot2/issues/2844
draw_key_polygon2 <- function(data, params, size) {
lwd <- min(data$size, min(size) / 4)
grid::rectGrob(
width = grid::unit(1, "npc"),
height …Run Code Online (Sandbox Code Playgroud) 我正在使用 ggplot 绘制南美洲平均气温的偏差图表。
为了绘制此图,我使用以下代码:
ggplot(bias.df2) +
geom_tile(aes(x=x, y=y, fill=pr), alpha=0.8) +
scale_fill_viridis(na.value="white") +
coord_equal() +
theme(legend.position="bottom") +
theme(legend.key.width=unit(2, "cm"))+
scale_color_continuous(limits=c(-10,10),breaks=brkbias)
Run Code Online (Sandbox Code Playgroud)
生成以下颜色条:
但我需要颜色条看起来像这样:
我尝试修改颜色条的限制,但似乎没有任何东西可以生成我需要的那种绘图。非常感谢任何帮助解决这个问题的帮助。
编辑:我正在使用的数据可以在此 csv文件中找到。