小编use*_*714的帖子

如何使用ggplot2动态包装facet标签

我正在寻找一种方法来动态地将条带标签文本包装在一个facet_wrapfacet_grid调用中.我找到了一种方法来实现这一目的strwrap,但是我需要指定一个width输出才能按需运行.通常预先不知道小平面的数量,因此该方法需要我width基于数据集和绘图大小迭代地调整参数.是否可以动态指定包装函数的宽度,或者是否有其他选项可用于标记可以更好地工作的方面?

library(ggplot2)
df = expand.grid(group=paste(c("Very Very Very Long Group Name "), 1:9),
                 x=rnorm(5), y=rnorm(5), stringsAsFactors=FALSE)

df$groupwrap = unlist(lapply(strwrap(df$group, width=30, simplify=FALSE), paste, 
                             collapse="\n"))
p = ggplot(df) +
  geom_point(aes(x=x, y=y)) +
  facet_wrap(~groupwrap)
Run Code Online (Sandbox Code Playgroud)

更新:基于@baptiste和@thunk提供的指导,我想出了下面的选项.目前,它仅适用于指定的字体系列和大小,但理想情况下,应该也可以使用默认theme设置.也许有ggplot2经验的人有一些改进的建议.

library('grid')
grobs <- ggplotGrob(p)

sum = sum(sapply(grobs$width, function(x) convertWidth(x, "in")))
panels_width = par("din")[1] - sum  # inches

df$group = as.factor(df$group)
npanels = nlevels(df$group)
if (class(p$facet)[1] == "wrap") {
  cols = n2mfrow(npanels)[1]
} else {
  cols …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何使用ggplot2隐藏图例的部分?

我正在使用下面的代码生成一个情节,并希望隐藏"mag"(大小)图例,但仍保留"深度"(颜色)图例.

ggplot(quakes, aes(long, lat, size=mag, colour=depth)) + geom_point()

r ggplot2

22
推荐指数
1
解决办法
6386
查看次数

如何从ggplot2图例中删除美学

我正在寻找一种方法来隐藏使用下面的代码创建的情节中的一个aestetic传说.要按日期缩放点颜色,我必须将日期转换为数字,而我宁愿不在图上显示日期图例.另一方面,形状图例是要显示的重要信息.我明白这legend.position="none"将完全删除传说,但那时我留下了如何传达形状背后的意义的问题.

library(ggplot2)
w<-read.table("data.txt", header=TRUE)
pt.data <- w[w$dt==min(w$dt),]
p <- ggplot(data=w, aes(OAD,RtgValInt,color=dt,shape=Port)) +
     geom_jitter(size=3, alpha=0.75) +
     scale_colour_gradient(limits=c(min(w$dt), 
             max(w$dt)),
         low="#9999FF", high="#000066") +
     geom_point(data=pt.data, 
         color="red", size=3, aes(shape=Port))
print(p)
Run Code Online (Sandbox Code Playgroud)

data.txt文件包括以下行.

Date          Port    OAD         RtgValInt   dt
12/31/2010  Grp1    1.463771    1.833333    14974
12/31/2010  Grp2    1.193307    2.071429    14974
11/30/2010  Grp1    1.454115    1.833333    14943
11/30/2010  Grp2    1.127755    2.071429    14943
10/29/2010  Grp1    1.434965    2.000000    14911
10/29/2010  Grp2    1.055758    2.071429    14911
09/30/2010  Grp1    1.441773    2.000000    14882
09/30/2010  Grp2    1.077799    2.071429    14882
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

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

ggplot2脚注

在使用ggplot2创建的绘图底部添加脚注的最佳方法是什么?我尝试过使用这里提到的逻辑组合http://www.r-bloggers.com/r-good-practice-%E2%80%93-adding-footnotes-to-graphics/以及ggplot2注释功能

p + annotate("text",label="Footnote",
  x=unit(1,"npc") - unit(2, "mm"),y=unit(2, "mm"),
  just=c("right", "bottom"),gp=gpar(cex= 0.7, col=grey(.5)))
Run Code Online (Sandbox Code Playgroud)

但是我收到错误"as.data.frame.default(x [[i]]中的错误,可选= TRUE,stringsAsFactors = stringsAsFactors):不能将类c("unit.arithmetic","unit")强制转换为data.frame".

pdf r ggplot2

11
推荐指数
2
解决办法
5716
查看次数

如何使用ggplot2在条形图上覆盖一条线?

我正在寻找一种绘制包含两个不同系列的条形图的方法,隐藏其中一个系列的条形图,而是有一条线(如果可能的话,光滑)穿过隐藏系列的条形顶部(类似于如何在直方图上叠加频率多项式).我试过下面的例子,但似乎遇到了两个问题.

首先,我需要按组总结(总计)数据,其次,我想将其中一个系列(df2)转换为一行.

df <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,1,2,2,3,3))  
df2 <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,4,3,5,1,2))  
ggplot(df, aes(x=grp, y=val)) +   
    geom_bar(stat="identity", alpha=0.75) +  
    geom_bar(data=df2, aes(x=grp, y=val), stat="identity", position="dodge")
Run Code Online (Sandbox Code Playgroud)

