ggplot的图层语法给了使用者无限种可能,再配合上自己对于数据操纵的灵活把控,真的不知道ggplot可以给我们呈现出什么的惊艳作品。
这不,清明假期无聊的我,用ggplot搞定了太极阴阳图。
library("ggplot2") library(Cairo) library(ggmap)
本文太极图的构造理念相当简单,取笛卡尔坐标系的0点为圆心,其他 所有元素都是围绕零点圆心的坐标构成。
以下是数据构造过程:
bigcirclex<-seq(from=-1000,to=1000,length=10000) bigcirclex<-c(bigcirclex,rev(bigcirclex)) 太极图X轴横坐标
bigcircley<-c(sqrt(1000000-bigcirclex^2),-sqrt(1000000-bigcirclex^2)) #Y轴纵坐标 这里的
upcirclex<-bigcirclex[1:10000] upcircley<-bigcircley[1:10000] downcirclex<-bigcirclex[1:10000] downcircley<--bigcircley[1:10000] 上下次半圆的横纵坐标
左右小圆的横纵坐标 leftcirlex<-seq(from=-1000,to=0,length=1000) leftcirley<-sqrt(250000-(leftcirlex+500)^2) rightcirclex<-seq(from=0,to=1000,length=1000) rightcircley<-sqrt(250000-(rightcirclex-500)^2)
作图函数:
setwd("F:/数据可视化/R/R语言学习笔记/可视化/ggplot2/商务图表") CairoPNG(file="taiji.png",width=1000,height=1000) ggplot(data=NULL)+ geom_area(aes(upcirclex,upcircley),fill="white",col=NA)+ geom_area(aes(downcirclex,downcircley),fill="black",col=NA)+ geom_area(aes(leftcirlex,-leftcirley),fill="white",col=NA)+ geom_area(aes(rightcirclex,rightcircley),fill="black",col=NA)+ coord_flip()+ annotate("text",x=-500,y=0,label="●", color= "black", size=80)+ annotate("text",x=500,y=0,label="●", color= "white", size=80)+ geom_path(aes(bigcirclex,bigcircley),col="grey60")+ theme_nothing() dev.off()