在研究了Hadley的书并在此搜索SO之后,我创建了一个由数年和数月矩阵组成的热图,其颜色根据时间序列变量的百分比变化而变化.热图和我用来获取它的代码如下所示.我还有一些我自己无法解决的问题.
1)如何对矩阵进行排序/排序,使y轴的年份从最早到最晚?在这种情况下,我希望这些年从1995年的顶部开始,并继续到2011年的y轴底部.
2)我希望每年都能在y轴上显示,而是每隔5年才显示一次.我认为我的代码中的scale_y_date会处理这个但似乎没有任何影响.如何强制y轴每年显示?
3)我怀疑这仍然是ggplot2"待办事项"列表,但有没有办法让x轴标签(在本例中为Jan,Feb,Mar,Apr等)显示在情节的顶部比在底部?
require(ggplot2)
mydf <- data.frame(date=seq(as.Date("1995/1/1"), by="month", length.out=203),yoy=runif(203, min=-1, max=1))
p_heat <- ggplot(mydf, aes(x=month(date,label=TRUE),y=year(date), fill = yoy, label = sprintf("%1.1f%%", 100*yoy),size=10)) +
scale_y_date(major="years", format="%Y") +
geom_tile() + geom_text(aes(size=10)) +
scale_fill_gradient2(low = "red", high = "green") +
scale_x_discrete(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0)) +
opts(title="Value (%)") +
opts(panel.grid.minor=theme_blank()) +
opts(axis.ticks = theme_blank()) +
opts(panel.grid.major=theme_blank()) +
opts(axis.title.y = theme_blank()) +
opts(axis.title.x = theme_blank()) +
opts(legend.position = "none")
p_heat
Run Code Online (Sandbox Code Playgroud)

我使用下面的附加数据来生成boxplot.数据链接 https://www.dropbox.com/s/dt1nxnkhq90nea4/GTAP_Sims.csv
到目前为止,我有我正在使用的代码:
# Distribution of EV for all regions under the BASE scenario
evBASE.f <- subset(ccwelfrsts, tradlib =="BASE")
p <- ggplot(data = evBASE.f, aes(factor(region), ev))
p + geom_boxplot() +
theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 16)) +
theme(axis.text.y = element_text(colour = 'black', size = 16))
Run Code Online (Sandbox Code Playgroud)
它再现了一个看起来的情节:绘图文件:/// C:/Users/iouraich/Documents/ggplot_Results.htm
我在这里寻找的是让图中的x轴与csv文件中标题"region"的顺序相匹配.
ggplot中有任何选项可以控制吗?
非常感谢
我开始在Excel中制作日历,但认为在R中可能很容易做到.(注:我知道各种热图日历包,但我更喜欢使用ggplot2.)最后,我想打一个日历,显示从指定日起12个月,每个月为显示在4或5周小盒子y轴(顶部的第1周,底部的第4周或第5周)和沿x轴的星期几(从星期一开始).
我认为这将是一个15分钟的工作(为所有个月的数据,使用一下格式reshape,然后使用facet_wrap),但遇到了问题,几乎立即如下所示的情节-这个月的日子不是为了,虽然天这一周似乎还可以.在R中订购数据是我的克星; 我真的应该对此有所了解.无论如何,下面的图片显示了我到目前为止的代码,代码低于该代码.这只是一个有趣的项目,并不紧急,但欢迎任何帮助和/或装饰.

