精华内容
下载资源
问答
  • 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()
    在这里插入图片描述

    求分析:要计算不同定价条件下的利润,只需要找出不同定价条件下的销售量即可,无需知道变化情况,只要能直观地反映出结果就行,因此选择条形统计图。代码和结果如下:
    注意事项,设计刻度标签与绘制图形,二者井水不犯河水,因此,设计标签不需要严格要求横纵坐标一一对应。

    更多相关内容
  • 假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸...
  • 本文实例为大家分享了python读取mysql数据绘制条形图的具体代码,供大家参考,具体内容如下 Mysql 脚本示例: create table demo( id int ,product varchar(50) ,price decimal(18,2) ,quantity int ,amount ...
  • 一、JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况。...生成条形图之前,为了数据的完整
  • Python处处理理JSON数数据据并并生生成成条条形形图图 本文详细介绍如何利用Python进行数据分析尝试处理一份JSON数据并生成条形图的过程有需要的朋友们可以 参 学习 一一JSON 数数据据准准备 首先准备一份 JSON 数据...
  • 1、数据分组–>频数分布表 ...至于为什么要画水平条形图,当类别太多,使用水平条形图比较简洁,个人看法。下面给出代码,就不解释代码含义了。 def data_count(dataa, r1, r2, step): r = pd.DataFrame(np.random.ra
  • 本文实例为大家分享了python3使用matplotlib绘制条形图的具体代码,供大家参考,具体内容如下 绘制竖状条形图 代码 from matplotlib import pyplot as plt from matplotlib import font_manager my_font = font_...
  • 之前Animated Bar Chart Race动态条形图感觉效果不太好,因为条块太短很多文字信息被遮挡了,于是找到了播放轴Play Axis插件,准备结合条形图插件在一次动态条形图。 原来Animated Bar Chart Race的动态效果...
  • EXCEL报表条形图-7-多组数据条形图组图.xlsx
  • 这是一张彩色销售数据分析PPT条形图,左侧可以编辑插图,右上方可以填写文字说明。.PPTX格式;
  • 本文实例为大家分享了python使用Matplotlib画条形图的具体代码,供大家参考,具体内容如下 数据 中国的四个直辖市分别为北京市、上海市、天津市和重庆市,其2017年上半年的GDP分别为12406.8亿、13908.57亿、9386.87...
  • 4数据项对比PPT条形图

    2021-07-16 17:41:04
    这是一张彩色扁平化风格的,4数据项对比PPT条形图。.PPTX格式;
  • Excel柱形图条形图模板-多组数据条形图组图
  • 动态条形图_练习数据_CSV格式,文章参考:《最简单方法!!python生成动态条形图》,欢迎大家下载体验~~
  • 主要介绍了python 画条形图(柱状图)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 1、数据集预览 原创文章 113获赞 137访问量 7万+ 关注 私信 展开阅读全文 作者:Vivid-victory
  • 数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材; 数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材;
  • R语言数据可视化-条形图

    千次阅读 2022-03-06 22:34:10
    R语言使用函数 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)
    

    条形图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")) # 加标识
    
    

    条形图2-未加标识
    条形图3-加标识

    3. 组合条形图和堆积条形图

    barplot(counts,main = "类风湿关节对照图",xlab = "Improvment",ylab = "Freqency",col = c("red","yellow","green"))
    

    条形图4

    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

    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="")
    > 
    
    

    条形图6

    展开全文
  • 在抖音上看了很多动态条形图,觉得特别好看,想自己一下,比如下图: 在网上查怎么可以这种图,看到power BI 的Animated Bar Chart Race插件可以,正好会power BI,就拿学校的就业数据分析了一下。 从应用...
  • 这是一张彩色销售数据分析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()

    R数据可视化:如何绘制条形图?

    图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()

    R数据可视化:如何绘制条形图?

    图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会在底层将美式拼写重映射为英式拼写,因此输入美式拼写的参数并不影响函数的运行。

    R数据可视化:如何绘制条形图?

    图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")

    R数据可视化:如何绘制条形图?

    图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")

    R数据可视化:如何绘制条形图?

    图3-5:添加了黑色边框线和不同配色的簇状条形图

    R数据可视化:如何绘制条形图?

    图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()

    R数据可视化:如何绘制条形图?

    图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值。

    R数据可视化:如何绘制条形图?

    图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()

    R数据可视化:如何绘制条形图?

    图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")

    R数据可视化:如何绘制条形图?

    图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")

    R数据可视化:如何绘制条形图?

    图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)

    R数据可视化:如何绘制条形图?

    图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()

    R数据可视化:如何绘制条形图?

    图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)。

    R数据可视化:如何绘制条形图?

    图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的条形宽度。虽然左右两部分对应的条形宽度不同,但两图的条形中心是保持一致的。

    R数据可视化:如何绘制条形图?

    图3-15:条形间距均为0.9,条形宽度分别为0.9(左图)和0.2(右图)的簇状条形图

    如果做整幅图形的伸缩,那么条形图也会依照相应的比例进行伸缩。要了解图形是怎样变化的,只需改变图形所在窗口的大小,然后观察图形的变化即可。关于在输出图形文件时控制图片大小的更多内容,参见第14章。

    本文摘自:《R数据可视化手册 第2版

    R数据可视化:如何绘制条形图?

    [美] 温斯顿·常(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:32
    1. 绘制条形图 前面讲解了折线图的绘制,但是似乎不太能直观地看出每个季度下各个项目利润的差距。或许,我们可以画出如下的条形图来试试。 代码改写 我们已经知道,折线图的绘制需要创建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.titlex_axis.titlestyle

    折线图与条形图的视觉效果

    了解了两种图表绘制上的异同点之后,我们再看看在视觉上,条形图和折线图有什么不一样的地方。

    折线图可以比较直观地看出每个项目的变化趋势,而条形图更能清晰地看出各个项目在同一季度的利润差距。

    具体使用哪种类型的图表,需要根据你要分析的问题来选择。

     

     

     

    展开全文
  • Excel柱形图条形图模板-半年产品销量数据对比Excel图表
  • 我们一个例子来描述利用matplotlib怎样制作条形图。 例:假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据。 1、纵向条形图: from matplotlib import pyplot as plt ...
  • 数据统计条形图PPT图表素材下载,关键词:PPT图表,条形图,条状图,数据分析,数据统计,幻灯片素材;
  • 可以使用条形图轻松绘制此输出。 输出的组织方式首先是分组,然后是类别,这使得组之间的差异很容易看出。 此功能可以轻松地循环使用并进行分析,并且可以在很短的时间内分析包含大量分类数据的整个 MS Excel 电子...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,609
精华内容 21,443
关键字:

如何用数据做条形图