目录:

  一、Matplotlib基础知识

      1. 包含单条曲线的图

      2. 包含多个曲线的图

      3. 将多个曲线图绘制在一个table区域中:对象形式创建表图

      4. 网格线 plt.grid(XXX)

      5. 坐标轴界限

      6. 坐标轴标签

      7. 图例(legend方法)

  二、保存图片

  三、2D图形

      1. 直方图(plt.hist())

      2. 条形图(plt.bar())

      3. 饼图(plt.pie())

      4. 散点图(plt.scatter(x,y,c='rgyb'))

一、Matplotlib基础知识

# 绘制线      plt.plot(x1,y1,x2,y2)
# 网格线      plt.grid(True)  axes.grid(color,ls,lw,alpha)
# 获取坐标系  plt.subplot(n1,n2,n3)
# 坐标轴标签  plt.xlabel() plt.ylabel()
# 坐标系标题  plt.title()
# 图例        plt.legend([names],ncol=2,loc=1)  plt.plot(label='name')
# 线风格      --  -. : None  step
# 图片保存    figure.savefig()
# 点的设置    marker markersize markerfacecolor markeredgecolor\width
# 坐标轴刻度  plt.xticks(刻度列表,刻度标签列表) plt.yticks()
#             axes.set_xticks(刻度列表) axes.set_xticklabels(刻度标签列表)
概述

Matplotlib中的基本图表包括的元素

x轴和y轴 axis
        水平和垂直的轴线
x轴和y轴刻度 tick
        刻度标示坐标轴的分隔,包括最小刻度和最大刻度
x轴和y轴刻度标签 tick label
        表示特定坐标轴的值
绘图区域(坐标系) axes
        实际绘图的区域
坐标系标题 title
        实际绘图的区域
轴标签 xlabel ylabel
        实际绘图的区域
Matplotlib中的基本图表包括的元素

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame

1. 包含单条曲线的图

  注意:y,x轴的值必须为数字

1.1  绘制直线

  x=[1,2,3,4,5]
  y=[2,4,6,8,10]
  plt.plot(x,y)

1.2 绘制抛物线

  x = np.linspace(-np.pi,np.pi,num=20)
  y = x**2
  plt.plot(x,y)

1.3 绘制正弦曲线图

  x
  y = np.sin(x)
  plt.plot(x,y)

  

2. 包含多个曲线的图

2.1 连续调用多次plot函数

  plt.plot(x,y)
  plt.plot(x+2,y+3)

  

2.2 也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

  plt.plot(x,y,x+1,y-2)

  

3. 将多个曲线图绘制在一个table区域中:对象形式创建表图

  a=plt.subplot(row,col,loc) 创建曲线图

  a.plot(x,y) 绘制曲线图

  ax1 = plt.subplot(221)      # 2 两行   2 两列   1 位置
  ax1.plot(x,y)

  ax2 = plt.subplot(2,2,2)
  ax2.plot(x,y)

  ax3 = plt.subplot(2,2,3)
  ax3.plot(x,y)

  ax4 = plt.subplot(2,2,4)
  ax4.plot(x,y)

  

4. 网格线 plt.grid(XXX)

  参数:

    - axis
    - color:支持十六进制颜色
    - linestyle: --  -.  :
    - alpha  透明度 ,例:plt.plot(x,y,c='red',alpha=0.7)

  plt.plot(x,y)
  plt.grid(axis='both',c='blue')

5. 坐标轴界限

  axis方法:设置x,y轴刻度值的范围

  plt.axis([xmin,xmax,ymin,ymax])

  plt.plot(x,y)
  plt.axis([-6,6,-2,2])
  #plt.axis('off')    # 关闭坐标轴

  

  设置画布比例:plt.figure(figsize=(a,b))   a:x刻度比例 b:y刻度比例 (2:1)表示x刻度显示为y刻度显示的2倍

    plt.figure(figsize=(6,6))
    plt.plot(x,y)

    

6. 坐标轴标签

    s 标签内容

    color 标签颜色

    fontsize 字体大小

    rotation 旋转角度

  plt的xlabel方法和ylabel方法 title方法

    plt.plot(x,y)
    plt.xlabel('aaa')
    plt.ylabel('bbb')
    plt.title('ccc')

    

7. 图例(legend方法)

7.1 两种传参方法:

      分别在plot函数中增加label参数,再调用plt.legend()方法显示

      直接在legend方法中传入字符串列表

  plt.plot(x,y,label='aaa')
  plt.plot(x+2,y+3,label='bbb')
  plt.legend(loc=0,ncol=2)

  

7.2  legend的参数

  7.2.1  loc参数

      loc参数用于设置图例标签的位置,一般在legend函数内

      matplotlib已经预定义好几种数字表示的位置

      

  7.2.2  ncol参数

      ncol控制图例中有几列,在legend中设置ncol

 

二、保存图片