require(ggplot2)
require(scales)
require(lubridate)
date.start <- as.Date('2013-09-01')
date.end <- date.start + months(1)
mydf <- data.frame(mydate = seq(as.Date(date.start),
as.Date(date.end) - days(1),
by = 'day'))
mydf$month <- month(mydf$mydate)
mydf$week <- week(mydf$mydate)
mydf$day <- day(mydf$mydate)
mydf$dow <- as.factor(format(mydf$mydate, format = "%a"))
levels(mydf$dow) <- c('Mon','Tue','Wed','Thu','Fri','Sat','Sun')
ggplot(mydf, aes(x = dow, y = as.factor(week))) +
geom_tile(colour = "black", fill = "white", label = mydf$day) +
geom_text(label = mydf$day, size = 4, colour = "black") +
scale_x_discrete(expand = c(0,0)) …Run Code Online (Sandbox Code Playgroud) 几周前,我使用ggplot2创建了一个多面图,其中构面按数据框中的最后一个值排序.在重新排序之前我没有遇到任何重大问题,因为我没有真正理解订单,因素和水平的所有复杂情况.仍然,在提到SO帖子一两个小时(或三个)之后我就开始工作了.
当我今天回到剧本时,它不再"正在工作",因为它现在按字母顺序而不是数据框的最终值对方面进行排序.(我认为我最初"固定"了这个问题,同时在R控制台上乱搞并且实际上并没有将解决方案添加到脚本中.)而不是在今晚花费另外几个小时,我会抛弃自己的怜悯SO.
问:如何按指定值而不是按每个方面名称的字母顺序对构面进行排序?请注意以下代码仅为示例; 真实的数据有几十个项目.
编辑下面的代码以反映@joran的其他输入; 现在可以对构面进行分类和填充.任务成功.
# Version 3
require(ggplot2) ## NB This script assumes you have ggplot2 v0.90
require(scales)
require(plyr)
require(lubridate)
require(reshape)
set.seed(12345)
monthsback <- 15
date <- as.Date(paste(year(now()),month(now()),"1",sep="-")) - months(monthsback)
myitems <- data.frame(mydate=seq(as.Date(date), by="month", length.out=monthsback),
aaa = runif(monthsback, min = 600, max = 800),
bbb = runif(monthsback, min = 100, max = 200),
ccc = runif(monthsback, min = 1400, max = 2000),
ddd = runif(monthsback, min = 50, max = 120))
myitems <- melt(myitems, id = c('mydate'))
change_from_start …Run Code Online (Sandbox Code Playgroud) 我经常需要几个不同大小的相同ggplot2图表输出到png文件.每个png文件的大小很容易通过使用变量输出高度和宽度(以像素为单位)生成.对于ggplot2部分,我使用变量作为字体和某些其他元素的大小,并设置一个简单的循环,在每次传递中更改这些变量.这一切都按预期工作,是对R和ggplot2灵活性的致敬.
大多数情况下,我正在创建少量图表类型中的一种,其中大部分都没有变化.因此,我认为创建一个简单的函数来处理样板代码并从列表中的ggplot2返回图表是有意义的.我需要做的就是将数据框,我想要在图表中使用的列的名称以及其他几个变量传递给函数.循环为绘图创建名称,调用ggplot并将结果分配给列表中的元素.在第二次传递时,它会更改字体大小变量,但行为相同.
但是,字体大小似乎没有被ggplot拾取.具体来说,我使用变量来控制geom_text()的大小,x轴和y轴文本的大小以及绘图的标题.当我从函数返回后打印列表的内容时,geom_text()大小正在按预期变化,但是当它们应该不同时,其他两个元素不变.(请注意,在下面的代码中,我使用两个具有相同像素大小的"中"和"大"png文件,但通常一个是另一个的两倍 - 这仅用于说明目的.)

第二个图像应该具有与第一个不同的标题和轴文本大小,但不是:

因为这种方法在使用'in-line'作为普通代码块的一部分时工作正常,所以我只能假设我调用的方式或者可能刷新导致问题的函数有一些直接的问题.任何帮助非常感谢.
我之前没有在R中使用过命名函数,而且我是一名休闲程序员而不是专业人员,所以请为下面的狡猾代码提前道歉.
# create test data
set.seed(12345)
mydf <- data.frame(passdate=seq(as.Date("1995/1/1"), by="month", length.out=204),passval=runif(204, min=25, max=100),ignoreval=runif(204, min=-21, max=-2))
myplots <- list()
myplots <- chart_high_mom(mydf,'passdate','passval','1995-02-01','2011-12-31',"My title here")
# first chart
mywidth = 700
myheight = 600
png(filename = "chart1.png", width = 700, height = 600, units = "px", res = NA)
print(myplots[[1]])
dev.off()
# second chart - this intended to be twice as large when bugs fixed
png(filename = "chart2.png", width = 700, height = 600, units …Run Code Online (Sandbox Code Playgroud) 令人难以置信的简单问题.在Windows 7 64上使用Emacs 23.4.1中的CPerl模式,当我C-c c用来运行脚本时,Emacs不会将路径包装在引号中,因此任何带空格的目录都会导致Perl无法找到该文件.
"C:/Perl64/bin\perl.exe -w g:/foo/bar/first second/myscript.pl"
生成此错误消息:
"Can't open perl script "g:/foo/bar/first": No such file or directory"
问题:在将文件名传递给Perl本身时,如何让Emacs使用引号?
编辑:由于某种原因我无法评论(可能是浏览器问题)所以我正在编辑原始帖子以响应来自@legoscia的评论:"抄送c运行命令mode-compile".在Perl菜单中,它被标记为"运行".
我经常将换行符或换行符分隔的项目粘贴到Emacs缓冲区中,导致每个项目驻留在不同的行上,如下所示:
one
two
three
four
Run Code Online (Sandbox Code Playgroud)
我经常想要一个逗号分隔值列表,如下所示:
"one", "two", "three", "four"
Run Code Online (Sandbox Code Playgroud)
能够从一行到另一行进行一键式转换会很棒.我想我可以使用正则表达式转换它,但它似乎是可能已经具有内置Emacs函数的常用操作.任何人都可以推荐一个吗?
我正在尝试使用包ggplot2中的fortify函数将空间对象转换为data.frame.但是我收到了一个错误.例如,遵循Hadley Wickhan的绘制多边形shapefile示例中使用的完全相同的代码,我键入以下命令行:
require("rgdal")
require("maptools")
require("ggplot2")
require("plyr")
utah = readOGR(dsn="/path/to/shapefile", layer="eco_l3_ut")
OGR data source with driver: ESRI Shapefile
Source: ".", layer: "eco_l3_ut"
with 10 features and 7 fields
Feature type: wkbPolygon with 2 dimensions
utah@data$id = rownames(utah@data)
Run Code Online (Sandbox Code Playgroud)
一切似乎都运作正常:
> str(utah)
..@ data :'data.frame': 10 obs. of 8 variables:
.. ..$ AREA : num [1:10] 1.42e+11 1.33e+11 3.10e+11 4.47e+10 1.26e+11 ...
.. ..$ PERIMETER : num [1:10] 4211300 3689180 4412500 2722190 3388270 ...
.. ..$ USECO_ : int [1:10] 164 …Run Code Online (Sandbox Code Playgroud) 我想在谷歌的灰色地图上绘制各个城市的数据点.由于这些城市相距一段距离,我想我会用一个多面的情节.
创建地图很容易; 请参阅下面的图像和代码.但是,每个方面都显示相同的区域 - 在本例中为大伦敦 - 结果是其他城市的点数未显示.
理想情况下,我希望每个方面都显示每个城市的相关点重叠.因此,"卡迪夫"这个方面会显示卡迪夫及其数据点的缩放地图,"伯明翰"会显示伯明翰及其点数等等.我试着改变各种参数,如zoom和center,但我都没有成功.
如何在每个方面展示不同的城市和相关要点?

require(ggmap)
require(reshape)
# create fake data
sites <- data.frame(site = 1:6,
name = c(
"Royal Albert Hall",
"Tower of London",
"Wales Millenium Centre",
"Cardiff Bay Barrage",
"Birmingham Bullring",
"Birmingham New Street Station"
),
coords = c(
"51.501076,-0.177265",
"51.508075,-0.07605",
"51.465211,-3.163208",
"51.44609,-3.166652",
"52.477644,-1.894158",
"52.477487,-1.898836"),
subzone = rep(c('London','Cardiff','Birmingham'), each = 2)
)
# use function from reshape to split/add column
sites = transform(sites,
new = colsplit(coords, split = ",", names …Run Code Online (Sandbox Code Playgroud) 我想根据特定列中给出的值为ggplot2 facet图的背景着色.使用我已经问过的先前问题的答案,我能够将我需要的东西拼凑在一起.@joran对这个问题的回答特别有用,因为它说明了创建一个单独的数据框以传递给ggplot的技术.
这一切都很好,给出了如下图所示的输出:

这是我用来生成上图的代码:
# User-defined variables go here
list_of_names <- c('aa','bb','cc','dd','ee','ff')
list_of_regions <- c('europe','north america','europe','asia','asia','japan')
# Libraries
require(ggplot2)
require(reshape)
# Create random data with meaningless column names
set.seed(123)
myrows <- 30
mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows),
aa = runif(myrows, min=1, max=2),
bb = runif(myrows, min=1, max=2),
cc = runif(myrows, min=1, max=2),
dd = runif(myrows, min=1, max=2),
ee = runif(myrows, min=1, max=2),
ff = runif(myrows, min=1, max=2))
# Transform data frame from …Run Code Online (Sandbox Code Playgroud)