当前位置:   article > 正文

python数据分析学习day08:柱状图_python 柱状图

python 柱状图

1. 柱状图:

  • 柱状图是一种用矩形柱来表示数据分类的图表。
  • 柱状图可以垂直绘制,也可以水平绘制。
  • 它的高度与其所表示的数值成正比关系。
  • 柱状图显示了不同类别之间的比较关系,图表的水平轴 X 指定被比较的类别,垂直轴 Y 则表示具体的类别值

2. 柱状图的绘制

matplotlib.pyplot.bar(x, height, width: float = 0.8, bottom = None, *, align: str = ‘center’, data = None, **kwargs)
  • x 表示x坐标,数据类型为float类型,一般为np.arange()生成的固定步长列表
  • height 表示柱状图的高度,也就是y坐标值,数据类型为float类型,一般为一个列表,包含生成柱状图的所有y值
  • width 表示柱状图的宽度,取值在0~1之间,默认值为0.8
  • bottom 柱状图的起始位置,也就是y轴的起始坐标,默认值为None
  • align 柱状图的中心位置,“center”,"lege"边缘,默认值为’center’
  • color 柱状图颜色,默认为蓝色
  • alpha 透明度,取值在0~1之间,默认值为1
  • label 标签,设置后需要调用plt.legend()生成
  • edgecolor 边框颜色 (ec)
  • linewidth 边框宽度,浮点数或类数组,默认为None (lw)
  • tick_label:柱子的刻度标签,字符串或字符串列表,默认值为None。
  • linestyle :线条样式 (ls)

 2.1  基本的柱状图

  1. import matplotlib.pyplot as plt
  2. # x轴数据
  3. x = range(5)
  4. # y轴数据
  5. data = [5, 20, 15, 25, 10]
  6. # 设置图形标题
  7. plt.title("基本柱状图")
  8. # 绘制网格
  9. plt.grid(ls="--", alpha=0.5)
  10. # bar绘制图形,x 表示x坐标 data为表示柱状图的高度
  11. plt.bar(x, data)

  • bottom参数

柱状图的起始位置,也就是y轴的起始坐标,默认值为None

  1. import matplotlib.pyplot as plt
  2. # x轴数据
  3. x = range(5)
  4. # y轴数据
  5. data = [5, 20, 15, 25, 10]
  6. # 设置图形标题:
  7. plt.title("基本柱状图")
  8. # 绘制网格
  9. plt.grid(ls="--", alpha=0.5)
  10. # bar绘制图形,x 表示x坐标 data为表示柱状图的高度
  11. plt.bar(x, data, bottom=[10, 20, 5, 0, 10])
  12. # 注意data = [5, 20, 15, 25, 10] ----对应的bottom-->[10, 20, 5, 0, 10]

  • 柱状图颜色
  1. import matplotlib.pyplot as plt
  2. # x轴数据
  3. x = range(5)
  4. # y轴数据
  5. data = [5, 20, 15, 25, 10]
  6. # 设置图形标题:
  7. plt.title("设置柱状图颜色")
  8. # 绘制网格
  9. plt.grid(ls="--", alpha=0.5)
  10. # bar绘制图形,x 表示x坐标 data为表示柱状图的高度
  11. plt.bar(x, data ,facecolor="green")
  12. #plt.bar(x, data ,color="green")

 

  1. import matplotlib.pyplot as plt
  2. # x轴数据
  3. x = range(5)
  4. # y轴数据
  5. data = [5, 20, 15, 25, 10]
  6. # 设置图形标题:
  7. plt.title("color参数设置柱状图不同颜色")
  8. # 绘制网格
  9. plt.grid(ls="--", alpha=0.5)
  10. # bar绘制图形,x 表示x坐标 data为表示柱状图的高度
  11. '''
  12. facecolor和color设置单个颜色时使用方式一样
  13. color可以设置多个颜色值,facecolor不可以
  14. '''
  15. plt.bar(x, data ,color=['r', 'g', 'b'])

 

  • 描边 -相关的关键字参数为:
    • edgecolor 或 ec
    • linestyle 或 ls
    • linewidth 或 lw
  1. import matplotlib.pyplot as plt
  2. data = [5, 20, 15, 25, 10]
  3. plt.title("设置边缘线条样式")
  4. plt.bar(range(len(data)), data, ec='r', ls='--', lw=2)

 

