我使用PerfomanceAnalytics包中的函数table.CalendarReturns创建了这个数据框(rownames是年份,colnames是几个月):
tabRet
>
gen feb mar apr may jun jul aug sep oct nov dec System
2004 0.0 3.5 2.9 2.0 1.1 -0.4 1.2 3.3 0.9 1.8 3.0 -0.6 20.1
2005 1.6 2.3 -1.2 4.0 0.0 1.6 -1.4 2.4 0.7 2.9 2.9 0.4 17.3
2006 0.8 2.7 0.3 1.4 6.2 -2.6 2.1 2.8 0.5 0.3 0.7 3.1 19.6
2007 1.3 0.1 1.4 0.1 1.6 -1.0 1.0 1.5 -0.7 1.0 1.3 -0.7 7.0
2008 1.4 -1.2 2.2 1.2 -0.3 -0.8 2.2 0.4 1.1 0.1 4.4 -1.3 9.7
2009 4.8 3.2 1.6 3.5 0.7 1.7 2.1 2.2 2.5 1.9 1.5 2.8 32.4
2010 3.5 0.5 0.4 1.3 1.8 3.8 3.7 3.0 1.1 1.2 3.9 3.4 31.2
2011 4.3 2.1 1.6 -0.8 3.9 1.5 4.0 5.4 2.3 2.9 0.2 1.5 33.0
2012 1.1 1.9 -0.1 2.3 1.0 3.6 1.5 0.7 0.0 1.5 1.2 0.5 16.3
2013 0.8 2.5 1.2 1.4 0.0 1.7 2.3 1.7 0.5 0.2 1.3 0.6 15.1
2014 0.1 0.7 0.3 -0.7 1.0 1.0 0.2 0.9 -0.7 2.3 1.4 1.4 8.2
2015 2.3 1.0 1.1 3.1 4.5 -0.7 -0.3 2.3 2.4 0.4 -1.3 1.0 16.7
2016 2.1 2.5 0.9 1.0 0.2 NA NA NA NA NA NA NA 7.0
我想为这些数字的颜色创建一个类似于此的图:ifelse(values< 0,'red','black')
。
我尝试使用addtable2plot函数,来自plotrix包,效果不佳。 关于这个问题的任何提示?提前谢谢你们。
编辑: 我需要这样的东西,但是负数用红色表示:
textplot(Hmisc::format.df(tabRet, na.blank=TRUE, numeric.dollar=FALSE, cdec=rep(1,dim(tabRet)[2])), rmar = 0.8, cmar = 1, max.cex=.9, halign = "center", valign = "center", row.valign="center", wrap.rownames=20, wrap.colnames=10, col.colnames="Darkblue",col.rownames="Darkblue", mar = c(0,0,4,0)+0.1) title(main="Calendar Monthly Returns",col.main="Darkblue", cex.main=1)
答案 0 :(得分:2)
以下是使用geom_tile{ggplot2}
的可重复示例的解决方案:
# load libraries
library(ggplot2)
library(ggthemes)
library(data.table)
library(PerformanceAnalytics)
# load data
data(managers)
df <- as.data.frame(t(table.CalendarReturns(managers[,c(1,7,8)])))
# Convert row names into first column
df <- setDT(df, keep.rownames = TRUE)[]
setnames(df, "rn", "month")
# reshape your data
df2 <- melt(df, id.var = "month")
# Plot
ggplot(df2, aes(x=month, y=variable)) +
geom_tile( fill= "white", color = "white") +
geom_text(aes(label=value, color= value < 0)) +
scale_color_manual(guide=FALSE, values=c("red", "black")) +
theme_pander( ) +
theme(axis.text = element_text(face = "bold")) +
ggtitle("Calendar Monthly Returns")
您也可以选择填充图块而不是文本。
ggplot(df2) +
geom_tile( aes(x=month , y=variable, fill= value < 0), color = "gray70", alpha = 0.7) +
scale_fill_manual(guide=FALSE, values=c("red", "black")) +
theme_pander()
无论如何,这个答案提供了ggplot
中条件颜色的一般方法。
ggplot(mtcars, aes(wt, mpg)) +
geom_point( aes(color= ifelse(mpg > 20, "A", "B")) ) +
scale_color_manual(guide=FALSE, values=c("red", "black"))
您也可以使用base
:
plot(mtcars$wt, mtcars$mpg,
col=ifelse( mtcars$mpg > 20 ,"red", "black") )
答案 1 :(得分:2)
只需在col.data=ifelse(tabRet<0,'red','black'),
之后将col.rownames="Darkblue",
添加到您的代码
答案 2 :(得分:0)
如果您正在寻找:
require(tidyr)
require(ggplot2)
d<-data.table(gen=seq(2004,2016,1),Jan=round(rnorm(13)),Feb=round(rnorm(13)),Mar=round(rnorm(13)))
gd<-gather(d,key=gen)
gd$col<-ifelse(gd$value<0.5,"1","0")
ggplot(data=gd,aes(x=gen,y=value,color=col))+geom_tile(aes(fill=col))+
scale_fill_manual(values=c("red","black"))
答案 3 :(得分:0)
我不知道我是否找到了解决方案,我希望这段代码可以为您服务此代码接收一个data.frame并将其转换为条件格式,单元格的值显示在列中
[Data i a data.frame][1] [1]:https://i.stack.imgur.com/jETa8.png
pmensual <- readXL("D:precipitacion mensual
2021/Base de Datos Precipitación mensual .xls",
rownames=FALSE, header=TRUE, na="", sheet="Preci_mes",
stringsAsFactors=TRUE)
nba.m <- melt(pmensual)
nba.s <- ddply(nba.m, .(variable), transform)
ggplot(nba.s, aes(variable, Nombre)) +
geom_tile(aes(fill = value), colour = "white") +
#scale_colour_gradientn(colours = c("blue", "green", "red"))+
scale_fill_gradient2(low = "white", high = "red", mid = "blue", midpoint = 400) +
geom_text(aes(label = round(value, 1)), size= 3.5, vjust = 0.4)+
scale_x_discrete("Mes", expand = c(0, 0)) +
scale_y_discrete("Estaciones", expand = c(0, 0)) +
theme( legend.position="bottom", legend.title=element_text(), panel.background =
element_rect(fill = "white", colour = "gray"),
panel.grid.major = element_line(colour = "gray"))+
labs(title = "Mapa de Calor Precipitaciones en la zona de Estudio",
subtitle = "Precipitacion Acumulada al mes" , fill = "Precipitacion mm" )
[结果][2] [2]:https://i.stack.imgur.com/FVYV4.png