我在尝试着
在gglot图例标签内.
我已经尝试了几种方法,但我似乎无法将我读到的所有技巧结合起来.
我可以通过插入\n标签来获得换行符,但这似乎不适用于希腊字母,而不适用于图例标签.或者我可以在基础图中通过组合mtext()和bquote()插入一段文本(EDIT)来设置换行符和希腊字母,但正如Gregor在评论部分中指出的那样,这不起作用ggplot.下面我结合list使用paste0()to将文本传递给图例标签:问题是我找不到插入希腊字母的方法,例如gamma.
感谢你的建议.
这是我的一次尝试的MWE (编辑:改进的MWE):
label1.line1 <- "Not much to say about this one"
label2.line1 <- "blabla blabla, blabla blabla, blee blee blee (bling, bling, bling),"
label2.line2 <- paste0("(", "1900-2014: g = 1.50%, gamma = 2.75%, and r = 2.30%",")")
label3.line1 <- "blabla blabla, blabla blabla, blee blee blee (bling, bling, bling),"
label3.line2 <- paste0("(", "1900-2014: g = 2.50%, …Run Code Online (Sandbox Code Playgroud) 你们中的一些人可能已经看过我关于这个主题的博客文章,在我想要帮助一个朋友在图表上生成半满的圆圈之后我编写了以下代码:
TestUnicode <- function(start="25a0", end="25ff", ...)
{
nstart <- as.hexmode(start)
nend <- as.hexmode(end)
r <- nstart:nend
s <- ceiling(sqrt(length(r)))
par(pty="s")
plot(c(-1,(s)), c(-1,(s)), type="n", xlab="", ylab="",
xaxs="i", yaxs="i")
grid(s+1, s+1, lty=1)
for(i in seq(r)) {
try(points(i%%s, i%/%s, pch=-1*r[i],...))
}
}
TestUnicode(9500,9900)
Run Code Online (Sandbox Code Playgroud)
这是有效的(即产生一个几乎完整的酷dingbatty符号网格):
它没有不同程度(即产生部分或完全填充点或空矩形的网格),无论是静默还是警告:
例如,尝试所有可用的PDF字体系列:
flist <- c("AvantGarde", "Bookman","Courier", "Helvetica", "Helvetica-Narrow",
"NewCenturySchoolbook", "Palatino", "Times","URWGothic",
"URWBookman", "NimbusMon", "NimbusSan", "NimbusSanCond",
"CenturySch", "URWPalladio","NimbusRom")
for (f in flist) {
fn <- paste("utest_",f,".pdf",sep="")
pdf(fn,family=f)
TestUnicode()
title(main=f) …Run Code Online (Sandbox Code Playgroud) 我可以在ggplot注释中使用标记吗?
比方说,我有这个图:
p <- function(i) 8*i
a <- function(i) 1+4*i*(i-1)
library(ggplot2)
library(reshape2)
i <- 1:(8*365/7)
d <- data.frame(i=i,p=p(i),a=sapply(i,a))
d <- melt(d, id.vars='i')
p <- ggplot(d, aes(i, value, linetype=variable)) +
geom_hline(yintercept=700^2) +
geom_line() +
scale_linetype_manual(values=c(2,1)) +
#geom_point() +
scale_x_continuous(breaks=(0:20)*365/7, labels=0:20) +
#scale_y_continuous(breaks=c(0,700^2), labels=c(0,expression(L^2)))
scale_y_sqrt() +
#scale_y_log10() +
annotate('text', 8*365/7, 1e3, label="P(i)=8i", hjust=1, size=3) +
annotate('text', 8*365/7, 2.5e5, label="A(i)=1+4i(i-1)", hjust=1, size=3)
print(p + theme_classic())
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用fontface = 3并将所有内容都放在斜体中.但我不希望数字用斜体,只有变量i.优选地,P并且A将不被以斜体为好.
有任何想法吗?
我知道在 Linux 或 Mac 上的 R 中,字体始终被定义为参数 family="Charis SIL" 到 par()、text() 或图形设备函数之一,如 tiff()、svg() 等(用您想要的任何字体名称替换“Charis SIL”)。我也知道在 Windows 上,它只适用于 cairo_pdf() 和 svg() 设备;jpeg()、tiff()、png() 和 bmp() 等光栅图形设备要求首先将字体映射到“Windows 字体数据库”中:
# this doesn't work on windows
jpeg(filename='test1.jpg', family='Charis SIL')
plot(0,0,type='n',ann=FALSE,frame.plot=FALSE)
text(0,0,labels='iyeø?œa???æ?????o?u???????????')
dev.off()
# (gives warnings: Font family not found in Windows font database)
# this does work on windows (assuming you have the Charis SIL font installed)
windowsFonts(myCustomWindowsFontName=windowsFont('Charis SIL'))
jpeg(filename='test2.jpg', family='myCustomWindowsFontName')
plot(0,0,type='n',ann=FALSE,frame.plot=FALSE)
text(0,0,labels='iyeø?œa???æ?????o?u???????????')
dev.off()
Run Code Online (Sandbox Code Playgroud)
pdf() 设备仍然不同:它似乎需要在 postscriptFonts() 和/或 pdfFonts() 数据库中定义的字体,这意味着只有 Type1 字体:
# this doesn't …Run Code Online (Sandbox Code Playgroud) 我需要标记我的y轴,以便它首先显示"Power"一词,然后是方括号中的表达式:[micro Volt square].
我可以生成我想要的整个标签的单个部分,但是当我想要将它们组合时我会遇到问题:
x <- 1:10; y <- 10:1; z <- data.frame(x,y)
g <- ggplot(z, aes(x,y) + geom_bar(stat='identity')
g + ylab('Power') # No problem
g + ylab(paste('Power [', ']')) #No problem
g + ylab(expression(mu)) # No problem
g + ylab(expression(V^2)) # No problem
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不可能:
g + ylab(paste('Power [', expression(mu), expression(V^2), ']'))
Run Code Online (Sandbox Code Playgroud)
输出不评估表达式(mu和V ^ 2):
我哪里错了?paste()命令一般是错误的方法吗?我还看了一下unicode字符(ggplot2 PDF输出中的Unicode字符)......但是这仍然会让我想到如何充分结合所有单个术语.
非常感谢您的帮助!
我希望在我的绘图中出现Unicode字符,作为混合字符串的一部分,例如?=0.84将0.84保存在变量中,比方说cor.value.
这实际上排除了诸如expression或bquote(这里建议)的解决方案.我不知道它们是否会单独工作,但试图将它们与变量值相结合paste是一个问题.我能让它工作的唯一方法是在我的源代码中实际使用unicode符号.它甚至出现在R Studio的情节中.
但是当我试图打印时,我只是..改为.到目前为止,我发现的唯一建议是使用开罗,但开罗正在破坏我的剩余情节,所以我想坚持使用原始的pdf设备.
有没有机会,通过使用Unicode或其他东西,在字幕中打印字符串,但不必使用开罗?
这是开罗所做的一个例子(这应该是图的一角,带有灰色边框):
部分点被切断,没有被剪裁.因此,当它与边框重叠时,边框略微偏移,并且点"透过"边框(此处您只在底部看到它,在其他地方它更明显).底部和右侧边框比左边和上边框更粗.点背后非常浅灰色的带子在开罗更为宽广.标准PDF设备中不存在这些问题.
我目前正在研究Fedora 21系统,但是这个文档也必须在Windows 8或10上编译,最好也在其他Linux版本上编译.
这是绘图的代码(打算以小尺寸观看,大约2x1.5英寸).当前的计划是将文本放在c.a变量中并将其放在轴标签所在的位置,但我希望保持我的选项打开以使其成为后面的注释:
offset.plotdata <- data.frame(understandability=c(2.95, 0.85, 0.75, 1.15, 2.25, 2.05, 1.95, 2.15, 2.25, 0.75, 2.05, 0.85), lowercase.pseudonym=c("A", "B", "C", "D", "E", "F", "A", "D", "E", "C", "F", "B"), questionnaire=c(rep("pre", 6), rep("post", 6)))
offset.plotdata$decorative.points <- c(1,2,3,4,5,NA,1,2,3,4,5,NA)
middle.blue <- "#2186D9"
variable.name <- "understandability"
cor.value <- 0.84
c.a <- "rho = 0.84"
ggplot(offset.plotdata,
aes_string(x="questionnaire", y=variable.name,
group="lowercase.pseudonym"))+ …Run Code Online (Sandbox Code Playgroud) 随着ggplot::geom_point我们能够设置使用绘图符号的任意字符scale_shape_manual.我将举例说明目的:使用三角形在每个单元格中创建一个具有两个值的热图:
require(ggplot2)
data <- data.frame(
val = rnorm(40),
grp = c(rep('a', 20), rep('b', 20)),
x = rep(letters[1:4], 5),
y = rep(letters[1:5], 4)
)
p <- ggplot(data, aes(x = x, y = y, color = val, shape = grp)) +
geom_point(size = 18) +
scale_shape_manual(values=c("\u25E4","\u25E2")) +
theme_minimal() +
theme(panel.grid = element_blank())
ggsave('triangle-tiles.pdf', device = cairo_pdf, width = 4.1, height = 3.5)
Run Code Online (Sandbox Code Playgroud)
如果用于符号的字体具有这些特殊字符,则此方法可以正常工作.否则显然是失败的.我知道我们可以明确地定义字体并获得相同的结果geom_text:
require(dplyr)
data <- data %>% mutate(sym = ifelse(grp == 'a', "\u25E4", "\u25E2"))
p …Run Code Online (Sandbox Code Playgroud) 我在使用knitr在Sweave中使用R studio生成的LaTeX报告中正确显示由ggplot2生成的图中的字体时出现问题.
起初我无法使用波兰字体正确生成pdf,但是在这篇文章中解决了这个问题:
简而言之,作者建议使用Cairo包(在R中)使用ggplot2生成图.
这对我有用 - 一次 - >意味着我能够生成一个带有波兰字符的情节,但是当我尝试在sweave文档中使用它来使用这样的knitr生成LaTeX报告时:
<<pieniadze_graph,fig=TRUE,echo=FALSE>>=
library(Cairo)
cairo_pdf("TutorialExercisesPart2-pieniadze_graph.pdf")
plot1 <- qplot(expenditure, data = cas) + xlim(0, 8000) +
xlab(expression(paste("Pieni?dze wydane na ucznia ($)"))) +
ylab("Liczba szkó??????")
print(plot1)
@
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
Running pdflatex on TutorialExercisesPart2.tex...failed
Run Code Online (Sandbox Code Playgroud)
在调查发生的同时 - >我发现cairo生成的文件是空白的(有一个给cairo_pdf命名的pdf文件但是无法用pdf查看器打开 - >错误无法打开文本文件)
现在需要注意一点:cairo_pdf函数需要设置文件名.所以我给pdf一个名字,需要稍后由tex文件使用,格式为filename-chunk_name.pdf(动态报告非常多:P)
所以我不是cairo_pdf选项.有没有办法在没有cairo_pdf选项的情况下生成正确的pdf文件?
没有cairo-pdf,我无法在这个主题上找到更多...
当我删除cairo部分时,我的tex文件很好地生成了一个丑陋的点标签PDF文件...


欧元符号€显示为...PDF输出
ggplot() + theme_bw() + geom_line() + scale_y_continuous(formatter = "euro")
Run Code Online (Sandbox Code Playgroud)