-
2021-02-03 11:14:37
**
用Python做数据分析绘制简单的条形图,解决简单的生活问题
**
刚学数据分析不久,下面牛刀小试一次。
题目:为了对某一产品进行合理定价,我们对此类商品进行了试销实验,价格与需求量数据如下。利用图表分析规律。
需from matplotlib import pyplot as plt
import matplotlib
font = {
‘family’:‘SimHei’,
‘weight’:‘bold’,
‘size’:12
}
matplotlib.rc(“font”, **font)
plt.figure(figsize=(10,7))
price = [60,80,40,30,70,90,95]
sales = [100,50,120,135,65,45,40]
width = 0.3
Q = []
for i in range(0,len(price)):
Q.append(((price[i]*sales[i])*2)/100)
po_l = [i-width/2 for i in range(len(price))]
po_r = [i+width/2 for i in range(len(price))]
plt.bar(po_l,sales,width=width,label=‘销售量’,color=‘r’)
plt.bar(po_r,Q,width=width,label=‘赚取利润’,color=‘g’)
x_1 = [f"{i}元/件" for i in price]
y_t = range(0,140,5)
y_1 = [f"{i}万件" for i in y_t]
plt.xticks(range(len(price)),x_1,rotation=0,color=‘g’)
plt.yticks(y_t,y_1,color=‘g’,rotation=0)
plt.xlabel(‘销售价格’,color=‘b’)
plt.ylabel(‘销售量’,color=‘b’)
plt.title(‘产品销售利润分析’,color=‘r’)
plt.legend()
plt.show()
求分析:要计算不同定价条件下的利润,只需要找出不同定价条件下的销售量即可,无需知道变化情况,只要能直观地反映出结果就行,因此选择条形统计图。代码和结果如下:
注意事项,设计刻度标签与绘制图形,二者井水不犯河水,因此,设计标签不需要严格要求横纵坐标一一对应。更多相关内容 -
Python—数据分析—绘制条形图—横竖条形图
2020-12-22 04:42:02假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸... -
python读取mysql数据绘制条形图
2020-12-20 08:56:15本文实例为大家分享了python读取mysql数据绘制条形图的具体代码,供大家参考,具体内容如下 Mysql 脚本示例: create table demo( id int ,product varchar(50) ,price decimal(18,2) ,quantity int ,amount ... -
Python处理JSON数据并生成条形图
2020-12-23 12:36:55一、JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况。...生成条形图之前,为了数据的完整 -
Python处理JSON数据并生成条形图_怎么把表格数据变成条形图
2020-11-22 21:28:41Python处处理理JSON数数据据并并生生成成条条形形图图 本文详细介绍如何利用Python进行数据分析尝试处理一份JSON数据并生成条形图的过程有需要的朋友们可以 参 学习 一一JSON 数数据据准准备 首先准备一份 JSON 数据... -
python实现读取类别频数数据画水平条形图案例
2020-12-20 08:47:051、数据分组–>频数分布表 ...至于为什么要画水平条形图,当类别太多,使用水平条形图比较简洁,个人看法。下面给出代码,就不解释代码含义了。 def data_count(dataa, r1, r2, step): r = pd.DataFrame(np.random.ra -
python3使用matplotlib绘制条形图
2020-12-26 06:42:04本文实例为大家分享了python3使用matplotlib绘制条形图的具体代码,供大家参考,具体内容如下 绘制竖状条形图 代码 from matplotlib import pyplot as plt from matplotlib import font_manager my_font = font_... -
用Power BI的Play Axis插件做动态条形图
2021-01-20 12:25:22之前用Animated Bar Chart Race做动态条形图感觉效果不太好,因为条块太短很多文字信息被遮挡了,于是找到了播放轴Play Axis插件,准备结合条形图插件在做一次动态条形图。 原来用Animated Bar Chart Race的动态效果... -
EXCEL报表条形图-7-多组数据条形图组图.xlsx
2022-05-01 18:52:45EXCEL报表条形图-7-多组数据条形图组图.xlsx -
彩色销售数据分析PPT条形图
2021-07-16 17:51:42这是一张彩色销售数据分析PPT条形图,左侧可以编辑插图,右上方可以填写文字说明。.PPTX格式; -
python使用Matplotlib画条形图
2021-01-01 09:14:20本文实例为大家分享了python使用Matplotlib画条形图的具体代码,供大家参考,具体内容如下 数据 中国的四个直辖市分别为北京市、上海市、天津市和重庆市,其2017年上半年的GDP分别为12406.8亿、13908.57亿、9386.87... -
4数据项对比PPT条形图
2021-07-16 17:41:04这是一张彩色扁平化风格的,4数据项对比PPT条形图。.PPTX格式; -
Excel柱形图条形图模板-多组数据条形图组图
2020-11-24 20:12:39Excel柱形图条形图模板-多组数据条形图组图 -
动态条形图_练习数据_CSV格式
2020-10-18 15:40:58动态条形图_练习数据_CSV格式,文章参考:《最简单方法!!用python生成动态条形图》,欢迎大家下载体验~~ -
python 画条形图(柱状图)实例
2020-09-17 12:25:23主要介绍了python 画条形图(柱状图)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
【Python】豆瓣电影TOP250数据规律分析(Pearson相关系数、折线图、条形图、直方图)
2020-12-21 02:52:361、数据集预览 原创文章 113获赞 137访问量 7万+ 关注 私信 展开阅读全文 作者:Vivid-victory -
数据统计条形图图表素材PPT模板
2021-03-20 13:24:20数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材; 数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材; -
R语言数据可视化-条形图
2022-03-06 22:34:10R语言使用函数 barplot() 创建条形图。 R 语言可以在条形图中绘制垂直和水平条。 在条形图中,每个条可以给予不同的颜色。 二、数据集 下面我将以vcd包里的Arthritis数据集为例介绍函数barplot()的用法。该数据集...一、概述
条形图(bar chart)在医学科技论文中经常有用到,它通过垂直的或水平的矩形展示分类变量的频数分布。 R语言使用函数 barplot() 创建条形图。 R 语言可以在条形图中绘制垂直和水平条。 在条形图中,每个条可以给予不同的颜色。
二、数据集
下面我将以vcd包里的Arthritis数据集为例介绍函数barplot()的用法。该数据集来自于一项关于治疗类风湿性关节炎新方法的成组对照双盲临床试验研究。其中的反应变量Improved记录了每位接受药物治疗(Treated,41例)或安慰剂(Placebo,43例)的患者的治疗效果,分为3个级别(None,Some和Marked)。
1. 引入vcd包
> install.packages('vcd') --- 在此連線階段时请选用CRAN的鏡子 --- 还安装相依关系‘lmtest’ 试开URL’https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.1/lmtest_0.9-39.zip' Content type 'application/zip' length 414754 bytes (405 KB) downloaded 405 KB 试开URL’https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.1/vcd_1.4-9.zip' Content type 'application/zip' length 1294118 bytes (1.2 MB) downloaded 1.2 MB package ‘lmtest’ successfully unpacked and MD5 sums checked package ‘vcd’ successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\86166\AppData\Local\Temp\RtmpAVCrxk\downloaded_packages > library(vcd) 载入需要的程辑包:grid Warning message: 程辑包‘vcd’是用R版本4.1.2 来建造的
2. 引用和查看数据集
> Arthritis #完整数据集数据查看 ID Treatment Sex Age Improved 1 57 Treated Male 27 Some 2 46 Treated Male 29 None 3 77 Treated Male 30 None 4 17 Treated Male 32 Marked 5 36 Treated Male 46 Marked 6 23 Treated Male 58 Marked 7 75 Treated Male 59 None 8 39 Treated Male 59 Marked 9 33 Treated Male 63 None 10 55 Treated Male 63 None 11 30 Treated Male 64 None 12 5 Treated Male 64 Some 13 63 Treated Male 69 None 14 83 Treated Male 70 Marked 15 66 Treated Female 23 None 16 40 Treated Female 32 None 17 6 Treated Female 37 Some 18 7 Treated Female 41 None 19 72 Treated Female 41 Marked 20 37 Treated Female 48 None 21 82 Treated Female 48 Marked 22 53 Treated Female 55 Marked 23 79 Treated Female 55 Marked 24 26 Treated Female 56 Marked 25 28 Treated Female 57 Marked 26 60 Treated Female 57 Marked 27 22 Treated Female 57 Marked 28 27 Treated Female 58 None 29 2 Treated Female 59 Marked 30 59 Treated Female 59 Marked 31 62 Treated Female 60 Marked 32 84 Treated Female 61 Marked 33 64 Treated Female 62 Some 34 34 Treated Female 62 Marked 35 58 Treated Female 66 Marked 36 13 Treated Female 67 Marked 37 61 Treated Female 68 Some 38 65 Treated Female 68 Marked 39 11 Treated Female 69 None 40 56 Treated Female 69 Some 41 43 Treated Female 70 Some 42 9 Placebo Male 37 None 43 14 Placebo Male 44 None 44 73 Placebo Male 50 None 45 74 Placebo Male 51 None 46 25 Placebo Male 52 None 47 18 Placebo Male 53 None 48 21 Placebo Male 59 None 49 52 Placebo Male 59 None 50 45 Placebo Male 62 None 51 41 Placebo Male 62 None 52 8 Placebo Male 63 Marked 53 80 Placebo Female 23 None 54 12 Placebo Female 30 None 55 29 Placebo Female 30 None 56 50 Placebo Female 31 Some 57 38 Placebo Female 32 None 58 35 Placebo Female 33 Marked 59 51 Placebo Female 37 None 60 54 Placebo Female 44 None 61 76 Placebo Female 45 None 62 16 Placebo Female 46 None 63 69 Placebo Female 48 None 64 31 Placebo Female 49 None 65 20 Placebo Female 51 None 66 68 Placebo Female 53 None 67 81 Placebo Female 54 None 68 4 Placebo Female 54 None 69 78 Placebo Female 54 Marked 70 70 Placebo Female 55 Marked 71 49 Placebo Female 57 None 72 10 Placebo Female 57 Some 73 47 Placebo Female 58 Some 74 44 Placebo Female 59 Some 75 24 Placebo Female 59 Marked 76 48 Placebo Female 61 None 77 19 Placebo Female 63 Some 78 3 Placebo Female 64 None 79 67 Placebo Female 65 Marked 80 32 Placebo Female 66 None 81 42 Placebo Female 66 None 82 15 Placebo Female 66 Some 83 71 Placebo Female 68 Some 84 1 Placebo Female 74 Marked > data(Arthritis) > attach(Arthritis) > counts <- table(Improved) > counts # 分组统计数据 Improved None Some Marked 42 14 28
三、基本语法
在 R 语言中创建条形图的基本语法是 -
barplot(data, xlab, ylab, main, names.arg, col,horiz)
以下是所使用的参数的描述 -
- data 是包含在条形图中使用的数值的向量或矩阵。
- xlab 是 x 轴的标签。
- ylab 是 y 轴的标签。
- main 是条形图的标题。
- names.arg 是在每个条下出现的名称的向量。
- col 用于向图中的条形提供颜色。
- horiz 是否垂直
1. 普通条形图
> library(vcd) > data(Arthritis) > attach(Arthritis) > counts <- table(Improved) > counts # 分组统计数据 Improved None Some Marked 42 14 28 barplot(counts,xlab="Improvment",ylab="Freqency",las=1)
2. 二维列联表
> counts <- table(Improved,Treatment) > counts Treatment Improved Placebo Treated None 29 13 Some 7 7 Marked 7 21 > barplot(counts,col=c("red","yellow","green"),xlab="Improvment",ylab="Freqency",beside=TRUE,las=1) #画图 > legend("top",legend=rownames(counts),fill=c("red","yellow","green")) # 加标识
3. 组合条形图和堆积条形图
barplot(counts,main = "类风湿关节对照图",xlab = "Improvment",ylab = "Freqency",col = c("red","yellow","green"))
4. 横向条形图
barplot(counts,main = "类风湿关节对照图",xlab = "Improvment",ylab = "Freqency",col = c("red","yellow","green"),horiz=T) text(seq(from=0.7,length.out=20,by=1.2),x=-0.5,label=rev(z$word))
5. 条形图展示均值、中位数、标准差和置信区间
> install.packages('epiDisplay') 试开URL’https://mirrors.bfsu.edu.cn/CRAN/bin/windows/contrib/4.1/epiDisplay_3.5.0.1.zip' Content type 'application/zip' length 666111 bytes (650 KB) downloaded 650 KB package ‘epiDisplay’ successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\86166\AppData\Local\Temp\RtmpAVCrxk\downloaded_packages > library(epiDisplay) 载入需要的程辑包:foreign 载入需要的程辑包:survival 载入需要的程辑包:MASS 载入需要的程辑包:nnet Warning message: 程辑包‘epiDisplay’是用R版本4.1.2 来建造的 > aggregate.plot(anorexia$Postwt,by=list(anorexia$Treat),error="sd",legend=FALSE,bar.col=c("red","yellow","green"),ylim=c(0,100),las=1,main="") >
-
用Power BI的Animated Bar Chart Race插件做动态条形图
2021-01-20 12:55:09在抖音上看了很多动态条形图,觉得特别好看,想自己做一下,比如下图: 在网上查怎么可以做这种图,看到power BI 的Animated Bar Chart Race插件可以做,正好会用power BI,就拿学校的就业数据分析了一下。 从应用... -
彩色销售数据分析条形图PPT模板
2021-03-20 11:59:57这是一张彩色销售数据分析PPT条形图,左侧可以编辑插图,右上方可以填写文字说明。.PPTX格式; -
R数据可视化:如何绘制条形图?
2021-07-17 20:58:11例如,条形图可以用来形象地展示4种不同商品的价格,但不适宜用来展示商品价格随时间的变动趋势,因为这里的时间是一个连续变量——尽管我们也可以这么做,后面会看到这种情形。 绘制条形图时需特别注意一个重要的...条形图也许是最常用的数据可视化工具,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上)。例如,条形图可以用来形象地展示4种不同商品的价格,但不适宜用来展示商品价格随时间的变动趋势,因为这里的时间是一个连续变量——尽管我们也可以这么做,后面会看到这种情形。
绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身。牢记这个区别——这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语。本章将对此进行深入讨论,并分别介绍这两类条形图的绘图技巧。
从本章开始,本书将重点介绍使用ggplot2而不是R基础绘图系统。用ggplot2绘图更简便,并且可以绘制更复杂的图形。
3.1 绘制基本条形图
问题
你有一个包含了两列数据的数据框,其中一列数据表示条形在x轴上的位置,另一列表示每个条形在y轴上对应的高度,基于此,如何绘制条形图?
方法
使用ggplot()函数和geom_col()绘制上述条形图,并分别指定与x轴和y轴对应的变量(见图3-1)。
library(gcookbook) # 加载gcookbook是为了使用其中的pg_mean数据集 ggplot(pg_mean, aes(x = group, y = weight)) + geom_col()
图3-1:当x是离散变量时绘制的条形图
在之前版本的ggplot2中,建议用geom_bar(stat ="identity")来绘制针对变量值的条形图。在ggplot2 2.2.0版中,用geom_col()函数可以执行相同的操作。
讨论
当x是连续(数值型)变量时,条形图的结果与上图会略有不同。此时,ggplot不是只在实际取值处绘制条形,也会在x轴上介于最大值和最小值之间所有可能的取值处绘制条形,如图3-2所示。我们可以使用factor()函数将连续变量转化为离散变量。
# 没有Time == 6的输入 BOD #> Time demand #> 1 1 8.3 #> 2 2 10.3 #> 3 3 19.0 #> 4 4 16.0 #> 5 5 15.6 #> 6 7 19.8 # Time是数值型(连续)变量 str(BOD) #> 'data.frame': 6 obs. of 2 variables: #> $ Time : num 1 2 3 4 5 7 #> $ demand: num 8.3 10.3 19 16 15.6 19.8 #> - attr(*, "reference")= chr "A1.4, p. 270" ggplot(BOD, aes(x = Time, y = demand)) + geom_col() # 使用factor()函数将Time转化为离散(分类)变量 ggplot(BOD, aes(x = factor(Time), y = demand)) + geom_col()
图3-2:针对变量值绘制的条形图,x轴对应的是连续变量(左图);将x转化为因子型变量之后绘制的条形图(注意此处缺失了取值为6的条形,右图)
值得注意的是,BOD中没有对应Time = 6的行。当x是连续变量时,ggplot2将使用数值坐标轴,该坐标轴在该范围内具有所有数值的空间,因此在图中会出现数值为6的空区域。当Time被转化成因子时,ggplot2会把它作为离散变量处理,其中的值被视为任意标签而不是数值,因此它不会在x轴上为最小值和最大值之间的所有可能的数值分配空间。
在本例中,数据集中有两列值分别对应于变量x和y。如果想让条形图的高度与每组变量的频数相对应,可参见3.3节的内容。
默认设置下,条形图的填充色为深灰色且条形图没有边框线,我们可通过调整fill参数的值来改变条形图的填充色;可通过colour参数为条形图添加边框线。在图3-3中,我们将填充色和边框线的颜色分别指定为浅蓝色和黑色。
ggplot(pg_mean, aes(x = group, y = weight)) + geom_col(fill = "lightblue", colour = "black")
在ggplot2中,颜色参数默认使用的是英式拼写colour,而非美式拼写color。然而,ggplot2会在底层将美式拼写重映射为英式拼写,因此输入美式拼写的参数并不影响函数的运行。
图3-3:所有条形的填充色和边框线颜色均为单色
另见
如果想让条形图的高度对应于每组变量的频数,参见3.3节。
要根据另一个变量的值重排因子水平顺序,参见15.9节。要手动更改因子水平顺序,参见15.8节。
关于图形着色的更多内容,参见第12章。
3.2 绘制簇状条形图
问题
如何绘制基于某些分类变量的簇状条形图?
方法
将分类变量映射到fill参数上,并运行命令geom_col(position = "dodge")。
下面以cabbage_exp数据集为例演示一下绘图过程,该数据集包含两个分类变量Cultivar和Date及一个连续变量Weight。
library(gcookbook) # 加载gcookbook是为了使用cabbage_exp数据集 cabbage_exp #> Cultivar Date Weight sd n se #> 1 c39 d16 3.18 0.9566144 10 0.30250803 #> 2 c39 d20 2.80 0.2788867 10 0.08819171 #> 3 c39 d21 2.74 0.9834181 10 0.31098410 #> 4 c52 d16 2.26 0.4452215 10 0.14079141 #> 5 c52 d20 3.11 0.7908505 10 0.25008887 #> 6 c52 d21 1.47 0.2110819 10 0.06674995
我们分别将Date和Cultivar映射到x和fill(见图3-4)。
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_col(position = "dodge")
图3-4:簇状条形图
讨论
最基本的条形图通常只对应一个绘制在x轴上的分类变量和一个绘制在y轴上的连续变量。有时我们想额外添加一个分类变量跟x轴上的分类变量一起对数据进行分组。此时,可通过将该分类变量映射到fill参数来绘制簇状条形图,这里的fill参数用来指定条形的填充色。在这一过程中必须令参数position = "dodge"以使得两组条形在水平方向上错开排列,否则,系统会输出堆积条形图(参见3.7节)。
与映射到条形图x轴上的变量类似,映射到条形填充色参数上的变量应该是分类变量而不是连续变量。
我们可以通过将geom_col()中的参数指定为colour = "black"为条形添加黑色边框线;可以通过scale_fill_brewer()或者scale_fill_manual()函数对图形颜色进行设置。在图3-5中,我们使用RColorBrewer包中的Pastel1调色盘对图形进行调色。
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_col(position = "dodge", colour = "black") + scale_fill_brewer(palette = "Pastel1")
其他图形属性诸如颜色colour(指定条形图的边框线颜色)和线型(linestyle)也能用来对变量进行分组,不过,填充色(fill)也许是最合人心意的图形属性。
注意,如果分类变量各水平的组合中有缺失项,那么,绘图结果中的条形则相应地略去不绘,同时,临近的条形将自动扩充到相应位置。删去上例数据中的最后一行后,可得到图3-6。
ce <- cabbage_exp[1:5, ] ce #> Cultivar Date Weight sd n se #> 1 c39 d16 3.18 0.9566144 10 0.30250803 #> 2 c39 d20 2.80 0.2788867 10 0.08819171 #> 3 c39 d21 2.74 0.9834181 10 0.31098410 #> 4 c52 d16 2.26 0.4452215 10 0.14079141 #> 5 c52 d20 3.11 0.7908505 10 0.25008887 ggplot(ce, aes(x = Date, y = Weight, fill = Cultivar)) + geom_col(position = "dodge", colour = "black") + scale_fill_brewer(palette = "Pastel1")
图3-5:添加了黑色边框线和不同配色的簇状条形图
图3-6:缺失条形的簇状条形图——临近的条形自动扩充到相应位置
如果你的数据与上面类似,那么可以在分类变量组合缺失的那一项为变量y手动输入一个NA值。
另见
关于条形图着色的更多内容,参见3.4节。
要根据另一个变量的值重排因子水平顺序,参见15.9节。
3.3 绘制频数条形图
问题
如果数据集中每行数据对应于一个样本,如何针对样本频数绘制条形图?
方法
使用函数goem_bar(),同时不要映射任何变量到y参数(见图3-7):
# 等价于使用geom_bar(stat = "bin") ggplot(diamonds, aes(x = cut)) + geom_bar()
图3-7:频数条形图
讨论
diamonds数据集共有53 940行数据,每行数据对应于一颗钻石的品质信息:
diamonds #> # A tibble: 53,940 x 10 #> carat cut color clarity depth table price x y z #> <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> #> 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 #> 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 #> 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 #> 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63 #> 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 #> 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 #> # ... with 5.393e+04 more rows
geom_bar()函数在默认情况下将参数设定为stat = "bin",该操作会自动计算每组(根据x轴上面的变量进行分组)变量对应的观测数。从图3-7可以看到,切工精美(Ideal)的钻石大概有23 000颗。
在本例中,x轴对应的是离散变量。当x轴对应于连续变量时,我们会在每一个x值处得到一个条形,如图3-8上图所示。
x轴对应连续变量的条形图与直方图类似,但不完全相同。直方图如图3-8下图所示。在此类条形图中,每个条形表示唯一的x值,而在直方图中,每个条形表示一定范围内的x值。
图3-8:x轴对应于连续变量的频数条形图(上图);直方图(下图)
另见
如果不想让ggplot()函数自动计算每组数据的行数绘制频数条形图,而是想通过数据框中的某列来指定y参数的话,使用geom_col()函数,可以参见3.1节的内容。
当然,也可以通过先计算出每组数据的行数,再将计算结果传递给ggplot()函数来绘制上图。关于数据汇总的更多内容,参见15.17节。
关于直方图的更多内容,参见6.1节。
3.4 条形图着色
问题
如何将条形图中的条形设定为不同的颜色?
方法
将合适的变量映射到填充色(fill)上即可。
这里以数据集uspopchange为例。该数据集描述了美国各州人口自2000年到2010年的变化情况。我们选取出人口增长最快的10个州进行绘图。图中会根据地区信息(东北部、南部、中北部、西部)对条形进行着色。
首先,选取出人口增长最快的10个州:
library(gcookbook) # 加载gcookbook是为了使用uspopchange数据集 library(dplyr) upc <- uspopchange %>% arrange(desc(Change)) %>% slice(1:10) upc #> State Abb Region Change #> 1 Nevada NV West 35.1 #> 2 Arizona AZ West 24.6 #> 3 Utah UT West 23.8 #> ...<4 more rows>... #> 8 Florida FL South 17.6 #> 9 Colorado CO West 16.9 #> 10 South Carolina SC South 15.3
接下来,将Region映射到fill上并绘制条形图(见图3-9):
ggplot(upc, aes(x = Abb, y = Change, fill = Region)) + geom_col()
图3-9:将分类变量映射到fill参数
讨论
条形图的默认颜色不是最吸引眼球的,因此,可能需要借助函数scale_fill_brewer()或scale_fill_manual()重新设定图形颜色。这里我们调用后者。我们通过设置colour = "black"将条形的边框线设定为黑色(见图3-10)。注意:颜色的映射设定是在aes()内部完成的,而颜色的设定是在aes()外部完成的:
ggplot(upc, aes(x = reorder(Abb, Change), y = Change, fill = Region)) + geom_col(colour = "black") + scale_fill_manual(values = c("#669933", "#FFCC66")) + xlab("State")
图3-10:分类着色、具有黑色边框线的簇状条形图,条形根据人口变动百分比排序
本例用reorder()函数将Abb的因子水平根据Change变量的值重新排序。在本例中,根据条形图的高度进行排序比按照字母顺序对分类变量排序更有意义。
另见
关于reorder()函数的更多用法,参见15.9节。
关于图形着色的更多内容,参见第12章。
3.5 对正负条形图分别着色
问题
如何根据条形对应的正负取值分别对其进行着色?
方法
下面以climate数据集的一个子集为例。首先,创建一个对取值正负性进行标示的变量pos:
library(gcookbook) # 加载gcookbook是为了使用climate数据集 library(dplyr) climate_sub <- climate %>% filter(Source == "Berkeley" & Year >= 1900) %>% mutate(pos = Anomaly10y >= 0) climate_sub #> Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y pos #> 1 Berkeley 1900 NA NA -0.171 0.108 FALSE #> 2 Berkeley 1901 NA NA -0.162 0.109 FALSE #> 3 Berkeley 1902 NA NA -0.177 0.108 FALSE #> ...<99 more rows>... #> 103 Berkeley 2002 NA NA 0.856 0.028 TRUE #> 104 Berkeley 2003 NA NA 0.869 0.028 TRUE #> 105 Berkeley 2004 NA NA 0.884 0.029 TRUE
上述过程准备完毕后,将pos映射到填充色参数(fill)并绘制条形图(见图3-11)。注意:这里条形图的参数设定为position = "identity",可以避免系统因对负值绘制堆积条形而发出的警告消息。
ggplot(climate_sub, aes(x = Year, y = Anomaly10y, fill = pos)) + geom_col(position = "identity")
图3-11:对正负取值的条形分别着色
讨论
上面的绘图过程存在一些问题。首先,图形着色效果可能跟我们想要的相反:蓝色是冷色,通常对应于负值;红色是暖色,通常对应于正值。其次,图例显得多余且扰乱视觉。
我们可以通过scale_fill_manual()参数对图形颜色进行调整,设定参数guide = FALSE可以删除图例,如图3-12所示。同时,我们通过设定边框颜色(colour)和边框线宽度(size)为图形填加了一个细黑色边框。其中,边框线宽度(size)是用来控制边框线宽度的参数(单位是毫米):
ggplot(climate_sub, aes(x = Year, y = Anomaly10y, fill = pos)) + geom_col(position = "identity", colour = "black", size = 0.25) + scale_fill_manual(values = c("#CCEEFF", "#FFDDDD"), guide = FALSE)
图3-12:重新设定颜色并移除了图例的条形图
另见
要更改所用的颜色,参见12.4节和12.5节。
要隐藏图例,参见10.1节。
3.6 调整条形宽度和条形间距
问题
如何调整条形图的条形宽度和条形间距?
方法
通过设定geom_bar()函数的参数width可以使条形变得更宽或者更窄。该参数的默认值为0.9,更大的值将使绘制的条形更宽,反之则更窄(见图3-13)。
例如,标准宽度的条形图如下:
library(gcookbook) # 加载gcookbook是为了使用pg_mean数据集 ggplot(pg_mean, aes(x = group, y = weight)) + geom_col()
图3-13:不同条形宽度的条形图
窄些的条形图如下:
ggplot(pg_mean, aes(x = group, y = weight)) + geom_col(width = 0.5)
宽些的条形图(条形图的最大宽度为1)如下:
ggplot(pg_mean, aes(x = group, y = weight)) + geom_col(width = 1)
簇状条形图默认组内的条形间距为0。如果希望增加组内条形的间距,则可以将width设定得小一些,并令position_dodge的取值大于width(见图3-14)。
图3-14:条形更窄的簇状条形图(左图);具有条形间距的簇状条形图(右图)
要得到更窄的簇状条形图,可运行:
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_col(width = 0.5, position = "dodge")
要添加条形间距,可运行:
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + geom_col(width = 0.5, position = position_dodge(0.7))
左图的绘图命令中用到了参数position = "dodge",右图的绘图命令中用到了参数position = position_dodge()。这是因为position = "dodge"是参数默认为0.9的position = position_dodge()的简写。当我们需要单独指定该参数的时候,必须输入完整的格式。
讨论
width参数的默认值是0.9,position_dodge()函数中width参数的默认值也是0.9。更确切地说,position_dodge()函数中width参数的默认值为NULL,和geom_bar()函数中的width参数的取值是一样的。
下面的4条命令是等价的:
geom_bar(position = "dodge") geom_bar(width = 0.9, position = position_dodge()) geom_bar(position = position_dodge(0.9)) geom_bar(width = 0.9, position = position_dodge(width = 0.9))
条形图中,条形中心对应的x轴坐标分别是1、2、3等,但通常我们用不上这些数值。当用户运行命令geom_bar(width = 0.9)时,每组条形将在x轴上占据0.9个单位宽度。运行命令position_dodge(width = 0.9)时,ggplot2会自动调整条形位置,以使每个条形的中心恰好位于当每组条形宽度为0.9,且组内条形紧贴在一起时的位置,如图3-15所示。图中左右两部分的条形间距都为0.9,只是左图对应于0.9的条形宽度,右图对应于0.2的条形宽度。虽然左右两部分对应的条形宽度不同,但两图的条形中心是保持一致的。
图3-15:条形间距均为0.9,条形宽度分别为0.9(左图)和0.2(右图)的簇状条形图
如果做整幅图形的伸缩,那么条形图也会依照相应的比例进行伸缩。要了解图形是怎样变化的,只需改变图形所在窗口的大小,然后观察图形的变化即可。关于在输出图形文件时控制图片大小的更多内容,参见第14章。
本文摘自:《R数据可视化手册 第2版》
[美] 温斯顿·常(Winston Chang) 著,王佳,林枫,王祎帆,张晔 译
R语言数据可视化经典书籍全新升级,第2版中的大部分技巧使用的是新版的ggplot2包,精选快速绘制高质量图形的150多个技巧,全彩印刷。
1.R语言数据可视化经典书籍全新升级,第2版中的大部分技巧使用的是新版的ggplot2包,这是R中非常强大且灵活的绘图工具。
2.本书提供了150多个技巧,借助这些技巧,科学家、工程师、程序员和数据分析师无须梳理出R绘图系统的全部细节就可以快速绘制出高质量的图形。每个技巧解决一个特定的问题,读者可以将这些技巧应用到自己的项目中。
3.书中还包含图可视化设计的扩展内容。读者只要对R语言有基本的了解,就可以开始使用这本简单易用的参考书。
■ 用R中的默认图形来快速探索数据。
■ 绘制各种条形图、折线图和散点图。
■ 用直方图、密度曲线、箱形图和其他图形来描述数据分布。
■ 提供注解来帮助读图者理解数据。
■ 控制图形的整体外观。
■ 探索配色的选择。
■ 绘制网络图、热图和三维散点图。
■ 用tidyverse中的包对数据塑形。 -
动态可视化条形图.rar
2020-04-03 16:07:51可视化动态条形图(柱形图)源代码,该代码可以直接在jupyter中运行,附加有相应的csv格式的源数据,以及输出效果视频,很容易上手。 -
用Python绘制条形图
2022-02-18 10:46:321. 绘制条形图 前面讲解了折线图的绘制,但是似乎不太能直观地看出每个季度下各个项目利润的差距。或许,我们可以画出如下的条形图来试试。 代码改写 我们已经知道,折线图的绘制需要创建LineChart对象来...1. 绘制条形图
前面讲解了折线图的绘制,但是似乎不太能直观地看出每个季度下各个项目利润的差距。或许,我们可以画出如下的条形图来试试。
代码改写
我们已经知道,折线图的绘制需要创建
LineChart对象
来实现。那么,条形图的绘制该如何实现呢?条形图和折线图不同,需要创建的是
BarChart对象
。但是,画条形图与画折线图的过程是一致的,包括:
图表绘制:确认图的类型,引用表格的数据,设置图在工作表的位置;
图表信息和样式的优化:修改类别轴的标签,添加X轴、Y轴的标题,修改图的样式。
另外,
BarChart对象
和LineChart对象
在使用上也是类似的。
所以,只需一些小小的改动就可以绘制条形图。如以下代码,我已稍稍做了修改:import os from openpyxl import load_workbook from openpyxl.chart import BarChart, Reference # 设置目标文件夹路径 path = './各部门利润表汇总/' # 获取文件夹下的所有文件名 file_list = os.listdir(path) # 遍历文件名列表,取得每一个文件名 for file_name in file_list: # 拼接文件路径 file_path = path + file_name # 读取工作簿 wb = load_workbook(file_path) # 定位到工作簿中的活跃工作表 ws = wb.active # 实例化 BarChart() 类,得到 BarChart 对象 chart = BarChart() # 引用工作表的部分数据 data = Reference(worksheet = ws, min_row = 3, max_row = 9, min_col = 1, max_col = 5) # 添加被引用的数据到 BarChart 对象 chart.add_data(data, from_rows = True, titles_from_data = True) # 添加 BarChart 对象到工作表中,指定生成折线图的位置 ws.add_chart(chart, "C12") # 引用工作表的表头数据 cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=5) # 设置类别轴的标签 chart.set_categories(cats) # 设置 x 轴的标题 chart.x_axis.title = "季度" # 设置 y 轴的标题 chart.y_axis.title = "利润" # 设置折线图的颜色 chart.style = 48 # 保存工作簿 wb.save(file_path) print('条形图绘制成功!')
折线图绘制与条形图绘制的异同
其实,折线图绘制的代码与条形图绘制的代码只有两处不同:
1)导入的类不一样,绘制条形图时,需要导入
BarChart类
,而不是LineChart类
。2)创建的图表对象不一样,绘制条形图时,需要创建
BarChart对象
,而不是LineChart对象
。需要注意的是,
BarChart对象
、LineChart对象
虽然绘制不同类型的图型,但它们有许多相同点。1)相同的方法:
add_data()
、set_categories()
。2)相同的属性:
x_axis.title
、x_axis.title
、style
。折线图与条形图的视觉效果
了解了两种图表绘制上的异同点之后,我们再看看在视觉上,条形图和折线图有什么不一样的地方。
折线图可以比较直观地看出每个项目的变化趋势,而条形图更能清晰地看出各个项目在同一季度的利润差距。
具体使用哪种类型的图表,需要根据你要分析的问题来选择。
-
Excel柱形图条形图模板-半年产品销量数据对比Excel图表
2020-11-24 20:12:17Excel柱形图条形图模板-半年产品销量数据对比Excel图表 -
利用 matplotlib 制作条形图
2020-12-22 09:58:03我们用一个例子来描述利用matplotlib怎样制作条形图。 例:假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据。 1、纵向条形图: from matplotlib import pyplot as plt ... -
数据统计条形图PPT图表素材.rar
2019-07-15 15:35:21数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材; -
categoricalBarchart1.zip:在条形图中对分类数据进行分组-matlab开发
2021-05-30 10:14:02可以使用条形图轻松绘制此输出。 输出的组织方式首先是分组,然后是类别,这使得组之间的差异很容易看出。 此功能可以轻松地循环使用并进行分析,并且可以在很短的时间内分析包含大量分类数据的整个 MS Excel 电子...