如何用ggplot如何添加线段2在地图上添加饼图

ggplot2包不像R那样本身自带pie函数,故要用ggplot2包画饼图需要另辟蹊径,好在聪明的数学家们发明了极坐标这种东西,用ρ和θ的组合来确定点的具体坐标,其中ρ表示极径,θ表示极角。(是不是有点印象,感觉年轻的时候无所不知。)ggplot包画饼图的原理挺简单,就好像是把条形图先靠拢,然后从底部缩小,顶部成环。主要的参数也基本一致,初始代码如下:library(ggplot2);library(plyr);#加载相应包data&-data.frame(Type=c(&A&,&B&,&C&,&D&,&E&),Num=c(1:5));#定义数据ggplot(data,aes(x=Type,y=Num,fill=Type))+geom_bar(stat=&identity&);得到下图:由于要使用极坐标,那么x在这里就没必要了,因为最终x是相同的,当然你可以设成1或者其他常量,效果是一样的,这里就设1好了。得到如下代码:ggplot(data,aes(x=1,y=Num,fill=Type))+geom_bar(stat=&identity&)+coord_polar(theta = &y&);这里x设为1,coord_polar函数将θ设为y,表示y参数将表示极角的大小。到这里玩了没?显然没有,看常规y轴的地方,简直惨不忍睹。这里通过theme函数来修正这个问题,包含三个方面:1.坐标轴标题;2.坐标轴标签;3.坐标轴刻度线。相应的名称分别是title,text以及ticks,代码如下:ggplot(data,aes(x=1,y=Num,fill=Type))+geom_bar(stat=&identity&)+coord_polar(theta = &y&)+theme(axis.title=element_blank(),axis.text=element_blank(),axis.ticks=element_blank());相应结果如下:是不是感觉清爽很多,但是你把这个交给老板,估计要被骂死,相应数值和占比呢?好的,马上改。其实这里无非就是个加标签的问题,也就是geom_text()函数,但是这个函数需要设参数,刚才说了,因为x是统一的,这里x就不管了,关键是y,而刚才y也说了,就是极角嘛,标签就放在扇形中间就好了,也就是当前累计值减去当前扇形极角的一般就OK了。而标签就是具体数值+百分比。ggplot(data,aes(x=1,y=Num,fill=Type))+geom_bar(stat=&identity&)+coord_polar(theta = &y&)+theme(axis.title=element_blank(),axis.text=element_blank(),axis.ticks=element_blank())+geom_text(aes(y=cumsum(Num)-Num/2,label=paste(Num,&:&,round(Num/sum(Num)*100,2),&%&)),size=4);得到图形如下:基本上可以了,但不算完美:1,字很拥挤;2,顺序和图例不一致;3.还没加标题。对于1,刚才说了这个是x的原因,将x值也就是极径改大就OK了;对于2,最好是按占比从高到低排序,用arrange函数;对于3,不想说,加呗。data&-arrange(data,-Num);#将数据按Num从高到低排序,需加载plyr包所以最终完整的代码如下:效果图如下:虽然excel可以做出类似的东西,但感觉excel的作图不那么好看,而且代码的好处就是可以重复多次使用,提高工作效率。PS:上一篇文章错别字比较多,非常抱歉。有感兴趣的朋友欢迎讨论。叶印痕(yeyinhen) 
 文章为作者独立观点,不代表大不六文章网立场
