我想在这样的情节中保持标题的对齐
ggplot(data = economics, aes(x = date, y = unemploy)) +
geom_line() +
ggtitle("Unemployment in USA between 1967 and 2007") +
xlab("") +
ylab("Unemployed [thousands]")
Run Code Online (Sandbox Code Playgroud)

第一次尝试
ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() +
ggtitle("Unemployment in USA for some years") +
xlab("") +
ylab("Unemployed [thousands]") +
theme(plot.title = element_text(hjust = -0.45, vjust=2.12)))
Run Code Online (Sandbox Code Playgroud)

你的成功!但是等等......还有更多...现在我想将标题更改为其他内容.
ggplot(data = economics, aes(x = date, y = unemploy)) +
geom_line() +
ggtitle("Unemployment in USA between 1967 and 2007") +
xlab("") +
ylab("Unemployed …Run Code Online (Sandbox Code Playgroud) 我想在数据框中为每个组创建一个单独的绘图,并在标题中包含该组.
使用虹膜数据集,我可以在基础R和ggplot中执行此操作
plots1 <- lapply(split(iris, iris$Species),
function(x)
ggplot(x, aes(x=Petal.Width, y=Petal.Length)) +
geom_point() +
ggtitle(x$Species[1]))
Run Code Online (Sandbox Code Playgroud)
是否有使用dplyr的等价物?
这是尝试使用facet而不是title.
p <- ggplot(data=iris, aes(x=Petal.Width, y=Petal.Length)) + geom_point()
plots2 = iris %>% group_by(Species) %>% do(plots = p %+% . + facet_wrap(~Species))
Run Code Online (Sandbox Code Playgroud)
其中我使用%+%将p中的数据集替换为每个调用的子集.

或者(工作但复杂)与ggtitle
plots3 = iris %>%
group_by(Species) %>%
do(
plots = ggplot(data=.) +
geom_point(aes(x=Petal.Width, y=Petal.Length)) +
ggtitle(. %>% select(Species) %>% mutate(Species=as.character(Species)) %>% head(1) %>% as.character()))
Run Code Online (Sandbox Code Playgroud)

问题是我似乎无法以非常简单的方式使用ggtitle为每个组设置标题.
谢谢!
我试图使用从散点图另一个调色板ggpairs来自GGally于R.库见这里类似的问题.
library(ggplot2)
library(GGally)
Run Code Online (Sandbox Code Playgroud)
作品
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf() + scale_color_brewer(palette="Spectral")
Run Code Online (Sandbox Code Playgroud)

也有效
ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggplot(iris, aes(x=Sepal.Width, colour=Species)) + stat_ecdf()
Run Code Online (Sandbox Code Playgroud)

不行
ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")
ggpairs(iris,
columns=, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
colour='Species',
lower=list(continuous='points'),
axisLabels='none',
upper=list(continuous='blank')
)
Run Code Online (Sandbox Code Playgroud)
但补充一点
putPlot(p, ggplot(iris, aes(x=Sepal.Length, colour=Species)) + stat_ecdf(), 1,1)
Run Code Online (Sandbox Code Playgroud)
添加正确颜色的图表.

解决方法
之后我可以使用getPlot更改绘图,但这并不漂亮..
subplot <- getPlot(a, 2, 1) # retrieve the top left chart
subplotNew <- subplot + scale_color_brewer(palette="Spectral")
a <- putPlot(a, subplotNew, 2, 1) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 putplot 来更改 ggpairs 图对角线上的图。我可以一一执行此操作,但是当我使用循环时,对角线元素是相同的!
library(ggplot2)
library(GGally)
p=ggpairs(iris,
columns=, c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
colour='Species',
lower=list(continuous='points'),
axisLabels='none',
upper=list(continuous='blank')
)
for (i in 1:4) {
p <- putPlot(p, ggplot(iris, aes(x=iris[,i], colour=Species)) + stat_ecdf(), i,i)
}
print(p)
Run Code Online (Sandbox Code Playgroud)

展开循环有效...为什么...?
p <- putPlot(p, ggplot(iris, aes(x=iris[,1], colour=Species)) + stat_ecdf(), 1,1)
p <- putPlot(p, ggplot(iris, aes(x=iris[,2], colour=Species)) + stat_ecdf(), 2,2)
p <- putPlot(p, ggplot(iris, aes(x=iris[,3], colour=Species)) + stat_ecdf(), 3,3)
p <- putPlot(p, ggplot(iris, aes(x=iris[,4], colour=Species)) + stat_ecdf(), 4,4)
Run Code Online (Sandbox Code Playgroud)

问题
我想格式化我的X轴(时间),以便周末清晰可见.我想显示日期以及星期几.
现在的情况
我这样做(下面的完整代码)
scale_x_date(breaks=myData$timestamp,
labels=paste(
substr(format(myData$timestamp, "%a"),1,1),
format(myData$timestamp, "%d"),
sep="\n")
)
Run Code Online (Sandbox Code Playgroud)
这给了我

想要的情况
我宁愿在工作日有一个单字母的缩写,因为它在那里变得有点紧张.而且,我想用红色星期日(和假期真的).这就是我的意思(用GIMP制作).请注意如何使用添加第一个星期一和上周五
scale_x_date(breaks = "1 day",
minor_breaks = "1 days",
labels = date_format("%a\n%d"),
name="")
Run Code Online (Sandbox Code Playgroud)
但是,我得到了工作日的三个字母缩写,我在GIMP中删除了它.

以下是此示例的完整代码.
library(ggplot2)
library(scales)
library(reshape2)
minimumTime <- as.Date("2014-07-01")
maximumTime <- as.Date("2014-07-31")
x <- seq(minimumTime,maximumTime, by="1 day")
y1 <- sin(as.numeric(x)/3)
y2 <- cos(as.numeric(x)/3)
myData <- data.frame(timestamp=x, y1=y1, y2=y2)
myData <- melt(myData, id.vars="timestamp")
rects <- data.frame(saturdays=myData[weekdays(myData$timestamp) == "Saturday","timestamp"]-0.5, sundays = myData[weekdays(myData$timestamp) == "Saturday","timestamp"]+1.5)
myPlot <- ggplot() +
geom_rect(data=rects, aes(xmin=saturdays, xmax=sundays,ymin=-Inf, ymax=Inf), alpha=0.1) +
geom_line(data=myData, aes(x=timestamp, …Run Code Online (Sandbox Code Playgroud) 我xtable在R中knitr用来制作一些漂亮的桌子.我想使用CSS来制作我们的<thead>.
问题在于xtable,我被<th>包装<tr>,但没有别的,所以RMarkdown表和xtables的HTML代码看起来彼此不同.
我可以改变css,但我宁愿不要因为它也用于其他东西 - 我特别喜欢使用与RMarkdown表相同的CSS和xtable-tables.
这是我的代码(在test.Rmd中)
```{r, comment=NA, results="asis", tidy=TRUE, echo=TRUE, message=FALSE, warning=FALSE}
require(xtable)
options(xtable.type = 'html')
xtable( mtcars )
```
| Lorem ipsum dolor sit amet. | Lorem ipsum dolor sit amet. |
|-----------------------------|-----------------------------|
| Lorem ipsum dolor sit amet. | Lorem ipsum dolor sit amet. |
Run Code Online (Sandbox Code Playgroud)
然后我跑了
Rscript -e "library(knitr); knit2html('test.Rmd')"
Run Code Online (Sandbox Code Playgroud)
它产生'test.md',其中表头如下所示:
<!-- html table generated in R 3.1.1 by xtable 1.7-3 package --> …Run Code Online (Sandbox Code Playgroud) 我想将一列字符串(例如[1,58,10])与tidyr分开使用.我的问题是有时候列更短(永远不会更长).我在同一数据框中有很多列有此问题.
加载包
require(tidyr)
require(dplyr)
require(stringr)
Run Code Online (Sandbox Code Playgroud)
数据
在这里,我使用来自真实数据的样本制作数据框."载体"在col1中长度为10,在col2中为9或10.有一个时间列只是为了显示还有其他列.
df <- data.frame(
time = as.POSIXct(1:5, origin=Sys.time()),
col1 = c("[0,355,0,0,0,1227,0,0,382059,116]", "[0,31,0,0,0,5,0,0,925,1]", "[0,1,0,0,0,471,0,0,130339,3946]", "[0,0,0,0,0,223,0,0,37666,12]", "[0,19,0,0,0,667,0,0,336956,53]"),
col2 = c("[0,355,0,0,0,1227,0,0,382059,116]", "[0,355,0,0,0,1227,0,0,382059,116]", "[0,0,0,0,0,223,0,0,37666,12]", "[0,19,0,0,0,667,0,0,336956]","[0,355,0,0,0,1227,0,0,382059,116]")
)
Run Code Online (Sandbox Code Playgroud)
我多么想要它
对于所有"向量"长度相等的第一列,我可以使用separate()来获得我想要的.
a1 <- df %>%
mutate(col1 = str_sub(col1,2,-2)) %>%
separate(col1, paste("col1",1:10,sep="."),",")
# Making sure the numbers are numeric
a1 <- as.data.frame(sapply(a1, as.numeric)) %>%
mutate(time = as.POSIXct(time, origin="1970-01-01")) %>% select(-col2)
Run Code Online (Sandbox Code Playgroud)
这导致了
> a1
time col1.1 col1.2 col1.3 col1.4 col1.5 col1.6 col1.7 col1.8
1 2014-11-07 12:21:45 0 355 0 0 0 1227 0 …Run Code Online (Sandbox Code Playgroud)