我正在用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) 我已经看到了类似的问题,但我想直接问我的具体问题:
我有一个散点图,其中"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()与任意转换等.一般来说,更明确的例子将是有用的.
在此先感谢您的时间.
我正在使用该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?
提前致谢.
以下代码:
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时,我经常对在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().
我想知道:
dplyr?也许有一个哈德利批准的动词操作(如变异,安排等),我不知道.我知道这很容易summarise(),但我经常需要将这些摘要放回data.frame中.