2.2 同位置多柱状图

同一 x 轴位置绘制多个柱状图,主要通过调整柱状图的宽度和每个柱状图x轴的 起始位置

 需要绘制如下图形:

分析:

  • 本实例需要对x轴进行计算,因此需要将x轴转数值
  • 确定同一x轴中,每个柱状图x轴的起始位置。
  • 需要设置图形的宽度
  • 图形2的起始位置=图形2起始位置+图形的宽度
  • 图形3的起始位置=图形3起始位置+2倍图形的宽度
  • 需要给每个柱状图循环显示文本内容
  • 显示图例
  1. from matplotlib import pyplot as plt
  2. import numpy as np
  3. # 国家
  4. countries = ['挪威', '德国', '中国', '美国', '瑞典']
  5. # 金牌个数
  6. gold_medal = [16, 12, 9, 8, 8]
  7. # 银牌个数
  8. silver_medal = [8, 10, 4, 10, 5]
  9. # 铜牌个数
  10. bronze_medal = [13, 5, 2, 7, 5]
  11. # 1.将x轴转换为数值
  12. x_int = np.arange(len(countries))
  13. # 2.设置图形的宽度
  14. width = 0.2
  15. # 确定x起始位置
  16. gold_x = x_int # 金牌起始位置
  17. silver_x = x_int + width # 银牌的起始位置
  18. bronze_x = x_int + 2 * width # 铜牌的起始位置
  19. # 分别绘制图形
  20. plt.bar(gold_x, gold_medal, width=width, color="gold", label="金牌") # 金牌图形
  21. plt.bar(silver_x, silver_medal, width=width, color="silver", label="银牌") # 银牌图形
  22. plt.bar(bronze_x, bronze_medal, width=width, color="saddlebrown", label="铜牌") # 铜牌图形
  23. # 移动x标记的位置,再替换内容
  24. plt.xticks(x_int + width,labels=countries)
  25. #-----------显示高度文本----------------
  26. for i in range(len(countries)):
  27. # 金牌
  28. plt.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
  29. # 银牌
  30. plt.text(silver_x[i],silver_medal[i],gold_medal[i],va="bottom",ha="center",fontsize=8)
  31. # 铜牌
  32. plt.text(bronze_x[i],bronze_medal[i],gold_medal[i],va="bottom",ha="center",fontsize=8)
  33. # 显示图例
  34. plt.legend()