yeyinhen叶印痕官方公众号热门文章最新文章yeyinhen叶印痕官方公众号R--ggplot绘制Pie&Chart饼图
values=c(, ,,14241)
labels=c("A","C","B","D","E","F","G","H","I")
#自定义对应颜色显示,这里我自己选用的是circos set3-9配色方案,没有使用ggplot配置的
colours=c("#8dd3c7", "#ffffb3", "#bebada", "#80b1d3", "#fb8072", "#fdb462", "#b3de69", "#d9d9d9", "#fccde5")
#每个数据折算为百分比后的数值(已经带上%号)
percent_str &- paste(round(values/sum(values) * 100,1), "%", sep="")
#建立名为values的matrix
values &- data.frame(Percentage = round(values/sum(values) * 100,1), Type = labels,percent=percent_str )
#绘图第一步,得figure2
pie &- ggplot(values, aes(x = "" ,y = Percentage, fill = Type)) +
geom_bar(width = 3)&
#可以理解为图形扭曲为圆形,从而完成终产品figure1
pie = pie + coord_polar("y")
#清空坐标名优化,并给图注填上题目为“Types”。
pie = pie + xlab('') + ylab('') + labs(fill="Types")
#按指定顺序添加图注并按照你设定的颜色上色
#pie + scale_fill_manual(values = colours)&
#只会得到figure, 图注里是按照字母表顺序排序而非事先指定顺序,这样明显图注与实际情况有严重出入,如figure3
#应该如下行添加labels这列参数
pie + scale_fill_manual(values = colours,labels = labels)
如果想为饼图添加每个百分比,可以加上下面高亮的一句话即可,效果如figureS2。参考自.
pie &- ggplot(values, aes(x = "x_list" ,y = Percentage, fill = Type)) +
geom_bar(width = 3)&+ geom_text(aes(y = sum(val)-(val/2 + c(0, cumsum(val)[-length(val)])), label = percent), size=3)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。后使用快捷导航没有帐号?
查看: 787|回复: 0
ggplot2画饼图除了极坐标变换,有没有更直接的办法?
中级会员, 积分 433, 距离下一级还需 67 积分
论坛徽章:18
ggplot2画饼图除了极坐标变换,有没有更直接的办法?这是用钻石数据集画饼图的一个例子:
& ggplot(diamonds)+geom_histogram(aes(x = &color&,y = ..count..,fill = color),position = &stack&,width = 1)+coord_polar(&y&)+xlab('')+ylab('')+scale_fill_brewer(palette = &Dark2&)复制代码
Rplot.png (7.21 KB)
12:36 上传> ggplot2绘制Excel所有图
基于ggplot2-2.1.0,不定期补充更新,更多的资料请见 。
此文献给熟练EXCEL图表制作的R入门使用者们。
1.用到的包
首先,需要加载做图中可能用到的一些工具包。
library(ggplot2)
library(dplyr)
library(tidyr)
library(splines)
2.数据准备
我们需要一些模拟数据,以作为后续作图的必备元素。
set.seed(123)
df &- data.frame(
var=LETTERS[1:10],
a=runif(10),
b=runif(10),
c=runif(10),
stringsAsFactors = F
3.数据转换
上表是我们在excel中常见的数据集形式,但是在R中,由于作图需要,通常会转换为长数据的形式。
df1 &- df %&% gather("item",value,-1:-2) %&%
bind_cols(data.frame(item_id=rep(1:3,each=10)))
print(df1)
万事俱备后,接下来就可以作图了。 以下图形将严格按照excel 2016版中所有图形的出现顺序,读者可自行对照两者的异同。
一般来说,ggplot的柱形图默认统计方法(stat)是计数(count)的,但是大多时候,我们更习惯于使用统计完成的数据,因此,在相关的图形参数中必须要增加stat=“identity”这一项。
1.簇状柱形图
簇状柱形图的特点是在不同类别中,不同变量的数据是横向排列的,因此需要图形参数中设置position="dodge"
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="dodge",width=0.8)+
labs(title="aaa")
2.堆积柱形图
堆积柱形图的特点是在不同类别中,不同变量的数据是纵向堆积的,因此需要图形参数中设置position=“stack”
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="stack",width=0.8)+
labs(title="aaa")
3.百分比堆积柱形图
百分比堆积柱形图的特点是在不同类别中,不同变量的数据转换为百分比后再纵向堆积,因此需要图形参数中设置position=“fill”
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="fill",width=0.8)+
labs(title="aaa")
4.三维簇状柱形图
ggplot2中,所有作图均为平面图形,不推荐使用3D的呈现形式,因此此处不考虑作图。
5. 三维堆积柱形图
ggplot2中,所有作图均为平面图形,不推荐使用3D的呈现形式,因此此处不考虑作图。
6.三维百分比堆积柱形图
ggplot2中,所有作图均为平面图形,不推荐使用3D的呈现形式,因此此处不考虑作图。
7.三维柱形图——用分面替代
三维柱形图的特定是利用x轴和y轴分别表示两个分类变量,z轴表示具体数值,但是由于3D的遮挡性,所以通常可视化效果欠佳。在ggplot2中,可以用分面(facet_grid)解决这一问题。
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",width=0.8)+
facet_grid(item~.)+
labs(title="aaa")
在ggplot2中,自变量为分类变量的时候是不能使用折线图的,因此,需要将分类变量先转换/标记为数字(一开始df中设置id就是这个用处),然后在标签上使用scale_x_continuous()进行设置后就可以完美解决这一问题。
但是,依然不推荐使用分类变量刻画折线图!!!
折线图特点是每个变量先用散点标记,然后相连。因此全部使用默认参数即可。
ggplot(df1,aes(id,value,colour=item))+
geom_line()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
2.堆积折线图
堆积折线图特点是所有变量上的不同属性是纵向堆积关系,所以只要设置位置参数position="stack"即可。
ggplot(df1,aes(id,value,colour=item))+
geom_line(position="stack")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
3.百分比堆积折线图
百分比堆积折线图特点是所有变量上的不同属性转换成百分比后再进行纵向堆积(所以最高那条线必定是直线…),所以只要设置位置参数position="fill"即可。
ggplot(df1,aes(id,value,colour=item))+
geom_line(aes(ymax=0),position="fill")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
不过,这里需要注意的一点是,在aes()里必须设置ymax
4.带标记的折线图
带标记的折线图特点是在折线图基础上用了点标记,只要增加散点图就可以实现。
ggplot(df1,aes(id,value,colour=item))+
geom_line()+
geom_point()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
5.带标记的堆积折线图
带标记的堆积折线图特点是在堆积折线图基础上用了点标记,只要增加散点图就可以实现。
ggplot(df1,aes(id,value,colour=item))+
geom_line(position="stack")+
geom_point(position="stack")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
6.带标记的百分比堆积折线图
带标记的百分比堆积折线图特点是在堆积折线图基础上用了点标记,只要增加散点图就可以实现。
ggplot(df1,aes(id,value,colour=item))+
geom_line(aes(ymax=0),position="fill")+
geom_point(aes(ymax=0),position="fill")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
7.三维折线图_用facet代替
三维折线图特点是利用x轴和y轴分别表示两个分类变量,z轴表示具体数值,但是由于3D的遮挡性,所以通常可视化效果欠佳。在ggplot2中,可以用分面(facet_grid)解决这一问题。
ggplot(df1,aes(id,value,colour=item))+
facet_grid(item~.)+
geom_line()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
在ggplot2中,饼图和柱形图关系密切,其实就是一般的柱形图进行直角坐标轴到极坐标轴的转换即可。函数为coord_polar() 但是,同样的,大多人诟病饼图圆形面积不如柱形图的高低直观,因此并不推荐使用饼图。
饼图的特点是使用圆形的面积大小表示数据的占比份额。因此一般的饼图只要通过极坐标变换即可。
ggplot(df,aes(x = factor(1),a,fill=factor(var)))+
geom_bar(stat="identity",position="fill")+
coord_polar(theta="y")
需要注意的是,因为是对y轴进行转换,因此x轴长短需要一致,统一设置为某一值即可(本文使用x=factor(1))。 另外,需要注意的是,饼图通常是表示百分比,所以需要设置参数position="fill"。
2.三维饼图
三维不做图。
3.复合饼图
复合饼图的特点是,当分类很多或者有一个分类含有子分类时,可以使用另一个图形将其中的内容显示出来。
df_tmp&-data.frame(x=1,y=1)
base &- ggplot(df_tmp,aes(x,y))+
geom_blank()+
theme_void()+
xlim(c(0,2))+
ylim(c(0,2))
base + annotation_custom(
grob = ggplotGrob(
ggplot(df,aes(x = "",a,fill=factor(var)))+
geom_bar(stat="identity",position="fill",
show.legend = F)+
labs(x=NULL,y=NULL)+
coord_polar(theta="y")+
theme_classic()),
xmin =0,xmax=1,
ymin=0.5,ymax = 1.5)+
annotation_custom(
grob = ggplotGrob(
ggplot(df,aes(x = "",b,fill=factor(var)))+
geom_bar(stat="identity",
position="fill",
show.legend = F)+
labs(x=NULL,y=NULL)+
coord_polar(theta="y")+
theme_classic()),
xmin =1.1,xmax=1.9,
ymin=0.6,ymax = 1.4)+
annotate("segment",x=0.5,xend=1.5,
y=0.69,yend=0.77)+
annotate("segment",x=0.5,xend=1.5,
y=1.35,yend=1.28)
有心的读者应该可以看得出来,目前这一版本只是一个demo,仍然有很多需要改进的地方。 但是,实际上用这个图只是为了抛砖引玉,只要你有想象力和创造力,ggplot2可以很自由的帮你实现很多图表。
3.复合条饼图
复合条饼图的特点是,当分类很多或者有一个分类含有子分类时,可以使用另一个图形将其中的内容显示出来。
base &- ggplot(df_tmp,aes(x,y))+geom_blank()+theme_void()+
xlim(c(0,2))+ylim(c(0,2))
base + annotation_custom(
grob = ggplotGrob(
ggplot(df,aes(x = "",a,fill=factor(var)))+
geom_bar(stat="identity",
position="fill",
show.legend = F)+
labs(x=NULL,y=NULL)+
coord_polar(theta="y")+theme_void()),
xmin =0,xmax=1,
ymin=0.5,ymax = 1.5)+
annotation_custom(
grob = ggplotGrob(
ggplot(df,aes(x = "",b,fill=factor(var)))+
geom_bar(stat="identity",
position="fill",
show.legend = F)+
labs(x=NULL,y=NULL)+theme_void()),
xmin =1.2,xmax=1.8,ymin=0.8,ymax = 1.2)+
annotate("segment",x=0.5,xend=1.24,y=0.64,yend=0.84)+
annotate("segment",x=0.5,xend=1.24,y=1.38,yend=1.18)+
labs(title="aaa")
圆环图的特点是每一个圆环表示一个变量,其中不同颜色表示不同的属性。
ggplot(df1,aes(x = item,value,fill=var))+
geom_bar(stat="identity",position="fill",width=0.8,colour="white")+
coord_polar(theta="y")
5.其他圆形图
这里不得不说一下,ggplot2的代码demo还是很赞的,用coord_polar可以创造出更多图形.
ggplot(df,aes(x = factor(1),a,fill=factor(var)))+
geom_bar(stat="identity",position="dodge")+
coord_polar(theta="y")
ggplot(df1,aes(x = id,value,fill=item))+
geom_bar(stat="identity",position="fill",width=0.8)+
coord_polar(theta="x")
ggplot(df,aes(x = var,a,fill=factor(var)))+
geom_bar(stat="identity")+
coord_polar(theta="x")
条形图就是横过来的柱形图,所以,只要一个coord_filp()即可。 需要注意的是,柱形图通常用于分类较少的情况下,分类较多且分类的名字特别长的时候,建议使用条形图。
1.簇状条形图
簇状条形图就是簇状柱形图转一下。
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="dodge",width=0.8)+
labs(title="aaa")+
coord_flip()
有心的小伙伴应该注意到了,excel做条形图的时候常常需要逆序坐标轴,但是这里没有做这个处理,就当做一个小小的BUG吧,交给读者自行处理。
2.堆积条形图
堆积条形图就是堆积柱形图转一下。
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="stack",width=0.8)+
labs(title="aaa")+
coord_flip()
3.百分比堆积条形图
百分比堆积条形图就是百分比堆积柱形图转一下。
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="fill",width=0.8)+
labs(title="aaa",fill="")+
coord_flip()
4.三维簇状条形图
3D就不做了
5.三维堆积条形图
3D就不做了
6.三维百分比条形图
3D就不做了
7.分面来代替3D
在柱形图里可以使用分面来代替3D柱形图,条形图一样可以
ggplot(df1,aes(var,value))+
geom_bar(aes(fill=item),stat = "identity",position="dodge",width=0.8)+
labs(title="aaa",fill="")+
coord_flip()+
facet_grid(.~item)
面积图就是一条折线图,然后用颜色把下面的区域全部覆盖了。通常情况下,当一条折线太单调的时候,使用面积图是不错的选择。
面积图的特点就是会覆盖所有该数据以下的区域。
ggplot(df1,aes(id,value))+
geom_area(aes(fill=item),position=position_dodge(width = 0),
alpha=0.5)+
labs(title="aaa",fill="")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
这里需要注意的是,位置函数需要特别定义position=position_dodge(width = 0)。 另外,多分类的时候,应当设置透明度,如alpha=0.5。
2.堆积面积图
堆积面积图特点是会一层一层覆盖上去
ggplot(df1,aes(id,value))+
geom_area(aes(fill=item),alpha=0.5)+
labs(title="aaa")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
3.百分比堆积面积图
百分比堆积面积图特点是先把数据转换为百分比,然后一层一层覆盖上去
ggplot(df1,aes(id,value))+
geom_area(aes(fill=item),position="fill",alpha=0.5)+
labs(title="aaa",fill="")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
4.三维面积图
5.三维堆积面积图
6.三维百分比堆积面积图
7.分面来代替3D
如果觉得面积图用透明度也一样不是很清楚的话,那不妨用分面。
ggplot(df1,aes(id,value))+
geom_area(aes(fill=item),position="stack",alpha=0.5)+
labs(title="aaa",fill="")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])+
facet_grid(item~.)
怎么说呢,散点图基本上来说是所有图形的基础图形,所以一直以来对散点图还是有很深的感情。 说到散点图本身,其实就是知道x和y坐标,然后把点放上去的一种图形。
散点图的特点是,已知x和y的数值,然后把点放上去。
ggplot(df1,aes(var,value))+
geom_point(aes(colour=item))
2.带平滑线和数据标记的散点图
带平滑线和数据标记的散点图的特点是,已知x和y的数值,然后把点放上去。然后用平滑的曲线连起来。
df1_a&-df1 %&% filter(item=="a") %&% select(value) %&%
unlist %&% spline(,1000) %&% as.data.frame()
df1_b&-df1 %&% filter(item=="b") %&% select(value) %&%
unlist %&% spline(,1000) %&% as.data.frame()
df1_c&-df1 %&% filter(item=="c") %&% select(value) %&%
unlist %&% spline(,1000) %&% as.data.frame()
df1_sp&-bind_rows(df1_a,df1_b,df1_c) %&%
mutate(item=rep(letters[1:3],each=1000))
geom_point(data=df1,aes(id,value,colour=item))+
geom_line(data=df1_sp,aes(x,y,colour=item))+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
这里需要注意的是,平滑线的应用方式并不是ggplot2自带的geom_smooth函数,而是借用splines包里面的spline函数,在原先10个点的基础上,创造了1000个差值点,用于平滑。 这里其实出现了一些重复操作可以用函数封装,如果有自动化需求的读者,可自行编写。
3.带平滑线的散点图
带平滑线的散点图的特点是,已知x和y的数值,直接用平滑的曲线连起来。
geom_line(data=df1_sp,aes(x,y,colour=item))+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
其实从某种意义上来说,应该算是线图了。
4.带直线和数据标记的散点图
带直线和数据标记的散点图的特点是,已知x和y的数值,然后把点放上去,再用线段把他们连起来。
ggplot(df1,aes(id,value,colour=item))+
geom_point()+
geom_line()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
5.带直线的散点图
带直线的散点图的特点是,已知x和y的数值,直接用线段把他们连起来。 。
ggplot(df1,aes(id,value,colour=item))+
geom_line()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
气泡图的特点是,已知x和y的数值,把他们点出来,然后把他们的大小用不同的圆标记。
ggplot(df1,aes(id,value,colour=item))+
geom_point(aes(size=value))+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
其实觉得在excel里面出现股价图是很奇怪的一件事,因为这个不算是基础图形,更偏向业务。这里也就不着重介绍了。
1.盘高-盘低-收盘图
已知盘高-盘低-收盘图情况下做的图形。
ggplot(df)+
geom_point(aes(Sys.Date()-1:10,c))+
geom_linerange(aes(Sys.Date()-1:10,ymin=a,ymax=b))
作图的关键是geom_linerange()这个函数
2.开盘-盘高-盘低-收盘图
已知开盘-盘高-盘低-收盘图情况下做的图形。
ggplot(df)+
geom_point(aes(Sys.Date()-1:10,c))+
geom_linerange(aes(Sys.Date()-1:10,ymin=a,ymax=b))+
geom_crossbar(aes(Sys.Date()-1:10,c,ymin=a,ymax=c),width=0.2)
作图的关键是geom_crossbar()这个函数
3.成交量-盘高-盘低-收盘图
已知成交量-盘高-盘低-收盘图情况下做的图形。 但是由于ggplot2开发者不推荐使用副坐标轴,因此采用分面的形式。 参考网站:
ggplot(data = filter(df1,item != "c"),
aes(rep(Sys.Date()-1:10,3),value))+
facet_grid(item~.,scale="free")+
geom_point(data = filter(df1,item == "a"),
aes(Sys.Date()-1:10,value))+
geom_linerange(data = filter(df1,item == "a"),
aes(Sys.Date()-1:10,value,
ymin=value-runif(10),
ymax=value+runif(10)))+
geom_bar(data = filter(df1,item == "b"),
aes(Sys.Date()-1:10,value*1000),
stat="identity")
这里给我们一个很重要的思路,在分面图形中,可以存在完全不同的图表形式。
4.成交量-开盘-盘高-盘低-收盘图
已知成交量-开盘-盘高-盘低-收盘图情况下做的图形。
ggplot(data = filter(df1,item != "c"),
aes(rep(Sys.Date()-1:10,3),value))+
facet_grid(item~.,scale="free")+
geom_point(data = filter(df1,item == "a"),
aes(Sys.Date()-1:10,value))+
geom_linerange(data = filter(df1,item == "a"),
aes(Sys.Date()-1:10,value,
ymin=value-runif(10),
ymax=value+runif(10)))+
geom_crossbar(data = filter(df1,item == "a"),
aes(Sys.Date()-1:10,value,
ymin=value-runif(10),
ymax=value+runif(10)),
width=0.2)+
geom_bar(data = filter(df1,item == "b"),
aes(Sys.Date()-1:10,value*1000),
stat="identity")
曲面图是个很有趣的三维图形,一般用于实地图形的表现,比如山脉。 不过由于ggplot2本身不支持三维呈现,所以这里不做三维曲面图,主要针对二维。
1.三维曲面图
2.三维曲面图(框架图)
曲面图的特点是,用颜色填充高低点。
ggplot(df1,aes(id,item_id))+
geom_contour(aes(z=value,colour=..level..),
binwidth=0.001)+
scale_colour_gradientn(colours = terrain.colors(10))+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])+
scale_y_continuous(breaks = 1:3,labels = letters[1:3])
这里其实用了一个比较取巧的办法,就是尽可能多的画线(binwidth=0.0001)来填充颜色,但是速度就非常慢。
另外,在graphics包里面的contour()函数也可以做这个图表
4.曲面图(框架图)
曲面图(框架图)的特点是,用不同颜色的等高线进行作图。
ggplot(df1,aes(id,item_id))+
geom_contour(aes(z=value,colour=..level..),
binwidth=0.1)+
scale_colour_gradientn(colours = terrain.colors(10))+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])+
scale_y_continuous(breaks = 1:3,labels = letters[1:3])
雷达图作图比较复杂,因此考虑使用风向玫瑰图代替
雷达图特点是,使用圆形的图形加上折线展现每个维度的高低情况。
ggplot(df1,aes(id,value,colour=item))+
geom_bar(stat="identity",
position="dodge",
fill="transparent",
coord_polar()+
scale_x_continuous(breaks = 1:5,labels = LETTERS[1:5])+
facet_wrap(~item,nrow=2)
2.带数据标记的雷达图
带数据标记的雷达图特点是,使用圆形的图形加上折线展现每个维度的高低情况,然后用点标记出来。
ggplot(df1,aes(id,value,colour=item))+
geom_bar(stat="identity",
position="dodge",
fill="transparent",
width=0.5)+
geom_point()+
coord_polar()+
scale_x_continuous(breaks = 1:5,labels = LETTERS[1:5])+
facet_wrap(~item,nrow=2)
3.填充雷达图
填充雷达图特点是,使用圆形的图形加上折线展现每个维度的高低情况,然后里面填充色即可。
ggplot(df1,aes(id,value))+
geom_bar(aes(fill=item),stat="identity",
position="dodge")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])+
coord_polar()+
facet_wrap(~item,nrow=2)
树状图没有找到相应的图形,可以考虑使用其他包实现。
旭日图没有找到相应的图形,可以考虑使用其他包实现。 不过目前看来,旭日图的实用性有待验证
直方图是一种统计图形,是excel2016新加的,但是需要选取原始数据才能做图,所以并不推荐在excel上直接使用。
在ggplot里,则相对自由度较高,可设置的变量更多。
直方图特点是把数据先划分区间,然后从小到大排序,最后用柱状图的形式表现。
ggplot(df1,aes(value))+
geom_histogram(bins=5,colour="white")
数据量比较小,所以无法体现直方图的用处。
排列图,也叫帕累托图,特点是把数据从大到小排列后,并计算每个数据块的百分比占比,然后两图合一。
df_tmp2&-df %&% select(1:3) %&%
arrange(a) %&%
mutate(per = a/sum(a))
arrange(desc(a)) %&%
mutate(new_id = 1:10)%&%
mutate(per = cumsum(per))
ggplot(df_tmp2)+
geom_bar(aes(new_id,a,fill=var),stat="identity")+
geom_line(aes(new_id,per))+
scale_x_continuous(breaks = 1:10,
labels = df_tmp2$var)
这边一定要注意,排列后也不能直接用,需要重新使用排序。
箱型图是一种统计图形,是excel2016新加的,但是需要选取原始数据才能做图,所以并不推荐在excel上直接使用。在ggplot里,则相对自由度较高,可设置的变量更多。
箱型图特点是,使用分位数表示数据的离散和集中趋势。
ggplot(df1,aes(item,value,colour=item))+
geom_boxplot(aes(fill=item),alpha=0.2,
outlier.colour = "red",
outlier.shape = 2,
outlier.size = 5,
coef=1.5)+
geom_jitter(width = 0.1)
本图中由于没有异常值,所以没有标记,但是可以通过coef调整。 另外,图上还是可以增加一个平均值点,读者可以自行摸索。
瀑布图是一种代表图形涨跌趋势的图表,是excel2016新加的,但是需要再计算。 在ggplot2里,没有现成的图表,需要转换。
瀑布图的特点是后一个柱子和前一个柱子有增长或下降的关系。
df_tmp3 &- df %&% select(1:3) %&%
mutate(cum=cumsum(a),
low=lag(cum,default = 0))
ggplot(df_tmp3,aes(id,cum))+
geom_crossbar(aes(ymin=low,ymax=cum),
fill="skyblue",
colour="grey50",
scale_x_continuous(breaks = 1:10,
labels = LETTERS[1:10])
本例中是采用增长的图表,如果需要下降的趋势读者可以自行尝试。
漏斗图其实和一般的柱形图或条形图类似,只是其实点变成了中间。 在ggplot2里,没有现成的图表,需要转换。
箱型图特点是,使用分位数表示数据的离散和集中趋势。
df_tmp4&-df %&% select(1:3) %&%
arrange(a) %&%
mutate(new_id=1:10,
ymin = (1-a)/2,
ymax = a+(1-a)/2,
mid = 0.5)
ggplot(df_tmp4,aes(new_id,mid))+
geom_crossbar(aes(ymin=ymin,ymax=ymax),
fill="skyblue",
colour="grey50",
scale_x_continuous(breaks = 1:10,
labels = df_tmp4$var)+
coord_flip()
ggplot(df_tmp4,aes(new_id,mid))+
geom_linerange(aes(ymin=ymin,ymax=ymax,
colour=factor(new_id)),
alpha=0.5,show.legend = F)+
scale_x_continuous(breaks = 1:10,
labels = df_tmp4$var)+
coord_flip()
以上提供了两种漏斗图的作图方式,请读者自行选择。
本文实际上是一个尝试,作为刚刚读完ggplot2操作文档的作者来说,需要练手,所以可能有很多地方还不成熟。希望是抛砖引玉的一个文章。
其实要说为什么要和excel比较的话,其实是看中ggplot2更自由的作图风格和非常多的参数设置。
不得不说,实际上对于excel用惯的作者来说,还有很多可以调整的参数有待开发,比如,坐标轴、图例、数据标签等等等等,这个就需要后续另行思考和实践了。
本文来源:
Published under.
转载请注明: &
or分享 (0)

我要回帖

更多关于 ggplot2 添加直线 的文章

 

随机推荐