我正在使用ggplot2 0.9.1绘制一个相当简单的图表.
x <- rnorm(100, mean=100, sd = 1) * 1000000
y <- rnorm(100, mean=100, sd = 1) * 1000000
df <- data.frame(x,y)
p.new <- ggplot(df,aes(x,y)) +
geom_point()
print(p.new)
Run Code Online (Sandbox Code Playgroud)
哪个有效,但ggplot2默认使用不适合我的观众的科学记数法.如果我想通过输入以下内容来更改x轴标签格式:
p.new + scale_x_continuous(labels = comma)
Run Code Online (Sandbox Code Playgroud)
我明白了:
Error in structure(list(call = match.call(), aesthetics = aesthetics, :
object 'comma' not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我注意到语言最近从"格式化"改为"标签".也许我误读了手册页?
编辑:我确实误读了手册页
library(scales)在尝试此操作之前需要加载.
我一直在尝试各种方法来使用OS X上的sed做一些基本的事情.以下是一些简单测试的结果.
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed 's/foo/FOUND/g'
Run Code Online (Sandbox Code Playgroud)
返回(按预期)
FOUND bar 2011-03-17 17:31:47 FOUND bar
Run Code Online (Sandbox Code Playgroud)
但
echo "foo bar 2011-03-17 17:31:47 foo bar" | sed -E 's/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/FOUND/g'
Run Code Online (Sandbox Code Playgroud)
回报
foo bar 2011-03-17 17:31:47 foo bar
Run Code Online (Sandbox Code Playgroud)
(甚至更刺激)
echo "food bar 2011-03-17 17:31:47 food bar" | sed -E 's/\d/FOUND/g'
Run Code Online (Sandbox Code Playgroud)
回报
fooFOUND bar 2011-03-17 17:31:47 fooFOUND bar
Run Code Online (Sandbox Code Playgroud)
现在,man sed页面说明了这一点
The following options are available:
-E Interpret regular expressions as extended (modern) regular
expressions rather than basic regular …Run Code Online (Sandbox Code Playgroud) 我试图按周和月绘制时间序列数据; 理想情况下,我认为,我想使用箱形图来显示按周分类的每日数据.虽然我可以使用更改x轴上的标签和网格线scale_x_date,但这不会影响绘图中的点.
这是一个问题的演示和我目前(笨拙)的解决方案.
library(zoo)
library(ggplot2)
d = as.Date(c(as.Date("2007-06-01"):as.Date("2008-05-31"))) # using zoo to reformat numeric
x = runif(366, min = 0, max = 100)
df = data.frame(d,x)
# PROBLEM #
p = ggplot(df, aes(d, x))
p + geom_point()
p + geom_boxplot() # more or less useless
# CURRENT FIX #
df$Year.Month <- format(df$d, "%Y-%m")
p = ggplot(df, aes(Year.Month, x))
p + geom_point(alpha = 0.75)
p + geom_boxplot() # where I'm trying to get to...
Run Code Online (Sandbox Code Playgroud)
我确信从内部有更优雅的方式来做到这一点ggplot.我对吗?
@ shadow的答案下面更整洁.但有没有办法使用binning来做到这一点? …
我有跨越两个日历年的一年数据。我想按月为这些数据子集绘制箱线图。
这些图将始终按字母顺序(如果我使用月份名称)或数字(如果我使用月份数字)排序。都不符合我的目的。
在下面的示例中,我希望 x 轴上的月份从 6 月(2013 年)开始,到 5 月(2014 年)结束。
date <- seq.Date(as.Date("2013-06-01"), as.Date("2014-05-31"), "days")
set.seed(100)
x <- as.integer(abs(rnorm(365))*1000)
df <- data.frame(date, x)
boxplot(df$x ~ months(df$date), outline = FALSE)
Run Code Online (Sandbox Code Playgroud)
我可能会按照我需要的顺序生成月份的向量(例如months <- months(seq.Date(as.Date("2013-06-01"), as.Date("2014-05-31"), "month")))
有没有更优雅的方法来做到这一点?我错过了什么?
我将一些索引数据绘制为条形图。我想通过强制 x 轴在 100 处交叉来强调数字的“高于索引”和“低于索引”(这样 80 的值将显示为 -20 条。)
这是一个更长的过程的一部分,因此很难有效地共享数据。不过,这里有一些说明问题的代码(以及我的解决方案的开始):
df <- data.frame(c("a","b","c"),c(118,80,65))
names(df) <- c("label","index")
my.plot <- ggplot(df,aes(label,index))
my.plot + geom_bar()
df$adjusted <- as.numeric(lapply(df$index,function(x) x-100))
my.plot2 <- ggplot(df,aes(label,adjusted))
my.plot2 + geom_bar()
Run Code Online (Sandbox Code Playgroud)
当然,我可以将我的指数计算更改为:(value.new/value.old)*100-100然后适当地为图表命名(类似于“xxx 相对于指数”),但这似乎很笨拙。
那么,我一直在测试的方法(运行上面的简单计算,然后重新标记 y 轴)是否真的是最好的解决方案?
毫无疑问,有人会告诉我,这种轴操纵是不受欢迎的。如果是这种情况,请他们指出我的解释方向吗?至少那时我会学到一些东西。