柱状图
1 plt.bar
bar()函数中可直接设置标签,label = '' 。
当两个堆叠时,加上参数bottom可以设置那个在下面,这时便不会发生一个覆盖另一个的情况。
特别注意这里的bottom参数设置时应该是第一次画的bar中的数据,不能用第二次,否则会出错。
# !/usr/bin/env.python # *._ * _.coding: utf - 8. import os, sys, pickle import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import matplotlib.dates as mdates from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False name_list = ['Monday', 'Tuesday', 'Friday', 'Sunday'] num_list = [9, 0.6, 2, 6] num_list1 = [1, 2, 3, 1] plt.bar(range(len(num_list)), num_list, label='boy', fc='y') plt.bar(range(len(num_list)), num_list1, bottom=num_list, label='girl', tick_label=name_list, fc='r') plt.legend() plt.show()
参考:https://blog.csdn.net/qq_29721419/article/details/71638912
在同一个柱状图同一横坐标下画两次时,柱子会自动叠加,注意这里的叠加是重叠,不是加和,所以想比较两个数据时,除非一组比另一组都大,否则还是要用两个柱子并列的方法比较。https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.6.292844f2UPu2Bd&postId=4796
有类似的例子
#!/usr/bin/env.python #*._ * _.coding: utf - 8. import os, sys, pickle import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import seaborn as sns plt.figure(figsize=(9, 6)) # 设置画布的大小 n = 8 # 条形簇的个数 X = np.arange(n) + 1 # 生成1到8的ndarry 注意这里list类型不能直接进行算术运算,所以要用numpy类型。 # X是1,2,3,4,5,6,7,8,柱的个数 # numpy.random.uniform(low=0.0, high=1.0, size=None), normal # uniform均匀分布的随机数,normal是正态分布的随机数,0.5-1均匀分布的数,一共有n个 Y1 = np.random.uniform(0.5, 1.0, n) Y2 = np.random.uniform(0.5, 1.0, n)
# bar中第一个参数是柱的中心点的横坐标,第二个是柱的高度。 plt.bar(X, Y1, width=0.35, facecolor='lightskyblue', edgecolor='black') plt.bar(X + 0.35, Y2, width=0.35, facecolor='yellowgreen', edgecolor='white') # width:柱的宽度 水平柱状图plt.barh,属性中宽度width变成了高度height # 打两组数据时用+,即画Y2的时候 # facecolor柱状图里填充的颜色 # edgecolor是边框的颜色 # 想把一组数据打到下边,在数据前使用负号 实践了无效果 # plt.bar(X, -Y2, width=0.35, facecolor='#ff9999', edgecolor='white') # 给图加text for x, y in zip(X, Y1): plt.text(x, y +0.02, '%.2f' % y, ha='center') # text()用于设置显示的文本内容及位置,括号中的前两个参数是所要填写的文本的位置, # %.0f' % y, 其中b是标注的文字,也即要显示的文本内容,即每个柱子对应的y值, # 其中0表示不显示小数后面的数值,1就表示显示小数后面一位,这里设置了保留两位小数。 # ha='center',va= 'bottom'代表horizontalalignment(水平对齐)verticalalignment(垂直对齐)的方式, for x, y in zip(X, Y2): plt.text(x + 0.35, y + 0.02, '%.2f' % y, ha='center', va='bottom') plt.ylim(0, +1.25) # 设置y轴的范围 plt.show()
输出:
参考:https://www.jianshu.com/p/8c0fe1240e78
画条形图的时候,注意plt.bar里的条形图高度参数应该是数字,不能是字符串,否则第一个条形图不显示,