小编isD*_*otR的帖子

带有ggplot2的盒装geom_text

我正在用ggplot2开发一个图形,其中我需要在其他图形元素上叠加文本.根据文本底层元素的颜色,可能难以阅读文本.有没有办法在具有半透明背景的边界框中绘制geom_text?

我可以用plotrix做到这一点:

library(plotrix)
Labels <- c("Alabama", "Alaska", "Arizona", "Arkansas")
SampleFrame <- data.frame(X = 1:10, Y = 1:10)
TextFrame <- data.frame(X = 4:7, Y = 4:7, LAB = Labels)
### plotrix ###
plot(SampleFrame, pch = 20, cex = 20)
boxed.labels(TextFrame$X, TextFrame$Y, TextFrame$LAB,
 bg = "#ffffff99", border = FALSE,
 xpad = 3/2, ypad = 3/2)
Run Code Online (Sandbox Code Playgroud)

但我不知道用ggplot2获得类似结果的方法:

### ggplot2 ###
library(ggplot2)
Plot <- ggplot(data = SampleFrame,
 aes(x = X, y = Y)) + geom_point(size = 20)
Plot <- Plot + geom_text(data = TextFrame, …
Run Code Online (Sandbox Code Playgroud)

text r ggplot2

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

转换颜色比例,但与ggplot2保持一个很好的传奇

我已经看到了类似的问题,但我想直接问我的具体问题:

我有一个散点图,其中"z"变量编码为色标:

library(ggplot2)
myData <- data.frame(x = rnorm(1000),
                     y = rnorm(1000))
myData$z <- with(myData, x * y)

badVersion <- ggplot(myData,
              aes(x = x, y = y, colour = z))
badVersion <- badVersion + geom_point()
print(badVersion)
Run Code Online (Sandbox Code Playgroud)

产生这个: 糟糕的版本

正如您所看到的,由于"z"变量是正态分布的,因此很少有点用分布的"极端"颜色着色.这是应该的,但我有兴趣强调差异.一种方法是使用:

betterVersion <- ggplot(myData,
                        aes(x = x, y = y, colour = rank(z)))
betterVersion <- betterVersion + geom_point()
print(betterVersion)
Run Code Online (Sandbox Code Playgroud)

产生这个: 更好的版本

通过将rank()应用于"z"变量,我更加强调"z"变量中的微小差异.可以想象在这里使用任何转换,而不是排名,但你明白了.

我的问题基本上是,以最简单的方式,或最"真正的ggplot2"方式,以原始单位(z的单位,而不是z的等级)获得一个图例,同时保持转换后的版本有色点?

我有一种感觉,它以某种方式使用rescaler(),但我不清楚如何使用rescaler()与任意转换等.一般来说,更明确的例子将是有用的.

在此先感谢您的时间.

r ggplot2

15
推荐指数
1
解决办法
1621
查看次数

直接从URL加载PNG文件

我正在使用该png程序包将PNG加载为光栅图像,然后绘制它们.PNG来自在线资源,即维基百科.我可以得到以下工作:

library(png)

pngURL <- "http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Afghanistan.svg/150px-Flag_of_Afghanistan.svg.png"

# Works:
download.file(pngURL, "temp.png", mode = "wb")
localPNG <- readPNG("temp.png")
plot(1)
rasterImage(localPNG, 0.8, 0.8, 1.2, 1.2)
Run Code Online (Sandbox Code Playgroud)

但是,不是用于download.file()在本地存储PNG ,而是重新加载它,最好直接从URL加载PNG.但是,这不起作用:

# Does not work:
internetPNG <- readPNG(pngURL)
Run Code Online (Sandbox Code Playgroud)

因为它导致

Error in readPNG(pngURL) : 
  unable to open http://upload.wikimedia.org/wiki...
Run Code Online (Sandbox Code Playgroud)

有没有人建议如何使这个工作,或者是否有特殊原因R不会从URL加载此PNG?

提前致谢.

png r

15
推荐指数
1
解决办法
3448
查看次数

使用ggplot2中的geom_violin将统计信息传递给geoms

以下代码:

library(ggplot2)
theData <- data.frame(category <- sample(LETTERS[1:3], 1000, replace = T),
                  value <- rnorm(1000))
thePlot <- ggplot(theData,
              aes(x = category, y = value))
thePlot <- thePlot + geom_violin(fill = "BLACK")
thePlot <- thePlot + coord_flip()
print(thePlot)
Run Code Online (Sandbox Code Playgroud)

会产生这个情节:

小提琴情节的例子

但是我希望达到这样的效果,即在较不密集的区域中每个小提琴密度的填充(和理想的颜色)的α值减小.也就是说,小提琴形状逐渐消失在曲线高度较小的背景中,但是在曲线高的地方是暗的和不透明的.像这种效果的东西:

阿尔法淡出的例子

不幸的是,这些系数图是通过使用非常丑陋的黑客产生的,并且考虑到新geom_violin的灵活性,我想知道是否有一种直接的方法来实现这种使用geom_violin的alpha淡入淡出.

感谢您提供的任何见解!

r ggplot2

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

按组"拉伸"跨行的汇总值

在使用R时,我经常对在data.frame上执行操作感兴趣,其中我通过组汇总变量,然后想要将这些汇总值添加回data.frame.这最容易通过示例显示:

myDF <- data.frame(A = runif(5), B = c("A", "A", "A", "B", "B"))
myDF$Total <- with(myDF, by(A, B, sum))[myDF$B]
myDF$Proportion <- with(myDF, A / Total)
Run Code Online (Sandbox Code Playgroud)

产生:

          A B     Total Proportion
1 0.5272734 A 1.7186369  0.3067975
2 0.5105128 A 1.7186369  0.2970452
3 0.6808507 A 1.7186369  0.3961574
4 0.2892025 B 0.6667133  0.4337734
5 0.3775108 B 0.6667133  0.5662266
Run Code Online (Sandbox Code Playgroud)

这一招-基本得到指定值的矢量和"传播"或跨组相关行"拉伸"他们-一般的作品,虽然class(myDF$Total)"array"除非我把by()的内部c().

我想知道:

  1. 这个操作有一个常用名称吗?
  2. 还有另外一种,不那么hacky的感觉,和/或更快的方式吗?
  3. 有没有办法做到这一点dplyr?也许有一个哈德利批准的动词操作(如变异,安排等),我不知道.我知道这很容易summarise(),但我经常需要将这些摘要放回data.frame中.

r dplyr data.table

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

标签 统计

r ×5

ggplot2 ×3

data.table ×1

dplyr ×1

png ×1

text ×1