首页 > 编程知识 正文

matplotlib绘制条形的函数,matplotlib的直方

时间:2023-05-04 19:52:21 阅读:277035 作者:3852

matplotlib绘制直方图、条形图和饼图

matplotlib是一个非常强大的Python第三方绘图包,可以绘制非常多非常漂亮的图形。matplotlib.pyplot提供了一个类Matlab的函数式编程环境。通常的绘图任务,都可以通过matplotlib.pyplot完成,下面将记录下绘制直方图和饼图的过程。

1 绘制直方图

首先需要区分清楚概念:直方图和条形图。

条形图:条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。直方图:直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示 频数组距 ,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。

直方图一般用来描述等距数据,柱状图一般用来描述名称(类别)数据或顺序数据。直观上,直方图各个长条形是衔接在一起的,表示数据间的数学关系;条形图各长条形之间留有空隙,区分不同的类。

区别频数分布直方图条形图横轴上的数据连续的,是一个范围孤立的,代表一个类别长条形之间没有空隙有空隙频数的表示一般用长条形面积表示;当宽度相同时,用长度表示长条形的长度 1.1直方图 import matplotlib.pyplot as pltimport numpy as npimport matplotlib# 设置matplotlib正常显示中文和负号matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号# 随机生成(10000,)服从正态分布的数据data = np.random.randn(10000)"""绘制直方图data:必选参数,绘图数据bins:直方图的长条形数目,可选项,默认为10normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。facecolor:长条形的颜色edgecolor:长条形边框的颜色alpha:透明度"""plt.hist(data, bins=40, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)# 显示横轴标签plt.xlabel("区间")# 显示纵轴标签plt.ylabel("频数/频率")# 显示图标题plt.title("频数/频率分布直方图")plt.show()

绘制的直方图效果如下:

1.2条形图 import matplotlib.pyplot as pltimport matplotlib# 设置中文字体和负号正常显示matplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falselabel_list = ['2014', '2015', '2016', '2017'] # 横坐标刻度显示值num_list1 = [20, 30, 15, 35] # 纵坐标值1num_list2 = [15, 30, 40, 20] # 纵坐标值2x = range(len(num_list1))"""绘制条形图left:长条形中点横坐标height:长条形高度width:长条形宽度,默认值0.8label:为后面设置legend准备"""rects1 = plt.bar(left=x, height=num_list1, width=0.4, alpha=0.8, color='red', label="一部门")rects2 = plt.bar(left=[i + 0.4 for i in x], height=num_list2, width=0.4, color='green', label="二部门")plt.ylim(0, 50) # y轴取值范围plt.ylabel("数量")"""设置x轴刻度显示值参数一:中点坐标参数二:显示值"""plt.xticks([index + 0.2 for index in x], label_list)plt.xlabel("年份")plt.title("某某公司")plt.legend() # 设置题注# 编辑文本for rect in rects1: height = rect.get_height() plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")for rect in rects2: height = rect.get_height() plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")plt.show()

1.3 水平条形图 import matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falseprice = [39.5, 39.9, 45.4, 38.9, 33.34]"""绘制水平条形图方法barh参数一:y轴参数二:x轴"""plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.8) # 从下往上画plt.yticks(range(5), ['亚马逊', '当当网', '中国图书网', '京东', '天猫'])plt.xlim(30,47)plt.xlabel("价格")plt.title("不同平台图书价格")for x, y in enumerate(price): plt.text(y + 0.2, x - 0.1, '%s' % y)plt.show()

1.4 堆叠条形图 import matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falselabel_list = ['2014', '2015', '2016', '2017']num_list1 = [20, 30, 15, 35]num_list2 = [15, 30, 40, 20]x = range(len(num_list1))rects1 = plt.bar(left=x, height=num_list1, width=0.45, alpha=0.8, color='red', label="一部门")rects2 = plt.bar(left=x, height=num_list2, width=0.45, color='green', label="二部门", bottom=num_list1)plt.ylim(0, 80)plt.ylabel("数量")plt.xticks(x, label_list)plt.xlabel("年份")plt.title("某某公司")plt.legend()plt.show()

饼图 import matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falselabel_list = ["第一部分", "第二部分", "第三部分"] # 各部分标签size = [55, 35, 10] # 各部分大小color = ["red", "green", "blue"] # 各部分颜色explode = [0.05, 0, 0] # 各部分突出值"""绘制饼图explode:设置各部分突出label:设置各部分标签labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径autopct:设置圆里面文本shadow:设置是否有阴影startangle:起始角度,默认从0开始逆时针转pctdistance:设置圆内文本距圆心距离返回值l_text:圆内部文本,matplotlib.text.Text objectp_text:圆外部文本"""patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)plt.axis("equal") # 设置横轴和纵轴大小相等,这样饼才是圆的plt.legend()plt.show()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。