1. 使用figure对象的savefig函数来保存图片

    fig = plt.figure()---必须放置在绘图操作之前

    figure.savefig的参数选项

      filename : 含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……)

      dpi : 图像分辨率(每英寸点数),默认为100

      facecolor  : 打开保存图片查看 图像的背景色,默认为“w”(白色)

  fig = plt.figure()

  plt.plot(x,y,label='aaa')
  plt.plot(x+2,y+3,label='bbb')
  plt.legend(loc=0,ncol=2)

  fig.savefig('./123.png',dpi=500)

  

2. 设置plot的风格和样式

  plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
  plt.plot(X, Y, 'format', ...)

2.1 颜色

   2.1.1 参数color或c

    2.1.2  颜色值的方式:

    别名: color='r'

     合法的HTML颜色名 : color = 'red'

        

     HTML十六进制字符串 : color = '#eeefff'

     归一化到[0, 1]的RGB元组 : color = (0.3, 0.3, 0.4)

2.2 透明度

  alpha参数

2.3 线型

  参数linestyle或ls

  

  plt.plot(x,y,ls='steps',lw=10)

  

2.4 线宽

  linewidth或lw参数

2.5 点型

  marker 设置点形

  markersize 设置点形大小

  

  plt.plot(x,y,marker='d',markersize=10)

  

三、2D图形

1. 直方图(plt.hist())

  是一个特殊的柱状图,又叫做密度图。

  直方图的参数只有一个x,不像条形图需要传入x,y

  plt.hist()的参数

      bins : 直方图的柱数,可选项,默认为10

      color : 指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,例如DataFrame对象,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色

      orientation : 通过设置orientation为horizontal创建水平直方图。默认值为vertical

  data = [1,2,3,3,4,2,5]
  plt.hist(data,bins=10)

  

      返回值 :

          1: 直方图向量,是否归一化由参数normed设定

          2: 返回各个bin的区间范围

          3: 返回每个bin里面包含的数据,是一个list

2. 条形图(plt.bar())

  参数:第一个参数是索引。第二个参数是数据值。第三个参数是条形的宽度

  条形图有两个参数x,y

        width 纵向设置条形宽度

        height 横向设置条形高度

  barh() : 水平条形图

  num = [1,2,3,4,5]
  count = [2,4,6,8,10]
  plt.barh(num,count)

  

3. 饼图(plt.pie())

  饼图也只有一个参数x

  pie()
  饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

  饼图阴影、分裂等属性设置

        #labels参数设置每一块的标签;

        #labeldistance参数设置标签距离圆心的距离(比例值)

        #autopct参数设置比例值小数保留位(%.3f%%);

        #pctdistance参数设置比例值文字距离圆心的距离

        #explode参数设置每一块顶点距圆心的长度(比例值,列表);

        #colors参数设置每一块的颜色(列表);

        #shadow参数为布尔值,设置是否绘制阴影

        #startangle参数设置饼图起始角度

  plt.pie([0.2,0.5])

  

  arr=[11,22,31,15]
  plt.pie(arr,labels=['a','b','c','d'])

  

  # labeldistance参数设置标签距离圆心的距离(比例值)
  arr=[11,22,31,15]
  plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3)

  

  # autopct参数设置比例值小数保留位(%.3f%%);
  arr=[11,22,31,15]
  plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3,autopct='%.6f%%')

  

  # explode参数设置每一块顶点距圆心的长度(比例值,列表);
  arr=[11,22,31,15]
  plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3,shadow=True,explode=[0.2,0.3,0.2,0.4])

  

  # startangle参数设置饼图起始角度
  arr=[11,22,31,15]
  plt.pie(arr,labels=['a','b','c','d'],startangle=50)

  

  注:%m.nf m 占位 n 小数点后保留几位 f 是以float格式输出

4. 散点图(plt.scatter(x,y,c='rgyb')):因变量随自变量而变化的大致趋势

  散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标

  x = np.random.randint(0,10,size=(20,))
  y = np.random.randint(0,10,size=(20,))

  plt.scatter(x,y,c='rgyb')    # c='rgyb'表示设置不同的散点颜色

  

  x = [1,2,3,4,5]
  y = [2,4,6,8,10]

  plt.scatter(x,y)

  

 

案例:城市气候与海洋的关系研究

# 导包:

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt


from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong']     # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False      # 解决保存图像是负号'-'显示为方块的问题

# 导入数据各个海滨城市数据:

ferrara1 = pd.read_csv('./ferrara_150715.csv')
ferrara2 = pd.read_csv('./ferrara_250715.csv')
ferrara3 = pd.read_csv('./ferrara_270615.csv')
ferrara=pd.concat([ferrara1,ferrara2,ferrara3],ignore_index=True)

torino1 = pd.read_csv('./torino_150715.csv')
torino2 = pd.read_csv('./torino_250715.csv')
torino3 = pd.read_csv('./torino_270615.csv')
torino = pd.concat([torino1,torino2,torino3],ignore_index=True)

mantova1 = pd.read_csv('./mantova_150715.csv')
mantova2 = pd.read_csv('./mantova_250715.csv')
mantova3 = pd.read_csv('./mantova_270615.csv')
mantova = pd.concat([mantova1,mantova2,mantova3],ignore_index=True)

