欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

程序员文章站 2022-07-14 10:05:55
...

Python学习-Matplotlib库绘制各类统计图

目录

1、散点图绘制及各类参数介绍

1)绘制散点图,特定函数scatter()
2)利用plot()函数绘制散点图

2、绘制条形图及各类参数介绍,bar()

3、绘制直方图及各类参数介绍,hist()

4、绘制饼状图及各类参数介绍,pie()

5、绘制极坐标图

导入库
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)  # 导入中文字体,打印中文标签
1、散点图绘制及各类参数介绍
1)绘制散点图,特定函数scatter()

常用参数介绍:
x: x轴坐标;y: y轴坐标;s: 点标记的大小;c: 标记颜色;marker: 标记的形状;alpha: 标记透明度[0,1]
不常用:
cmap: 设置颜色条;norm: 颜色范围归一化;vmin,vmax: 颜色最大最小值;
linewidths: 标记边缘线形状;edgecolors: 标记边缘线颜色

X = np.random.randn(100)  # 生成x轴的100个随机数
Y = np.random.randn(100)  # 生成y轴的100个随机数
plt.figure(1)
plt.title("散点图练习", fontproperties=font)
plt.scatter(x=X, y=Y, s=100, c='y', marker='*', alpha=1, \
            cmap='hot', norm=None, vmin=0, vmax=100, linewidths=None, edgecolors=None)

plt.xlabel('横坐标', fontproperties=font)
plt.ylabel('纵坐标', fontproperties=font)
plt.show()
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

2)利用plot()函数绘制散点图,必须指定图标,且不能有关于画线的指定条件,否则将会画成线
X = np.random.randn(100)  # 生成x轴的100个随机数
Y = np.random.randn(100)  # 生成y轴的100个随机数
plt.figure(2)
plt.plot(X, Y, ".", color='b')
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

2、绘制条形图及各类参数介绍,bar()

参数介绍:
x: x轴坐标(元组、列表、数组);height:条形图高度;width: 条形图宽度
bottom:设置条形基座的y坐标;align: 'center’基座在x位置,'edge’基座左边缘在x位置
alpha:条形图透明度;color:条形图颜色;label:条形图标签

plt.figure(3)
plt.rc('font', family='simhei', size=15)  # 设置中文显示,字体大小
plt.rc('axes', unicode_minus=False)  # 该参数解决负号显示的问题
c = ['大一', '大二', '大三', '大四']  # x轴刻度标记
x = np.arange(len(c))*0.8  # x轴刻度数,条形基座中间x位置数
g = [34, 32, 37, 35]  # 条形图高度
b = [32, 31, 38, 40]
g1 = plt.bar(x=x, height=g, width=0.2, bottom=None, alpha=0.8, color='red', label="girl", \
             align='edge', data=None)
"""
x: x轴坐标(元组、列表、数组);height:条形图高度;width: 条形图宽度
bottom:设置条形基座的y坐标;align: 'center'基座在x位置,'edge'基座左边缘在x位置
alpha:条形图透明度;color:条形图颜色;label:条形图标签
"""
b1 = plt.bar([x1+0.2 for x1 in x], height=b, width=0.2, alpha=0.8, color='blue', label="boy", align='edge')
"""
[x1+0.2 for x1 in x]:
for x1 in range(len(x)):
    x[x1] += 1
"""
plt.title('各年级人数统计')
plt.legend()  # 显示图例
plt.ylim(0, 80)  # y轴刻度范围
plt.ylabel('人数')  # y轴标签
plt.xticks([index + 0.2 for index in x], c)  # 显示条形图的标签
plt.xlabel('班级')  # x轴标签

# 在每一个条形图的顶部设置顶值
for r1 in g1:
    height = r1.get_height()
    plt.text(r1.get_x()+r1.get_width()/2, height+1, str(height), ha="center", va="bottom")

for r2 in b1:
    height = r2.get_height()
    plt.text(r2.get_x()+r2.get_width()/2, height+1, str(height), ha="center", va="bottom")

plt.show()
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

3、绘制直方图及各类参数介绍,hist()

参数介绍:
x: x轴坐标(元组、列表、数组);bins:条形数量,也可以是数组[1,2,3,4],第一个条形范围为[1,2);
range: (x.min(), x.max()),概率分布范围上下限;density:True表示归一化处理,形成概率密度计算;
weights:给x所有值赋权重;cumulative:True,从小到大统计、False:从大到小统计
bottom:指定每个条形基座的在x轴的基线位置;histtype:直方图类型,bar、barstacked、step、stepfilled;
align: 指定条形基座的在x轴上相对基线的位置;alpha:条形图透明度;orientation:条形显示方式,horizontal、vertical
rwidth:宽度; log:True,对数刻度;stacked:堆叠;color:直方图颜色;label:直方图标签

plt.figure(4)
plt.rc('font', family='simhei', size=15)  # 设置中文显示,字体大小
plt.rc('axes', unicode_minus=False)  # 该参数解决负号显示的问题
data = np.random.randn(1000)
plt.hist(x=data, bins=20, range=None, density=False, weights=None, cumulative=False, bottom=None, \
         histtype='stepfilled', align='mid', alpha=0.9, orientation='vertical', rwidth=None, log=False, \
         color='y', stacked=True, edgecolor='black')
"""
# x: x轴坐标(元组、列表、数组);bins:条形数量,也可以是数组[1,2,3,4],第一个条形范围为[1,2);
range: (x.min(), x.max()),概率分布范围上下限;density:True表示归一化处理,形成概率密度计算;
weights:给x所有值赋权重;cumulative:True,从小到大统计、False:从大到小统计
bottom:指定每个条形基座的在x轴的基线位置;histtype:直方图类型,bar、barstacked、step、stepfilled;
align: 指定条形基座的在x轴上相对基线的位置;alpha:条形图透明度;orientation:条形显示方式,horizontal、vertical
rwidth:宽度; log:True,对数刻度;stacked:堆叠;color:直方图颜色;label:直方图标签
"""
plt.xlabel('概率分布区间')
plt.ylabel('频数or频率')
plt.title('分布直方图')

plt.show()
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

4、绘制饼状图及各类参数介绍,pie()

参数介绍:
explode:切片到圆心的距离
shadow:阴影
radius: 半径

plt.figure(5)
plt.rc('font', family='simhei', size=15)  # 设置中文显示,字体大小
plt.rc('axes', unicode_minus=False)  # 该参数解决负号显示的问题
lab = ['感冒', '肠胃不适', '过敏', '其它']
data = [48, 21, 18, 13]
color = ['red', 'green', 'blue', 'yellow']
explode = (0.1, 0, 0, 0)
plt.pie(x=data, explode=explode, labels=lab, colors=color,  autopct='%1.1f%%', pctdistance=0.6, shadow=False, \
        labeldistance=1.1, startangle=0, radius=0.5, counterclock=True, wedgeprops=None, textprops=None, \
        center=(0, 0), frame=None, rotatelabels=True)

"""
explode:切片到圆心的距离
shadow:阴影
radius: 半径
"""

plt.title('生病人数及原因统计')
plt.legend()  # 产生图例

plt.show()
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)

5、绘制极坐标图

注:画极坐标时,需要指定subplot()的参数projection=‘polar’

plt.figure(6)
t = np.arange(0, 2*np.pi, 0.2)
ax1 = plt.subplot(projection='polar')
ax1.plot(t, t/6, '--', lw=2)

plt.show()
输出

Python学习-Matplotlib库绘制各类常见统计图(散点图、条形图、直方图、饼状图、极坐标图)