在之前的R post 指定ggplot2面板宽度之后,我已经能够生成这个图:

您可以在http://ubuntuone.com/0Nlb97mOeDhSbFrbFKCeEG找到 dput(datos)的输出
现在我的问题是如何删除/减少图形之间的空白区域.我找到了ggExtra包,ggplot和facet的例子,带有plot.margin或panel.margin选项的multiplots但是找不到如何应用于我的情况.
谢谢你的帮助.
编辑:我刚刚注意到情节的宽度不一样.需要它们具有相同的宽度,以便它们可以从底部图中共享x轴标签.
我们每天制作地图,显示我们地区30个不同区域的温度计算水平,每个区域根据水平填充不同的颜色.这张地图看起来像

现在我想将地图生成切换为R.我已经下载了省级和市级边界(您可以找到整个西班牙的边界或这里是我所在地区的子集)并设法根据Hadley的示例使用ggplot2绘制它们.
我还可以生成一个包含两列的ascii文件:identifier(CODINE)和每日级别.你可以在这里下载.
这是我的第一个尝试使用R和ggplot2绘制shapefile的脚本,因此可能存在错误并且肯定可以改进,欢迎提出建议.以下代码(基于Hadley之前提到的)对我有用:
> require("rgdal")
> require("maptools")
> require("ggplot2")
> require("plyr")
# Reading municipal boundaries
esp = readOGR(dsn=".", layer="lineas_limite_municipales_etrs89")
muni=subset(esp, esp$PROV1 == "46" | esp$PROV1 == "12" | esp$PROV1 == "3")
muni@data$id = rownames(muni@data)
muni.points = fortify(muni, region="id")
muni.df = join(muni.points, muni@data, by="id")
# Reading province boundaries
prov = readOGR(dsn=".", layer="poligonos_provincia_etrs89")
pr=subset(prov, prov$CODINE == "46" | prov$CODINE == "12" | prov$CODINE == "03" )
pr@data$id = rownames(pr@data)
pr.points = …Run Code Online (Sandbox Code Playgroud) 在另一个线程的帮助下,我设法绘制了一些全局地图.首先,我将气象GRIB2数据转换为Netcdf,然后绘制全局地图.
现在我想绘制地图的一个子区域.我尝试了crop命令并成功提取了全局nc文件的子区域.但是在绘图时我找不到如何控制轴限制.它绘制的地图比数据区域大,因此两侧都会出现大的空白区域.
这是我用来绘制地图的脚本
library("ncdf")
library("raster")
library("maptools")
DIA=format(Sys.time(), "%Y%m%d00") # Data d'avui
url=sprintf("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.%s/gfs.t00z.pgrb2f00", DIA) # Ruta del ftp
loc=file.path(sprintf("%s",url))
download.file(loc,"gfs.grb",mode="wb")
system("/usr/bin/grib2/wgrib2/wgrib2 -s gfs.grb | grep :TMP: | /usr/bin/grib2/wgrib2/wgrib2 -i gfs.grb -netcdf temp.nc",intern=T)
t2m <- raster("temp.nc", varname = "TMP_2maboveground")
rt2m <- rotate(t2m)
t2mc=rt2m-273.15
DAY=format(Sys.time(), "%Y%m%d") # Data d'avui
e=extent(-40,40,20,90)
tt=crop(t2mc,e)
png(filename="gfs.png",width=700,height=600,bg="white")
rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors
plot(tt,col=rgb.palette(200),main=as.expression(paste("Temperatura a 2m ",DAY," + 00 UTC",sep="")),axes=T)
dev.off()
Run Code Online (Sandbox Code Playgroud)
给出这个输出.

它必须是一个简单的,但我是一个简单的R用户.提前致谢.
编辑:按照建议添加xlim = c(-40,40),ylim = c(20,90)时的新输出.它似乎无法解决问题.但是使用x,y大小的输出png文件看起来很有希望,因为我可以调整大小以适应地图.确定它必须是另一种解决方案,正确的我无法找到.

