标签: r-grid

R中的信息仪表板与ggplot2

我正在寻找创建一个可在Web浏览器中查看的静态仪表板.而且我想创建像Stephen Few在他的书" 信息仪表板设计"中所做的那样的事情.(见底部示例)

  1. Ggplot2:不应该是产生下图的任何问题,对吧?
  2. 仪表板布局:网格是否合适?或者我应该在html/css中列出一些东西?

如果网格可以很容易地做到这一点,你知道有什么好的资源来学习如何使用它吗?我已经阅读了手册,但我发现它没有太大帮助.我见过LearnR博客的ggplot2销售仪表板(它使用网格),我无法理解网格和布局部分内容.

dasboard示例http://img251.imageshack.us/img251/1029/fewciodashboard800.png

dashboard r ggplot2 r-grid

15
推荐指数
2
解决办法
7443
查看次数

如何使用grImport导入的图形作为ggplot2中的轴刻度标签(使用网格函数)?

我希望我可以将漂亮的导入和绘图功能grImport与令人敬畏的图形功能相结合ggplot2,但我根本不理解grid系统,以找到实现我想要的优雅方式.我想要的是用ggplot2图表导入的图像替换图表中的x轴刻度标签grImport.

由于两个软件包都使用grid函数,我希望有一种方法grid.symbols()可以在ggplot2框架内使用,这是理想的,或者至少在设备中的现有图上使用.知道这些事情的人是否知道这样做的有效方法?或者,任何人都可以向我指出更多信息,以帮助我了解grobs,视口等?我已经阅读了关于Grid图形模型的Paul Murrel的R图形书免费章节,但是我对ggplot2的内部工作原理并不熟悉,无法建立链接.

我的问题非常类似于使用图像作为绘图点的现有问题,尽管我对轴标签而不是绘图点更感兴趣.但是,我很好奇两个任务的相似程度,以及是否可以为此目的调整该解决方案.我无法自己解决这个问题.

这是我的第一篇文章,所以我不允许发布图像,但是这段代码实现了我想要的东西.注意:这种方法使用了一种丑陋,丑陋的黑客,它不便携,而且不尽如人意.我想要生成的最终绘图将具有facets(facet_grid),并且x轴用于在每个轴刻度处具有不同图片的因子,而不是连续变量,这就是为什么我正在寻找更一般/更强大的解决方案不需要大量的试验和错误.

library(ggplot2)
## library(grImport)  # not needed for this example, but would be for grid.symbols()

p <- ggplot(mtcars, aes(cyl, mpg)) + stat_summary(fun.data = "mean_cl_boot")
print(p)

## Replace (in this case, overlay) x-axis tick labels with a graphic / grob
iconSize  <- 0.05
iconHt    <- 0.2 
padding   <- 0.09    # horizontal …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 axis-labels r-grid

14
推荐指数
3
解决办法
2068
查看次数

R使用viewPorts将数据表添加到ggplot图:缩放Grob

我正在尝试将数据表添加到ggplot中创建的图形中(类似于excel功能,但可以灵活地将轴更改为on)

我已经做了一些事情,并继续遇到缩放的问题所以尝试1)

library(grid)
library(gridExtra)
library(ggplot2)
xta=data.frame(f=rnorm(37,mean=400,sd=50))
xta$n=0
for(i in 1:37){xta$n[i]<-paste(sample(letters,4),collapse='')}
xta$c=0
for(i in 1:37){xta$c[i]<-sample((1:6),1)}
rect=data.frame(xmi=seq(0.5,36.5,1),xma=seq(1.5,37.5,1),ymi=0,yma=10)
xta=cbind(xta,rect)
a = ggplot(data=xta,aes(x=n,y=f,fill=c)) + geom_bar(stat='identity')
b = ggplot(data=xta,aes(x=n,y=5,label=round(f,1))) + geom_text(size=4) + geom_rect(aes(xmin=xmi,xmax=xma,ymin=ymi,ymax=yma),alpha=0,color='black')
z = theme(axis.text=element_blank(),panel.background=element_rect(fill='white'),axis.ticks=element_blank(),axis.title=element_blank())
b=b+z
la=grid.layout(nrow=2,ncol=1,heights=c(0.15,2),default.units=c('null','null'))
grid.show.layout(la)
grid.newpage()
pushViewport(viewport(layout=la))
print(a,vp=viewport(layout.pos.row=2,layout.pos.col=1))
print(b,vp=viewport(layout.pos.row=1,layout.pos.col=1))
Run Code Online (Sandbox Code Playgroud)