r ggplot2

11
推荐指数
2
解决办法
5万
查看次数

如何更改单个facet_wrap面板的格式?

是否有可能改变单个分面图的格式?例如,使用下面的示例代码,可以更改cyl = 8图表的标题或背景颜色吗?

library(ggplot2)
ggplot(mtcars, aes(x=gear)) + 
  geom_bar(aes(y=gear), stat="identity", position="dodge") +
  facet_wrap(~cyl)
Run Code Online (Sandbox Code Playgroud)

r ggplot2

10
推荐指数
2
解决办法
4963
查看次数

使用pyodbc和SQL Server的SQL IN运算符

我正在使用pyodbc查询SQL Server数据库

import datetime
import pyodbc    
conn = pyodbc.connect("Driver={SQL Server};Server='dbserver',Database='db',
                       TrustedConnection=Yes")
cursor = conn.cursor()
ratings = ("PG-13", "PG", "G")
st_dt = datetime(2010, 1, 1)
end_dt = datetime(2010, 12, 31)
cursor.execute("""Select title, director, producer From movies 
                Where rating In ? And release_dt Between ? And ?""", 
                ratings, str(st_dt), str(end_dt))
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误.元组参数是否需要以不同的方式处理?有没有更好的方法来构建此查询?

('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Line 9: 
  Incorrect syntax near '@P1'. (170) (SQLExecDirectW); 
  [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]
  Statement(s) could not be prepared. (8180)")
Run Code Online (Sandbox Code Playgroud)

更新:

我能够使用字符串格式化运算符使这个查询工作,这不是理想的,因为它引入了安全性问题.

import datetime
import …
Run Code Online (Sandbox Code Playgroud)

python sql pyodbc

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

使用rollends滚动data.table

roll=-Inf在定义时遇到了麻烦rollends=FALSE.如果rollends未设置或设置为TRUE,则会看到预期结果.我将不胜感激任何建议.

library(data.table)

dt1 = data.table(Date=seq(from=as.Date("2013-01-03"),
                          to=as.Date("2013-06-27"), by="1 week"),
                 key="Date")[, ind:=.I]
dt2 = data.table(Date=seq(from=as.Date("2013-01-01"),
                          to=as.Date("2013-06-30"), by="1 day"),
                 key="Date")
Run Code Online (Sandbox Code Playgroud)

我希望在下面的输出中看到2013-01-052013-06-26填充.

dt1[dt2, roll=-Inf, rollends=FALSE]
           Date ind
  1: 2013-01-01  NA
  2: 2013-01-02  NA
  3: 2013-01-03   1
  4: 2013-01-04   2
  5: 2013-01-05  NA
 ---               
177: 2013-06-26  NA
178: 2013-06-27  26
179: 2013-06-28  NA
180: 2013-06-29  NA
181: 2013-06-30  NA
Run Code Online (Sandbox Code Playgroud)

这是按预期工作的,ind数据是前滚的,但不是在定义的端点之外dt1 data.table.

dt1[dt2, roll=-Inf]
           Date ind
  1: 2013-01-01   1
  2: …
Run Code Online (Sandbox Code Playgroud)

r data.table

8
推荐指数
1
解决办法
1425
查看次数

data.table roll ="nearest"返回多个结果

我试图用来data.table匹配向量中最接近的十进制值,但遇到的情况是返回多个结果.下面的简化示例返回两个值,0.1818182 0.2727273但是使用不太精确的值x(例如0.0275)返回单个match(0.1818182).

x = 0.0275016249293408
dt = data.table(rnk = c(0, 0.0909090909090909, 
                        0.181818181818182, 0.272727272727273),
                val = c(0.0233775088495975, 0.0270831481152598, 
                        0.0275016216267234, 0.0275016249293408),
                key="val")
dt[J(x), roll="nearest"][, ifelse(is.na(val), NA_real_, rnk)]
Run Code Online (Sandbox Code Playgroud)

我假设问题与我用于此比较的数值的精度有关.可以用于最近匹配的小数精度是否有限制(即我需要舍入数据点)?有没有更好的方法来完成这个最接近的比赛?

r data.table

7
推荐指数
2
解决办法
2875
查看次数

如何使用ggplot2添加背景网格?

我想将背景网格添加到绘图的中心,然后隐藏标准网格线.网格的角点存储在pts数据框中,我尝试使用geom_tile,但它似乎没有使用指定的点.在此先感谢您的帮助.

library(ggplot2)  
pts <- data.frame(
        x=c(170,170,170,177.5,177.5,177.5,185,185,185), 
        y=c(-35,-25,-15,-35,-25,-15,-35,-25,-15))  
ggplot(quakes, aes(long, lat)) + 
    geom_point(shape = 1) + 
    geom_tile(data=pts,aes(x=x,y=y),fill="transparent",colour="black") +
    opts(
        panel.grid.major=theme_blank(),
        panel.grid.minor=theme_blank()
    )
Run Code Online (Sandbox Code Playgroud)

r ggplot2

6
推荐指数
1
解决办法
5704
查看次数

标签 统计

r ×9

ggplot2 ×7

data.table ×2

pdf ×1

pyodbc ×1

python ×1

sql ×1