我正在处理一些时频分解的 EEG 数据,并希望使用 ggplot2 生成类似频谱图的图形。但是,我最终在每个时间点之间都有空白。
Data <- read.csv(url("https://www.dropbox.com/s/al3cygigm86mr3s/Test_Spec_Data.csv?dl=0"))
Run Code Online (Sandbox Code Playgroud)
如果我创建一个 vanilla geom_raster,我会在 x 和 y 数据中得到间隙:
ggplot(Data,aes(Times,Frequency)) +
geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)
如果我做Frequency一个因子,它会填补 y 的空白;但是,沿 x 轴的间隙仍然存在:
ggplot(Data,aes(Times,factor(round(Frequency,digits=1)))) +
geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)
我可以通过制作Times一个因子来消除差距。
但是,管理scale_x_discrete这么多数据点很麻烦(注意 x 轴标签)。此外,这些时间数据是连续的,并不是真正的因子。
geom_raster没有width类似的论点geom_bar,我在geom_raster文档中看不到任何类似的内容。
有没有办法保持Times连续但消除观察之间的差距?
我正在尝试更改热图图中的颜色。我想要黄色、红色的配色方案,而不是默认的蓝色-深蓝色。
我的代码
a=as.matrix(volcano, ncol=ncol(volcano))
row.names(a)= 1:nrow(a)
library(reshape2)
a1 = melt(a)
colnames(a1) = c('X','Y','value')
head(a1)
library(ggplot2)
ggplot(a1,aes(x = X, y = Y)) +
geom_raster(aes(fill = value),interpolate=TRUE) +
scale_colour_gradient2(low="yellow", high="red", guide="colorbar")
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,我想要不同的配色方案。我不确定为什么最后一行 -scale_colour_gradient不起作用。这里的所有其他示例都有这一行,但带有 geom_tile 函数。
我正在使用R求解具有R中两个变量的方程。我正在按序列更改两个变量,然后使用带有插值的geom_raster生成解图。
但是,在绘制数据时,我注意到绘制区域超出了我作为输入给出的y轴值的范围。
如果使用ylim对该区域施加限制,则插值图将缩小并且不再限制值。如果我使用vjust = 0,则图的顶部会限制该区域,而底部则不会。
我的可重现示例代码如下:
library(ggplot2)
library(reshape2)
x_range <- seq(0.001,10, by=0.001)
y_range <- (seq(1*10^-10, 1*10^-9, by = 1*10^-10))
FUN <- function(x, y) log10((1)/(x*y))
data <- outer(x_range, y_range, FUN)
colnames(data) <- y_range
rownames(data) <- x_range
melted_data <- melt(data)
p <- ggplot(data=melted_data)
# basic plot
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +
geom_hline(yintercept = 1*10^-10) +
geom_hline(yintercept = 1*10^-9)
Run Code Online (Sandbox Code Playgroud)
# with imposed ylim
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +
geom_hline(yintercept = 1*10^-10) +
geom_hline(yintercept = 1*10^-9) …Run Code Online (Sandbox Code Playgroud) 我试图绘制一个相对较小的数据集,但我无法让它向我展示该图。它不断给出错误Error: cannot allocate vector of size 9.7 Gb。这对我来说没有多大意义,因为数据集很小。
> nrow(locs)
[1] 130
> head(locs)
STATION AVGTRANGE LAT LONG
1: USC00286979 22.13333 40.6971 -75.2042
2: USC00360022 21.33333 40.5361 -79.8152
3: USC00360132 24.37037 40.5227 -78.3694
4: USC00360140 19.80000 40.4949 -78.4667
5: USC00360147 22.36667 41.3585 -77.9262
6: USC00360457 20.68000 40.8209 -76.4983
Run Code Online (Sandbox Code Playgroud)
我是如何策划的。
gg <- ggplot(data = locs, aes(x = LONG, y = LAT)) +
geom_raster(aes(fill=AVGTRANGE), interpolate=TRUE)
gg # can't allocate here
Run Code Online (Sandbox Code Playgroud)
这是dput我的数据。
> dput(locs)
structure(list(STATION = structure(1:130, .Label = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在小规模地图上绘制栅格数据(使用ggplot和geom_raster)的方法.我想使用ggalt和coord_proj'放大'shapefile的特定区域,但我遇到了错误geom_raster only works with Cartesian coordinates
ggplot() +
geom_polygon(data = land_df, aes(long, lat, group = group), fill = 'grey25')+
geom_raster(data = df, aes(lon_bin, lat_bin, fill = sum_hours)) +
coord_proj(xlim = c(-67, -63),ylim = c(0, 9))
Run Code Online (Sandbox Code Playgroud)
是否有另一种使用coord_proj生成放大光栅贴图的简单方法,并避免了geom_raster仅适用于笛卡尔坐标的限制?
我能想到的其他选项是为每个'放大'区域生成单独的shapefile,但我正在绘制许多这些栅格,而不是必须为每个栅格生成单独的shapefile,而是使用coord_proj以编程方式指定栅格地图限制.
谢谢