3.Matplotlib数据可视化基础(上)

版权声明:不要转载复制当原创就好了,指明下参考地址或者书目,大家一起学习进步。 https://blog.csdn.net/Monk_donot_know/article/details/86244712

笔记说明:本文是我的学习笔记,大部分内容整理自 黄红梅,张良均等.Python数据分析与应用[M].北京:人民邮电出版社,2018:52-77. 还有部分片断知识来自网络搜索补充。
可视化这块的内容我以后会专门学习一本参考书然后整理笔记的,现在仅仅是整理上述参考书的一个章节的基础知识。

注:写在最前面。这块知识是可视化这一大块的内容,很多、很细致,我在整理这个笔记的时候就会不自觉一直在网上搜索更多的知识,对我现阶段而言太浪费时间了,因为我的主要方向不是做可视化的,所以我在后面的笔记里面仅仅呈现出开头提到的那个参考工具书的第三章可视化基础的笔记整理
关于可视化更详细的部分在以后我系统学习完我的知识之后回过头我会整理一本专门讲python可视化的工具书的笔记的。书已经买好了,就是!!暂时不会看那本书!!

推荐博客:这个人的博客https://blog.csdn.net/sinat_36219858/article/details/79800460

0.本文的数据

CSDN的数据不可以免费共享,至少要一个金币,有能力的就去下载一下数据下载链接CSDN数据。你方便的底下头评论留言,留下邮箱号,我看到之后就会把数据发给你,或者你可以在这本书的出版社网站人民邮电出版社教育社区或者“泰迪杯数据挖掘比赛”泰迪杯数瑞思的网站上找这本书的附带资源,都是免费下载的。

1.绘图基础语法与常用参数

1.1 pyplot

pyplot绘图的方式类似R语言里面的ggplot,是建立多个图层来完成同一幅图中绘制多个图形。
因此需要在每建立一个图层之后就添加标题、x轴、x轴的刻度范维、y轴、y轴的刻度范围,然后添加图形,添加图例,保存显示。

1.1.1创建画布和子图

  • 在一幅图时可以省略
  • plt.figure:空白画布
  • figure.add_subplot(‘行’,‘列’,‘选中的子图编号’)

1.1.2 添加画布内容

  • 具体参数详见help(func)
  • plt.title:标题
  • plt.xlabel:x轴名称
  • plt.ylabel:y轴
  • plt.xlim:x轴的范围
  • plt.ylim:y轴范围
  • plt.xticks:第一个参数为范围,数组类型;第二个参数是标签,第三个是控制标签,
    遵循text协议,具体参照matplotlib.text
  • plt.yticks:同上
  • plt.legend:图例

1.1.3 保存与显示图形

  • plt.savafig:保存
  • plt.show:在本机显示

上个栗子!

## 一个图
help(plt.plot)
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(11)
plt.title(u'随便画一条看看')
plt.xlim((0,11))
plt.xlabel(u'X轴名字')
plt.ylim((0,105))
plt.ylabel(u'y轴名字')
plt.xticks(ticks=range(0,12))
plt.yticks(range(0,105,10))
plt.plot(data,data**2)
plt.legend('y=x^2')
plt.savefig('D:\\codes\\python\\image\\plot1.png')
plt.show()

## 两个图
# -*- coding: utf-8 -*-
rad=np.arange(0,np.pi*2,0.01)
p1=plt.figure(figsize=(15,7),dpi=111)
pic1=p1.add_subplot(1,2,1) #一行两列的第一幅图
plt.title(u'会不会乱码?')
plt.xlabel('x')
plt.xlim((0,1))
plt.xticks(np.arange(0,1.1,0.1))
plt.ylim((0,1))
plt.ylabel('y')
plt.yticks(np.arange(0,1.1,0.1))
plt.plot(rad,rad**2)
plt.plot(rad,rad**4)
plt.plot(rad,rad*0+0.5) ## 第二个y参数一定要包含x。只写0.5的话,画不出来这条直线
plt.legend(['y=x^2','y=x^4'])