绘制各国的金牌榜 银牌榜和铜牌榜 总榜单

  • plt.xticks(rotation= ) 旋转 Xticks 标签文本
  • fig.autofmt_xdate(rotation= ) 旋转 Xticks 标签文本
  • ax.set_xticklabels(xlabels, rotation= ) 旋转 Xticks 标签文本
  • plt.setp(ax.get_xticklabels(), rotation=) 旋转 Xticks 标签文本
  • ax.tick_params(axis='x', labelrotation= ) 旋转 Xticks 标签文本
  1. from matplotlib import pyplot as plt
  2. import numpy as np
  3. # 国家
  4. countries = ['挪威', '德国', '中国', '美国', '瑞典']
  5. # 金牌个数
  6. gold_medal = [16, 12, 9, 8, 8]
  7. # 银牌个数
  8. silver_medal = [8, 10, 4, 10, 5]
  9. # 铜牌个数
  10. bronze_medal = [13, 5, 2, 7, 5]
  11. # 设置画布
  12. fig = plt.figure(figsize=(6,4),dpi=150)
  13. # 一个画布分为2行3列,定位第一个
  14. ax1 = fig.add_subplot(234)
  15. ax1.set_title("金牌榜")
  16. # 旋转x标签
  17. ax1.tick_params(axis="x",rotation=45)
  18. # 金牌榜
  19. ax1.bar(countries, gold_medal, color="gold")
  20. # 一个画布分为2行3列,定位第二个
  21. ax2 = fig.add_subplot(235)
  22. ax2.set_title("银牌榜")
  23. # 旋转x标签
  24. ax2.tick_params(axis="x",rotation=45)
  25. # 银牌榜
  26. ax2.bar(countries, silver_medal, color="silver")
  27. # 一个画布分为2行3列,定位第三个
  28. ax3 = fig.add_subplot(236)
  29. ax3.set_title("铜牌榜")
  30. # 旋转x标签
  31. ax3.tick_params(axis="x",rotation=45)
  32. # 铜牌榜
  33. ax3.bar(countries, bronze_medal, color="#A0522D")
  34. # ================绘制总图:绘制2行一列,移动到第一行======
  35. ax = fig.add_subplot(211)
  36. # 1.将x轴转换为数值
  37. x_int = np.arange(len(countries))
  38. # 2.设置图形的宽度
  39. width = 0.2
  40. # 确定x起始位置
  41. gold_x = x_int # 金牌起始位置
  42. silver_x = x_int+width # 银牌的起始位置
  43. bronze_x = x_int + 2*width # 铜牌的起始位置
  44. # 分别绘制图形
  45. ax.bar(gold_x, gold_medal, width=width,color="gold", label="金牌") # 金牌图形
  46. ax.bar(silver_x, silver_medal, width=width, color="silver",label="银牌") # 银牌图形
  47. ax.bar(bronze_x, bronze_medal, width=width, color="saddlebrown",label="铜牌") # 铜牌图形
  48. # 移动x标记的位置,再替换内容
  49. ax.set_xticks(x_int + width)
  50. ax.set_xticklabels(countries)
  51. #-----------显示高度文本----------------
  52. # 金牌 # 银牌 # 铜牌
  53. for i in range(len(countries)):
  54. # 金牌
  55. ax.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
  56. # 银牌
  57. ax.text(silver_x[i],silver_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
  58. # 铜牌
  59. ax.text(bronze_x[i],bronze_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
  60. # 显示图例
  61. ax.legend(fontsize=6 )
  62. # 处理标题覆盖
  63. plt.tight_layout()

2.3 堆叠柱状图

所谓堆叠柱状图就是将不同数组别的柱状图堆叠在一起,堆叠后的柱状图高度显示了两者相加的结果值。 如图:

分析:

  • 金牌榜的起始高度为:铜牌数据+银牌数据
  • 银牌榜的起始高度为:银牌高度
  • 铜牌榜的起始高度为:0
  • 起始位置的数据相加需要使用numpy的相关知识
  • 需要确定柱状图的颜色
  • 显示图例
  1. from matplotlib import pyplot as plt
  2. import numpy as np
  3. countries = ['挪威', '德国', '中国', '美国', '瑞典']
  4. # 金牌个数
  5. gold_medal = np.array([16, 12, 9, 8, 8])
  6. # 银牌个数
  7. silver_medal = np.array([8, 10, 4, 10, 5])
  8. # 铜牌个数
  9. bronze_medal = np.array([13, 5, 2, 7, 5])
  10. # 绘制堆叠图
  11. # 宽度
  12. width = 0.3
  13. # 解决中文不显示问题
  14. # 使用中文需要进行配置信息的设置 字体设置时,字体名称不区别大小写
  15. plt.rcParams['font.sans-serif'] = ["SimHei"]
  16. # 绘制金牌
  17. plt.bar(countries, gold_medal, color='gold', label='金牌',bottom=silver_medal + bronze_medal,width=width)
  18. # 绘制银牌
  19. plt.bar(countries, silver_medal, color='silver', label='银牌', bottom=bronze_medal,width=width)
  20. # 绘制铜牌
  21. plt.bar(countries, bronze_medal, color='#A0522D', label='铜牌',width=width)
  22. # 设置坐标轴
  23. plt.ylabel('奖牌数')
  24. # 设置图例
  25. plt.legend(loc='upper right')
  26. # 设置文本值
  27. for i in range(len(countries)):
  28. max_y = bronze_medal[i]+silver_medal[i]+gold_medal[i]
  29. plt.text(countries[i], max_y, max_y, va="bottom", ha="center")

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/513319
推荐阅读
相关标签
  

闽ICP备14008679号