哪个产生了

2 ggplots

第二次尝试2)

xta1=data.frame(t(round(xta$f,1)))
xtb=tableGrob(xta1,show.rownames=F,show.colnames=F,show.vlines=T,gpar.corefill=gpar(fill='white',col='black'),gp=gpar(fontsize=12),vp=viewport(layout.pos.row=1,layout.pos.col=1))
grid.newpage()
la=grid.layout(nrow=2,ncol=1,heights=c(0.15,2),default.units=c('null','null'))
grid.show.layout(la)
grid.newpage()
pushViewport(viewport(layout=la))
print(a,vp=viewport(layout.pos.row=2,layout.pos.col=1))
grid.draw(xtb)
Run Code Online (Sandbox Code Playgroud)

哪个产生了

使用直表grob和grid.draw

最后3)是

grid.newpage()
print(a + annotation_custom(grob=xtb,xmin=0,xmax=37,ymin=450,ymax=460))
Run Code Online (Sandbox Code Playgroud)

哪个产生了

使用annotate_custom

其中选项2将是最好的,如果我可以将tableGrob缩放到与绘图相同的大小,但我不知道如何做到这一点.关于如何进一步采取行动的任何指示?- 谢谢

r viewport ggplot2 gridextra r-grid

13
推荐指数
2
解决办法
8710
查看次数

指定ggplot2面板宽度

我在同一页面上有两个ggplots,我希望它们的面板宽度相同.

一些样本数据:

dfr1 <- data.frame(
  time = 1:10,
  value = runif(10)  
)

dfr2 <- data.frame(
  time = 1:10,
  value = runif(10, 1000, 1001)  
)
Run Code Online (Sandbox Code Playgroud)

一个低于另一个的情节:

p1 <- ggplot(dfr1, aes(time, value)) + geom_line()
p2 <- ggplot(dfr2, aes(time, value)) + geom_line()

grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))   
print(p1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))         
print(p2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
Run Code Online (Sandbox Code Playgroud)

如何指定每个图中的面板宽度和位置,以使它们对齐?

(我不想将图表与刻面结合起来;这在我的实际例子中是不合适的.)

r ggplot2 r-grid

12
推荐指数
1
解决办法
6235
查看次数

ggplot2:对齐不同间距的多个图并在它们之间添加箭头

我有6个图,我想以两步的方式整齐地排列(见图).最好,我想添加漂亮的箭头.

有任何想法吗?


UPD.当我的问题开始收集负面反馈时,我想澄清一下,我已经检查了所有(部分)相关的问题,并没有发现如何在"画布"上自由定位ggplots.而且,我想不出在绘图之间绘制箭头的单一方法.我不是要求现成的解决方案.请指出方向.

在此输入图像描述

r ggplot2 r-grid

12
推荐指数
1
解决办法
967
查看次数

如何在legend和plotarea之外注释ggplot2 qplot?(类似于mtext())

我想用文件名注释我的情节.随plot()我用过mtext:

plot(1:10)
mtext("File xy-12-34-56.csv", 4)
Run Code Online (Sandbox Code Playgroud)

我怎么能用ggplot2和qplot或ggplot来做到这一点?它不应该与传说相撞.我发现的命令annotategrid,但我不能让类似的注释mtext与这些.

作为一种解决方法,我可以尝试水印,但也许你对我有一个很好的暗示.亲切的问候,乔纳斯

r annotate ggplot2 r-grid

11
推荐指数
1
解决办法
4411
查看次数

在同一页面上排列基础图和grid.tables

我有两个图(使用基本图形创建)和2个数据框,我想将它们组合到PDF中的一个工作表上.我正在使用grid.table从我的数据框创建一个tableGrobs.我在格式化PDF输出时遇到了很多困难.特别是,我没有成功将所有对象保存在同一页面上.我希望右侧面板包含一个图形,左侧面板包含另一个图形,下面有2个表格(横向格式).

目前我的代码如下:

library('gridExtra')

pdf("Rplots.pdf", paper = "USr", height = 8.5, width = 11)

layout(matrix(c(1,3, 2,3, 4,3), nrow = 3, ncol = 2, byrow = TRUE))

plot(myPlot1)    
grid.table(df1)    
plot(myPlot2)
grid.table(df2)

dev.off()
Run Code Online (Sandbox Code Playgroud)

希望使用GGPLOT2.

pdf r r-grid

11
推荐指数
1
解决办法
7981
查看次数

如何在ggplot2地图上绘制条形图

我也发现了类似的答案像这样的问题,但大部分都是使用包rworldmap,ggmap,ggsubplotgeom_subplot2d.例如,在此处此处查看.

我想知道如何将其他ggplot对象(如条形图)绘制到地图上,这是从shapefile创建的.我正在使用的那个可以在这里下载.

编辑

正如@beetroot正确指出的那样,可以在上面发布的链接下下载的新文件发生了显着变化.因此,调整shapefile等的名称.

library(rgdal)
library(ggplot2)
library(rgeos)
library(maptools)

map.det<- readOGR(dsn="<path to your directory>/swissBOUNDARIES3D100216/swissBOUNDARIES3D/V200/SHAPEFILE_LV03", layer="VECTOR200_KANTONSGEBIET")
map.kt <- map.det[map.det@data$KANTONSNUM=="CH01000000"|map.det@data$KANTONSNUM=="CH19000000",]


#get centroids
map.test.centroids <- gCentroid(map.kt, byid=T)
map.test.centroids <- as.data.frame(map.test.centroids)
map.test.centroids$KANTONSNR <- row.names(map.test.centroids)

#create df for ggplot
kt_geom <- fortify(map.kt, region="KANTONSNUM")

#Plot map
map.test <- ggplot(NULL)+
        geom_polygon(data=kt_geom, aes(long, lat, group=group), fill="white")+
        coord_fixed()+
        geom_path(data=kt_geom, color="gray48", mapping=aes(long, lat, group=group), size=0.2)+
        geom_point(data=map.test.centroids, aes(x=x, y=y), size=9, alpha=6/10)

mapp
Run Code Online (Sandbox Code Playgroud)

这导致了这样的地图.到现在为止还挺好. 在此输入图像描述

但是,我在组合两个地图时遇到了困难map.test,例如地图,例如,这个:

geo_data <- …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra r-grid

11
推荐指数
1
解决办法
4035
查看次数

对于长图例标题,在ggplot2中居中对齐图例标题和图例键

当传奇标题很长时,我很难将传奇中心的标题相对于图例键对齐.一年前有一个问题适用于短标题,但它似乎不适用于长标题.

示例,首先使用简短的图例标题:

library(ggplot2)
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Petal.Width)) + geom_point(size = 3) +
  scale_color_distiller(palette = "YlGn", type = "seq", direction = -1,
                        name = "A") +
  theme(legend.title.align = 0.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

一切都如预期的那样,图例标题位于图例键的上方.

现在和一个长长的传奇标题相同:

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Petal.Width)) + geom_point(size = 3) +
  scale_color_distiller(palette = "YlGn", type = "seq", direction = -1,
                        name = "Long legend heading\nShould be centered") +
  theme(legend.title.align = 0.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我们可以看到文本中心与自身对齐,但与图例键无关.我已经尝试修改其他主题选项,例如legend.justification = "center",但似乎没有人从图例框中最左侧的位置移动键.

几条评论:

  • 我几天前正在运行ggplot2的开发版本,v2.2.1.9000.

  • 我特别需要一个连续色阶调色板的解决方案.

r ggplot2 gtable r-grid

11
推荐指数
3
解决办法
3484
查看次数

尽管线条大小,如何保持线型间距不变

当尺寸不同时,我一直试图在 ggplot2 或网格中绘制线段之间具有相等间距的线。但是我没有成功,所以我向你寻求帮助。

在下面的示例中,如何在线条大小不同的情况下保持线段之间的绝对间距相等?

我想避免使用自定义makeContent.myclass方法来控制自己。

library(ggplot2)
library(grid)

df <- data.frame(
  x = c(1:2, 1:2),
  y = c(1:2, 2:1),
  size = c(1,1,10,10)
)

# In ggplot2
ggplot(df, aes(x, y, size = size, group = size)) +
  geom_line(linetype = 2)
Run Code Online (Sandbox Code Playgroud)

# In grid
lines <- polylineGrob(
  x = scales::rescale(df$x), 
  y = scales::rescale(df$y), 
  id = c(1,1,2,2),
  gp = gpar(lty = 2, lwd = c(1, 10))
)

grid.newpage(); grid.draw(lines)
Run Code Online (Sandbox Code Playgroud)

我想要类似于以下在 illustrator 中制作的东西。请注意,红线段的长度相等。

在此处输入图片说明

有任何想法吗?谢谢阅读!

r ggplot2 r-grid

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

标签 统计

r ×10

r-grid ×10

ggplot2 ×9

gridextra ×2

annotate ×1

axis-labels ×1

dashboard ×1

gtable ×1

pdf ×1

viewport ×1