pic2=p1.add_subplot(1,2,2) #一行两列的第一幅图
plt.title('sin & cos')
plt.xlabel('x')
plt.xlim((0,np.pi*2))
plt.xticks(np.arange(0,np.pi*2+1,np.pi/2))
plt.ylim((-1,1))
plt.ylabel('y')
plt.yticks(np.arange(-1,1.5,0.5))
plt.plot(rad,np.sin(rad))
plt.plot(rad,np.cos(rad))
plt.legend(['sin','cos'])
plt.savefig('D:\\codes\\python\\image\\plot2.png')
plt.show()

中文还是乱码,开头我已经声明utf8编码了~~
plt.plot(rad,rad*0+0.5) 第二个y参数一定要包含x。只写0.5的话,画不出来这条直线

1.2 设置动态rc参数

rc参数修改之后,绘图时使用的默认参数就会发生改变

x=np.arange(0,np.pi*6+0.1,0.1)
y=np.sin(x)
plt.plot(x,y,label='$sin(x)$')# $ 的作用就是告诉电脑这是个字符串
plt.title("sin")
plt.rcParams['lines.linestyle']='--'
plt.savefig('D:\\codes\\python\\image\\plot4.png') 
plt.show()

这边有个很有意思的逻辑,就是其实这个savefig并不是必须要有的,但是一旦写好,
plt.show出来的就是上述名字的照片,本例题就是plot4,然后修改rc参数后,
show出来的图片并不会更改,依然是plot4,所以修改完rc参数之后要修改照片的名字,储存新的照片。。

rc参数 解释 取值
lines.linewidth 线条宽度 0~10,默认1.5
lines.linestyle 线条样式 “-”,“–”,“-.”,“:”默认是“-”
lines.marker 线条上点的形状 “o”“D”“h”“.”“,”“S”等20种
lines.markersize 点的大小 0~10,默认1
lines.marker 意义 lines.marker 意义
o 圆圈 .
D 菱形 S 正方形
h 六边形1 H 六边形2
* 星号 d 小菱形
- 水平线 v 一角向下的三角形
8 八边形 < 一角向左的三角形
p 五边形 > 一角向右的三角形
, 像素 ^ 一角向上的三角形
+ 加号 \ 竖线
None x X

划重点!中文的支持
pyplot字体不支持中文,不是编码的问题,需要设置一个参数

x=np.arange(0,np.pi*6+0.1,0.1)
y=np.sin(x)
plt.plot(x,y,label='$sin(x)$')# $ 的作用就是告诉电脑这是个字符串
plt.title("sin这个中文就可以显示了")
plt.rcParams['lines.linestyle']='-.'
plt.rcParams['font.sans-serif']='SimHei'#设置中文字体
plt.rcParams['axes.unicode_minus']=False #防止坐标轴中文显示错误
plt.show()

2.散点图和折线图

2.1 散点图

help(plt.scatter)
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,   
        vmin=None, vmax=None, alpha=None, linewidths=None,   
        verts=None, edgecolors=None, *, data=None, **kwargs)
参数 说明
x,y 接收array,表示x,y对应的数据
s 接收数值或者一维数组,指定点的大小,若传入一维数组,则表示每个点的大小
c 接收颜色参数或者一维数组
marker 接收待定string,表示绘制的点的类型
alpha 接收0~1的小数,表示点的透明度
颜色 说明 颜色 说明
b 蓝色 m 品红
g 绿色 y 黄色
r 红的 k 黑色
c 青色 w 白色

一个栗子!

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load("D:\\codes\\python\\国民经济核算季度数据.npz")
name=data['columns']
values=data['values']
plt.figure(figsize=(9,7))
plt.scatter(values[:,0],values[:,2],marker='o')
np.max(values[:,2])
plt.xlabel("年份")
plt.ylabel("生产总值(亿元)")
plt.ylim((0,225000))
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
# rotation标签旋转角度
plt.title("2000~2017各季度国民生产总值散点图")
plt.show()

###绘制多个散点
plt.figure(figsize=(9,7))
plt.scatter(values[:,0],values[:,3],marker='o',c='red')
plt.scatter(values[:,0],values[:,4],marker='D',c='green')
plt.scatter(values[:,0],values[:,5],marker='>',c='blue')
plt.xlabel('年');plt.ylabel('生产总值(亿)')
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title("打字好累啊,来回切换输入法")
plt.legend(["一产业","二产业","三产业"])
plt.show()

猜你喜欢

转载自blog.csdn.net/Monk_donot_know/article/details/86244712
今日推荐