milano1 = pd.read_csv('./milano_150715.csv')
milano2 = pd.read_csv('./milano_250715.csv')
milano3 = pd.read_csv('./milano_270615.csv')
milano = pd.concat([milano1,milano2,milano3],ignore_index=True)

ravenna1 = pd.read_csv('./ravenna_150715.csv')
ravenna2 = pd.read_csv('./ravenna_250715.csv')
ravenna3 = pd.read_csv('./ravenna_270615.csv')
ravenna = pd.concat([ravenna1,ravenna2,ravenna3],ignore_index=True)

asti1 = pd.read_csv('./asti_150715.csv')
asti2 = pd.read_csv('./asti_250715.csv')
asti3 = pd.read_csv('./asti_270615.csv')
asti = pd.concat([asti1,asti2,asti3],ignore_index=True)

bologna1 = pd.read_csv('./bologna_150715.csv')
bologna2 = pd.read_csv('./bologna_250715.csv')
bologna3 = pd.read_csv('./bologna_270615.csv')
bologna = pd.concat([bologna1,bologna2,bologna3],ignore_index=True)

piacenza1 = pd.read_csv('./piacenza_150715.csv')
piacenza2 = pd.read_csv('./piacenza_250715.csv')
piacenza3 = pd.read_csv('./piacenza_270615.csv')
piacenza = pd.concat([piacenza1,piacenza2,piacenza3],ignore_index=True)

cesena1 = pd.read_csv('./cesena_150715.csv')
cesena2 = pd.read_csv('./cesena_250715.csv')
cesena3 = pd.read_csv('./cesena_270615.csv')
cesena = pd.concat([cesena1,cesena2,cesena3],ignore_index=True)

faenza1 = pd.read_csv('./faenza_150715.csv')
faenza2 = pd.read_csv('./faenza_250715.csv')
faenza3 = pd.read_csv('./faenza_270615.csv')
faenza = pd.concat([faenza1,faenza2,faenza3],ignore_index=True)

# 去除没用的列:

city_list = [ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza]
for city in city_list:
  city.drop(labels='Unnamed: 0',axis=1,inplace=True)

# 显示最高温度与离海远近的关系(观察多个城市)

city_max_temp = []    # 10个城市的最高温度列表
city_dist = []    # 10个城市与海洋距离的列表

# 向两个列表中加入相应的值
for city in city_list:
  max_temp = city['temp'].max()
  city_max_temp.append(max_temp)
  dist = city['dist'][0]
  city_dist.append(dist)

# 绘制散点图

plt.scatter(city_dist,city_max_temp)
plt.xlabel('距离')
plt.ylabel('最高温度')
plt.title('距离和温度之间的关系图')

观察发现,离海近的可以形成一条直线,离海远的也能形成一条直线。

- 分别以100公里和50公里为分界点,划分为离海近和离海远的两组数据(近海:小于100  远海:大于50)

#找出所有的近海城市(温度和距离)
np_city_dist = np.array(city_dist)
np_city_max_temp = np.array(city_max_temp)

near_condition = np_city_dist < 100
near_city_dist = np_city_dist[near_condition]
near_city_max_temp = np_city_max_temp[near_condition]

# 绘制近海城市的温度距离散点图

plt.scatter(near_city_dist,near_city_max_temp)

机器学习

- 算法模型对象:特殊的对象.在该对象中已经集成好了一个方程(还没有求出解的方程).
- 模型对象的作用:通过方程实现预测或者分类
- 样本数据(df,np)(样本集:用于对机器学习算法模型对象进行训练。样本集通常为一个DataFrame。):
    - 特征数据:自变量(特征数据的变化会影响目标数据的变化。通常为多列。
- 目标(标签)数据:因变量 (
结果。通常为一列
- 模型对象的分类: 
- 有监督学习:模型需要的样本数据中存在特征和目标
- 无监督学习:模型需要的样本数据中存在特征
- 半监督学习:模型需要的样本数据部分需要有特征和目标,部分只需要特征数据
- sklearn模块:封装了多种模型对象.

导入sklearn,建立线性回归算法模型对象

# 1.导包
from sklearn.linear_model import LinearRegression

# 2.实例化模型对象
linner = LinearRegression()

# 3.提取样本数据(上面求得的)

near_city_dist

near_city_max_temp 

# 4.训练模型(使用样本数据对模型进行训练)
linner.fit(near_city_dist.reshape(-1,1),near_city_max_temp)

输出:LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

# 5.预测(使用模型进行预测)

linner.predict(38)

输出:array([33.16842645])

# 对模型进行精准度的评分
linner.score(near_city_dist.reshape(-1,1),near_city_max_temp)

输出:0.77988083971852

# 绘制回归曲线
x = np.linspace(10,70,num=100)
y = linner.predict(x.reshape(-1,1))

plt.scatter(near_city_dist,near_city_max_temp)   
plt.scatter(x,y,marker=1)   

 

posted on 2020-01-24 15:55  始终不够啊  阅读(905)  评论(0编辑  收藏  举报