Matplotlib

Matplotlib(绘制各种复杂图)

一、学习宗旨切记:

了解其怎么应用,再合适的地方填写数据就好,需要的时候就去查,没必要去记。查字典
手册
https://matplotlib.org/

二、数据可视化选型

柱状图
它适用于二维数据集,并且该数据集只需要(或者说“只能”更准确一些)比较其中一个维度。实现比较的手段就是利用柱状体之间的高度差来反映数据差异,因为人的肉眼对于高度的辨识度是较高的。但是,当数据集的规模太过庞大时,柱状体太多也会在所难免的没有那么方便地进行比较了,所以柱状图一般只适用于中小规模的数据集。

image.png

折线图
在折线图中,我们通常更关注于每条折线的走势(或者说“更能看出数据的走向”),所以它适用于整体趋势比单个数据点更重要的二维数据集。而正因为它关心的是整体而非个别的点,所以当数据集的规模越大时,折线图所呈现的整体会更加的准确。每个数据集在折线图中仅表现为一条折线,这使得它可以同时承载多个数据集并提供比较。
image.png

饼图
饼图是一种经常被人们避免使用的图表,因为人眼对面积的辨识度没有像对高度那样那么高,所以利用面积去反映数据起不到很好的作用。但是,存在即合理,当我们想要去强调某个部分占整体的比重时,用饼图是再适合不过了
image.png

散点图
散点图正是用来寻找数据集维度间的相互关系的。如果数据集规模足够大并且维度间可能并不存在关系,我们依然可以通过散点图来总结数据点的分布模式,得到有用的信息
image.png

气泡图/云图
气泡图是二维图表展示三维(或者四维)数据集的典范,通常被看做散点图的变种。它利用点的面积来表示第三维的数值。但是,前面提到过,人眼对面积的辨识度并不高,所以气泡图只能用于对第三维的展现不做精确要求的场景。
image.png

雷达图
雷达图可以用来表示多维(四维以上)的数据集,并且数据集的每个维度都必须
是可以排序的。但它所能承载的数据点是非常有限的,当数据点过多时,并不利用数
据点之间的比较。
image.png

总结
image.png

学习注解

三、实战

散点图

#导入必要的模块
import numpy as np
import matplotlib.pyplot as plt
#产生测试数据
x = np.arange(1,10)
y = x
fig = plt.figure()
ax1 = fig.add_subplot(111)
#设置标题
ax1.set_title('Scatter Plot $x=y$')
#设置X轴标签
plt.xlabel('X')
#设置Y轴标签
plt.ylabel('Y')
#画散点图
ax1.scatter(x,y,c = 'r',marker = 'o')
#设置图标
plt.legend('x1')
#显示所画的图
plt.show()

image.png

折线图

import numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(0, 2 * np.pi, 10)
y1, y2 = np.sin(x), np.cos(x)
 
plt.plot(x, y1, 'ro-')
plt.plot(x, y2, 'g*:', ms=10)
plt.show()

image.png

柱状图

import numpy as np
import matplotlib.pyplot as plt
size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
d = np.random.random(size)
x = np.arange(size)

total_width, n = 0.8, 3     # 有多少个类型,只需更改n即可
width = total_width / n
x = x - (total_width - width) / 2

plt.bar(x, a,  width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.legend()
plt.show()
image.png

饼状图

import numpy as np
import matplotlib.pyplot as plt
 
labels = 'A', 'B', 'C', 'D'
fracs = [15, 30.55, 44.44, 10]
explode = [0, 0.1, 0, 0] # 0.1 凸出这部分,
plt.axes(aspect=1)  # set this , Figure is round, otherwise it is an ellipse
#autopct ,show percet
plt.pie(x=fracs, labels=labels, explode=explode,autopct='%3.1f %%',
        shadow=True, labeldistance=1.1, startangle = 90,pctdistance = 0.6
 
        )
'''
labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
shadow,饼是否有阴影
startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
pctdistance,百分比的text离圆心的距离
patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本
'''
 
plt.show()

image.png

气泡图

import pandas as pd
from matplotlib import pyplot as plt
crime=pd.read_csv(r"crimeRatesByState2005.csv")
fig,ax=plt.subplots(figsize=(10,5))

crime=crime[1:]
population=crime["population"].values
state=crime["state"].values
murder=crime["murder"].values
burglary=crime["burglary"].values

ax.scatter(murder,burglary,s=population/40000,alpha=0.6)
ax.set(xlim=(0,11),ylim=(200,1300),\
       xlabel="Murder per 100,000 population",\
       ylabel="Burglary per 100,000 population",\
       title="Murder & Burglary in USA")
for i,j,z in zip(murder,burglary,state):
    ax.text(x=i-0.3,y=j-0.1,s=z,fontsize=7)
ax.spines["top"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.spines["right"].set_visible(False)

plt.show()

image.png

雷达图

# encoding: utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 显示中文
labels = np.array([u'总场次', u'吃鸡数', u'前十数',u'总击杀']) # 标签
dataLenth = 4  # 数据长度
data_radar = np.array([63, 1, 15, 13]) # 数据
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)  # 分割圆周长
data_radar = np.concatenate((data_radar, [data_radar[0]]))  # 闭合
angles = np.concatenate((angles, [angles[0]]))  # 闭合
plt.polar(angles, data_radar, 'bo-', linewidth=1)  # 做极坐标系
plt.thetagrids(angles * 180/np.pi, labels)  # 做标签
plt.fill(angles, data_radar, facecolor='r', alpha=0.25)# 填充
plt.ylim(0, 70)
plt.title(u'2018的绝地求生战绩')
plt.show()
image.png

你可能感兴趣的:(Matplotlib)