R语言作图——Circular bar plot(环形柱状图)
原创:黄小仙
不知不觉,距离小仙上次发文已经过去五个多月了。R语言作图系列的更新频率跟理想中的一月一次差别有点忒大了,不得不让小仙陷入深深的反思,对于时间的规划也有了一些新的感悟。
不知道大家有没有跟我一样的感受啊,举些例子:
放学、下班或者放假之后先把学习任务扔在一边,心想着,我先玩会游戏,等会玩够了再做;
网上看到一篇干货满满的文章,先点收藏,心想着,等我有空的时候再仔细看看;
听说身边的朋友利用空余时间做了什么了不起的事情,心想着,等我有空了,我也可以试一试;
.......
这样的例子数不胜数了,哈哈,小仙常想的就是,一个月有四个周末,这周末先休息,等下个周末再写文章...
就这样,周末要么觉得自己前一段太辛苦了要放松一下,要么在赶紧急的deadline,反倒是重要但是不那么紧急,也没有人给设立deadline的发文大事业被耽误了,哈哈。
现在小仙就觉得,等我有空了 = 没有空, 很多时候,一些可做可不做的事情,等着等着就不做了。如果真的想做某件事情,要么立刻马上行动起来,要么就安排好具体的时间(某一天的几点到几点之间),并且把有可能发生冲突的事情也安排好。
言归正传,这次给大家分享的图,是这个样子的,姑且称之为环形柱状图
Step1. 绘图数据的准备
首先还是要把你想要绘图的数据调整成R语言可以识别的格式excel中保存成csv格式。
数据的格式如下图:
Step2. 绘图数据的读取
data <- read.csv(“your file path”, header = T)
Step3.绘图所需package的调用
library(ggplot2)
Step4.绘图
先画出普通的柱状图
p1 <- ggplot(data, aes(x = 书名, y = 销量, fill = 书名)) +
geom_bar(stat = "identity", width = 0.5) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.8, vjust = 0.9)) +
xlab("销量排行前十") + theme(legend.position = "none") +
scale_y_continuous("销量", breaks = c(0, 200000, 400000, 600000),
labels = c("0", "200000", "400000", "600000"))
p1
环形柱状图
p2 <- ggplot (data, aes(x = 书名,y = 销量, fill = 书名)) +
geom_bar(stat = "identity", width = 0.5) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.8, vjust = 0.9)) +
xlab("销量排行前十") + theme(legend.position = "none") +
scale_y_continuous("销量", breaks = c(0, 200000, 400000, 600000),
labels = c("0", "200000", "400000", "600000")) +
coord_polar(start = 7)
p2
排好序的环形柱状图
data$书名 <- factor(data$书名)
data$书名 <- reorder(data$书名, -data$销量)
p3 <- ggplot(data, aes(x = 书名,y = 销量, fill = 书名)) +
geom_bar(stat = "identity", width = 0.5) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.8, vjust = 0.9)) +
xlab("销量排行前十") + theme(legend.position = "none")+
scale_y_continuous("销量", breaks = c(0, 200000, 400000, 600000),
labels = c("0","200000","400000","600000")) +coord_polar(start = 7)
p3
p3.png
调整颜色
p4 <- ggplot(data, aes(x =书名,y = 销量,fill = 分组)) +
geom_bar(stat = "identity", width = 0.5) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.8, vjust = 0.9))+
xlab("销量排行前十") + theme(legend.position = "none")+
scale_y_continuous("销量", breaks = c(0, 200000, 400000, 600000),
labels = c("0","200000","400000","600000")) +
coord_polar(start = 7) +
scale_fill_manual(values = c(第一梯队="#E41A1C",第二梯队="#377eb8",第三梯队="gray"))
p4
注意事项
在调整颜色的时候有个小插曲,一开始用的语句是
scale_fill_manual(values = c("#E41A1C", "#377eb8", "gray"))
但是得到的图是这样的
并不是"第一梯队"给到了红色
debug的时候发现,data$分组 这一列的数据是这样的,怪不得给不到想要的颜色
把scale_fill_manual()的语句调整一下就可以啦
scale_fill_manual(values = c(第一梯队="#E41A1C",第二梯队="#377eb8",第三梯队="gray"))