根据气象数据(温度,风和湿度的小时值),我设法绘制了风速和风向的时间序列.现在我想在时间序列图上添加风向量.在这里你可以看到我想要的输出(在实际情节上绘制的箭头).

我正在使用ggplot2,一直在查看stackoverflow,ggplot2包文档(将继续)但找不到解决方案.任何想法或指示在哪里看都是一个起点.
提前致谢
编辑问题 正如@slowlearner在评论中所建议的那样,我在这里添加代码和数据以制作可重现的示例.貌似geom_segment可以做到这一点.我设法在geom_segment中计算yend但是无法弄清楚如何找到xend,因为x轴是时间轴.我有风速和风向数据,所以我可以计算geom_segment的x,y风成分,但x需要转换为时间格式.
这是用于绘图(温度)和数据的代码
for (i in 1:2 ) {
rams=subset(data,data$stat_id %in% i)
tore=subset(torre,torre$stat_id %in% i)
# Gràfica en ggplot
# Gráfica de evolución temporal de las estaciones de la zona
gtitol=places$nom[places$stat_id == i]
myplot=ggplot(data=rams,aes(x=datetime, y=tempc, colour="RAMS")) +
geom_line() + ylab("Temperatura (ºC)") + xlab(" ") +
ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") +
scale_y_continuous(limits = c(0,40)) +
geom_line(data=tore,aes(x=datetime,y=temp,colour = "Torre"))
#scale_y_continuous(breaks = round(seq(min(data$tempc), max(data$tempc), by = 2),0))
ggsave(myplot,filename=paste("RAMS-",i,".png",sep=""),width=7.78,height=5.79)
}
Run Code Online (Sandbox Code Playgroud)
我尝试了geom_segment文档
p=ggplot(tore, aes(x =datetime, y = 5))
p + …Run Code Online (Sandbox Code Playgroud) 在成功(在你的帮助下)绘制单个(一个变量)图形中的meteo变量之后,我试图在单个面板中生成一个包含我的数据中不同变量的时间序列的面板,就像ggplot2网页示例中的那个.我试图用我的数据重现该示例(页面底部的最后一个图形),但没有成功
我的数据已经持续了好几年,但我只附了一个月.您可以在http://ubuntuone.com/42j1RqUmNmxUuCppW4gElX上查看dput(datos)的输出
这是我正在尝试的代码
datos=read.csv("paterna.dat",sep=";",header=T,na.strings="-99.9")
dm=melt(datos,id="FECHA.H_SOLAR")
datos$PRECIP[is.na(datos$PRECIP)]=0
dm=melt(datos,id="FECHA.H_SOLAR")
qplot(date, value, data = dm, geom = "line", group = variable) + facet_grid(variable ~ ., scale = "free_y")
Error: geom_line requires the following missing aesthetics: x
Además: Mensajes de aviso perdidos
1: In min(x) : ningún argumento finito para min; retornando Inf
2: In max(x) : ningun argumento finito para max; retornando -Inf
Run Code Online (Sandbox Code Playgroud)
我尝试了qplot,因为它出现在引用的例子中,但也许最好使用ggplot并设置美学.然后我也可以自定义轴.
提前致谢
昨天我问了一个关于使用ggplot2绘制每小时数据的问题(R ggplot2绘制每小时数据),并通过收到的答案找到了解决方案.然后我成功用geom_line()绘制温度数据.
我试图将它应用于geom_bar以用条形图来说明降水数据.但我无法设置y轴限制.我尝试了不同的东西,但找不到确切的观点.
我的数据如下:
FECHA H_SOLAR;DIR_M;VEL_M;TEMP_M;HR;PRECIP
01/06/14 00:50:00;314.3;1.9;14.1;68.0;-99.9
01/06/14 01:50:00;322.0;1.6;13.3;68.9;-99.9
01/06/14 02:50:00;303.5;2.1;12.3;70.9;-99.9
01/06/14 03:50:00;302.4;1.6;11.6;73.1;-99.9
01/06/14 04:50:00;306.5;1.2;10.9;76.4;-99.9
01/06/14 05:50:00;317.1;0.8;12.6;71.5;-99.9
01/06/14 06:50:00;341.8;0.0;17.1;58.8;-99.9
01/06/14 07:50:00;264.6;1.2;21.8;44.9;-99.9
01/06/14 08:50:00;253.8;2.9;24.7;32.2;-99.9
01/06/14 09:50:00;254.6;3.7;26.7;27.7;10
01/06/14 10:50:00;250.7;4.3;28.3;24.9;12
01/06/14 11:50:00;248.5;5.3;29.1;22.6;-99.9
01/06/14 12:50:00;242.8;4.7;30.3;20.4;-99.9
01/06/14 13:50:00;260.7;4.9;31.3;17.4;-99.9
01/06/14 14:50:00;251.8;5.1;31.9;17.1;-99.9
01/06/14 15:50:00;258.1;4.6;32.4;15.3;-99.9
01/06/14 16:50:00;254.3;5.7;32.4;14.0;-99.9
01/06/14 17:50:00;252.5;4.6;32.0;14.1;-99.9
01/06/14 18:50:00;257.4;3.8;31.1;14.9;20
01/06/14 19:50:00;135.8;4.2;26.0;41.2;-99.9
01/06/14 20:50:00;126.0;1.7;23.5;48.7;16
01/06/14 21:50:00;302.8;0.7;21.6;53.9;-99.9
01/06/14 22:50:00;294.2;1.1;19.3;67.4;-99.9
01/06/14 23:50:00;308.5;1.0;17.5;72.4;-99.9
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的代码
library(ggplot2)
datos=read.csv("meteo.dat",sep=";",header=T,na.strings="-99.9")
datos$dia=as.POSIXct(datos[,1], format="%y/%m/%d %H:%M:%S")
datos$PRECIP[is.na(datos$PRECIP)]=0 # to avoid NA values
ggplot(data=datos,aes(x=dia, y=PRECIP)) + geom_bar(colour="blue",stat="identity") +
ylab("Precipitación (l)") + xlab("Hora solar") +
opts(title="Precipitacion …Run Code Online (Sandbox Code Playgroud) 我对ggplot2中的线条颜色有疑问.我需要绘制太阳辐射数据,但我只有6小时的数据,所以geom_line不要给出"好"的输出.我试过geom_smooth了,结果接近我的需要.但我有一个新问题,是否可以根据y值改变线条颜色?
用于绘图的代码是
library(ggplot2)
library(lubridate)
# Lectura de datos
datos.uvi=read.csv("serie-temporal-1.dat",sep=",",header=T,na.strings="-99.9")
datos.uvi=within(datos.uvi, fecha <- ymd_h(datos.uvi$fecha.hora))
# geom_smooth
ggplot(data=datos.uvi, aes(x=fecha, y=Rad_Global_.mW.m2., colour="GLOBAL")) +
geom_smooth(se=FALSE, span=0.3)
Run Code Online (Sandbox Code Playgroud)
在所需的输出中,对于250以下的辐射值,250-500区间内的绿色,以及高于500的值,蓝线应为红色.

有可能geom_smooth吗?我试图在这里重用代码,但找不到重点.
用于情节的数据:
dput(datos.uvi)
structure(list(fecha.hora = c(2016012706L, 2016012712L, 2016012718L,
2016012800L, 2016012806L, 2016012812L, 2016012818L, 2016012900L,
2016012906L, 2016012912L, 2016012908L, 2016013000L), latitud = c(37.75,
37.75, 37.75, 37.75, 37.75, 37.75, 37.75, 37.75, 37.75, 37.75,
37.75, 37.75), longitud = c(-1.25, -1.25, -1.25, -1.25, -1.25,
-1.25, -1.25, -1.25, -1.25, -1.25, -1.25, -1.25), altitud = c(300L,
300L, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 lon-lat 数据集绘制空间图。按照/sf/answers/1353776441/ 中的示例,我几乎可以获得所需的结果

这是使用的代码(大部分来自之前引用的问题)
library(rgdal)
library(ggplot)
# read province limits
CV = readOGR(dsn=".", layer="poligonos_provincia_etrs89")
CV.pr=subset(CV, CV$CODINE == "46" | CV$CODINE == "12" | CV$CODINE == "03" )
# convert object to data.frame
CV2 <- fortify(CV.pr)
# read spatial data
datos.uvi=read.csv("salida-mapa-036.dat",sep=",",header=T,na.strings="-99.9")
uvi.temp<-datos.uvi[,c("longitud","latitud","RGlobal")]
colnames(uvi.temp)<-c("long","lat","RGlobal")
# plot map
ggplot() +
geom_tile(data = uvi.temp, aes(x = long, y = lat, z = RGlobal, fill = RGlobal), alpha = 0.4) +
stat_contour(data = uvi.temp, aes(x = long, y = lat, z = …Run Code Online (Sandbox Code Playgroud) 我对日期格式有疑问plotly.我制作了一个时间序列图ggplot2,我试图用图表进行可视化,但是悬停时出现了日期时间的格式问题(见图).我想要日期格式YYMMD-hh:mm.我怎么能得到这种格式?
我脚本上的相关R代码:
library(lubridate)
datosO3.melt <- melt(datosO3.plot, id.vars="fecha", value.name="value")
ozono.plot <- ggplot() + geom_line(data=datosO3.melt, aes(x=fecha, y=value, colour=variable))
ggplotly(ozono.plot)
Run Code Online (Sandbox Code Playgroud)
关键是数据框中的列fecha是在先前数据帧中创建的日期时间对象.
datosO3<-within(datosO3, fecha.hora <- ymd_hm(paste(datosO3$AAMMDD,datosO3$hhmm,sep="")))
Run Code Online (Sandbox Code Playgroud)
并由datosO3.melt继承
str(datosO3.melt)
'data.frame': 23328 obs. of 3 variables:
$ fecha : POSIXct, format: "2017-06-13 00:00:00" "2017-06-13 00:10:00" ...
$ variable: Factor w/ 54 levels "Alcoi.Verge_dels_Lliris",..: 1 1 1 1 1 1 1 1 1 1 ...
$ value : num 75 76 73 72 71 72 73 74 74 73 ...
Run Code Online (Sandbox Code Playgroud)
但是当 …
我正在尝试使用来自Andy Clifton的梦幻风玫瑰R代码,网址为/sf/answers/1208674701/,用于绘制从气象模型中提取的数据.从模型中我得到你和风速分量m/s.然后我计算风速和风向并尝试风玫瑰代码.但我不确定它是否按预期工作,或者我不明白该功能正在做什么.
我尝试使用Andy的函数和下面的代码来绘制4朵风玫瑰:
flist<-c("03050","12010","46070","46050")
for (i in 1:4 ) {
windfile=paste("viento-",flist[i],".csv",sep="")
viento=read.table(windfile,sep=";",header=F)
colnames(viento) <- c("u","v")
fecha=read.table("ffhh.txt",header=F,sep=";")
colnames(fecha) <- c("date","hr")
wind<-cbind.data.frame(fecha,viento)
wind$speed=sqrt(wind$u*wind$u+wind$v*wind$v)
wind$dir=windDir(wind$u,wind$v)
graf=paste("RAMS-wind-rose-",flist[i],".png",sep="")
png(graf,res=240,width=3000, height=2400)
plot.windrose(data = wind,spd = "speed",dir = "dir")
dev.off()
}
Run Code Online (Sandbox Code Playgroud)
图形输出是

因此,最大风速在18-20米/秒的范围内.这样对吗?但如果我寻找最大风速,我会得到不同的价值
max(wind$speed)
[1] 10.24317
Run Code Online (Sandbox Code Playgroud)
也许我误解了wind.rose函数是如何运行的,或者在调用函数时可能存在问题.任何建议将不胜感激,我现在卡在这里.
风数据:
dput(wind)
structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, …Run Code Online (Sandbox Code Playgroud) r ×10
ggplot2 ×9
time-series ×2
contour ×1
date ×1
dictionary ×1
merge ×1
plotly ×1
r-plotly ×1
raster ×1
rose-diagram ×1
viewport ×1