Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)

文章目录

    • 一、折线图
    • 二、散点图
    • 三、柱状图
    • 四、直方图
    • 五、饼图
    • 六、条形图

一、折线图

  • 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

  • 特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

api:plt.plot(x, y)

from matplotlib import pyplot as plt

x = range(2, 26, 2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]

fig = plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y,label='上海')
y_2 = [21, 14, 31, 7, 5, 12, 17, 8, 14, 21, 12, 23]
plt.plot(x, y_2,color='r',linestyle='--',label='北京')
plt.xticks(x)
plt.yticks(range(min(y), max(y) + 1))


plt.xlabel('时间',fontsize=20)
plt.ylabel('温度',fontsize=20)
plt.title('时间温度表',fontsize=20)
plt.legend(loc=0,fontsize=14)

plt.grid(True,linestyle='--',alpha=0.5)
plt.savefig("data/1.png")
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第1张图片

二、散点图

  • 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

  • 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

api:plt.scatter(x1, x2)

Parameters:
x1 : 横坐标序列
x2 : 纵坐标序列,长度要与x1一致

import matplotlib.pyplot as plt
# 0.准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]

plt.figure(figsize=(10,10),dpi=100)
plt.scatter(x,y)
plt.title('散点图')
plt.savefig('data/2.png')
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第2张图片

三、柱状图

  • 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。

  • 特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

api: plt.bar(x, height, width, align=‘center’, **kwargs)

Parameters:    
x : 横坐标序列

height: 柱高-与x对应的用来表示柱高的序列,长度跟x要一致

width : 柱状图的宽度

align : 每个柱状图的位置对齐方式
    {‘center’, ‘edge’}, optional, default: ‘center’

**kwargs :
color:选择柱状图的颜色
import matplotlib.pyplot as plt
# 0.准备数据
# 电影名字
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
# 横坐标
x = range(len(movie_name))
# 票房数据
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]


plt.figure(figsize=(20,8),dpi=100)

plt.bar(x,y,width=0.2,color=['b','r','g','y','c','m','y','k','c','g','b'])

#修改刻度标签
plt.xticks(x,movie_name)

plt.grid(True,linestyle='--',alpha=0.5)
plt.xlabel('电影名称')
plt.ylabel('票房')
plt.title('电影票房对比图')
plt.savefig("data/3.png")
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第3张图片

四、直方图

  • 直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。

  • 特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

api:matplotlib.pyplot.hist(x, bins=None)

Parameters:
x : 需要查看分布情况的数据
bins : 分箱数

import matplotlib.pyplot as plt
import numpy as np

# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)
# 创建画布
plt.figure(figsize=(20, 8), dpi=100)
"""
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
"""
plt.hist(data, bins=40,facecolor="blue", edgecolor="black", alpha=0.7)
# 显示横轴标签
plt.xlabel("区间",fontsize=16)
# 显示纵轴标签
plt.ylabel("频数/频率",fontsize=16)
# 显示图标题
plt.title("频数/频率分布直方图",fontsize=20)
plt.savefig("data/4.png")
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第4张图片

五、饼图

  • 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

  • 特点:分类数据的占比情况(占比)

api:plt.pie(x, labels=,autopct=,colors)

Parameters:
x:数量序列,自动算百分比
labels:每个部分标签的序列,长度与x一致
autopct:占比数据显示格式 指定%1.2f%%
colors:每部分颜色

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ["第一部分", "第二部分", "第三部分"]    # 各部分标签
size = [55, 35, 10]    # 各部分大小
color = ["red", "green", "blue"]     # 各部分颜色
explode = [0.05, 0, 0]   # 各部分突出值
plt.figure(figsize=(20,8),dpi=100)
"""
绘制饼图
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
"""
patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.2f%%", shadow=False, startangle=90, pctdistance=0.6,textprops={'fontsize':20,'color':'black'})
plt.axis("equal")    # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend(loc="upper right",fontsize=16,)
plt.savefig("data/5.png")
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第5张图片

六、条形图

import matplotlib.pyplot as plt
import matplotlib
# 设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['2014', '2015', '2016', '2017']    # 横坐标刻度显示值
num_list1 = [20, 30, 15, 35]      # 纵坐标值1
num_list2 = [15, 30, 40, 20]      # 纵坐标值2
x1 = range(len(num_list1))
x2 = [i + 0.4 for i in x1]
num_list3 = [10,20,30,40,50]
plt.figure(figsize=(20,8),dpi=100)

"""
绘制条形图
height:长条形高度
width:长条形宽度,默认值0.8
label:为后面设置legend准备
"""
rects1 = plt.bar(x1, height=num_list1, width=0.4, alpha=0.8, color='red', label="一部门")
rects2 = plt.bar(x2, height=num_list2, width=0.4, color='green', label="二部门")
plt.yticks(num_list3,fontsize=16)   # y轴取值范围
plt.ylabel("数量",fontsize=16)
"""
设置x轴刻度显示值
参数一:中点坐标
参数二:显示值
"""
plt.xticks([index + 0.2 for index in x1], label_list,fontsize=16)
plt.xlabel("年份",fontsize=16)
plt.title("圆梦公司",fontsize=20)
# 编辑文本
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",fontsize=16)
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",fontsize=16)
# 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 添加图例
plt.legend(loc=0,fontsize=16)
plt.savefig("data/6.png")
plt.show()

Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)_第6张图片

你可能感兴趣的:(数据分析)