小编byt*_*ght的帖子

左调整ggplot2中的标题,或ggtitle的绝对位置

我想在这样的情节中保持标题的对齐

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)

基本的ggplot2图

第一次尝试

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 ggplot2

27
推荐指数
6
解决办法
3万
查看次数

使用dplyr为每个组应用ggplot函数,并为每个组设置标题

我想在数据框中为每个组创建一个单独的绘图,并在标题中包含该组.

使用虹膜数据集,我可以在基础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中的数据集替换为每个调用的子集.

与facet一起解决

或者(工作但复杂)与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为每个组设置标题.

谢谢!

split r ggplot2 dplyr

24
推荐指数
2
解决办法
1万
查看次数

R和ggpairs中用户定义的调色板

我试图使用从散点图另一个调色板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)

ggplot2_1

也有效

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)

ggplot2_2

不行

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)

ggpairs1 但补充一点

putPlot(p, ggplot(iris, aes(x=Sepal.Length, colour=Species)) + stat_ecdf(), 1,1)
Run Code Online (Sandbox Code Playgroud)

添加正确颜色的图表.

ggpairs2

解决方法

之后我可以使用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)

r ggplot2

5
推荐指数
1
解决办法
4924
查看次数

GGally putPlot 无法在循环中工作

我正在尝试使用 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)

工作示例

plot r ggplot2

5
推荐指数
1
解决办法
653
查看次数

时间轴上刻度子集的日期格式

问题

我想格式化我的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)

plot timestamp r graph ggplot2

5
推荐指数
1
解决办法
1102
查看次数

在html输出中的xtable thead

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)

html r xtable

5
推荐指数
1
解决办法
708
查看次数

使用与tidyr分开的不同长度向量

我想将一列字符串(例如[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)

r stringr dplyr tidyr

4
推荐指数
1
解决办法
1666
查看次数

标签 统计

r ×7

ggplot2 ×5

dplyr ×2

plot ×2

graph ×1

html ×1

split ×1

stringr ×1

tidyr ×1

timestamp ×1

xtable ×1