Matplotlib基础绘图
因为某些不可抗力原因哈,被迫的要去学下python的基本绘图功能,将一份文件读取完毕后进行一系列的操作变成一张漂亮的二维图,当然也可以设置时间来进行动态的一个展示。
要是在学习这个之前呢,我们还得先学习pandas,来进行文件的读取,比如txt,csv文件等等。
pandas
- pandas先导入一个包哈
import pandas as pd
- as pd 是用于做个别名,后面使用到的pandas可以使用pd.方法来运行。
- 好了哈,这里主要就是介绍pandas的一个方法,就是 pd.read_csv 方法哈
- 这个可以用于 读取txt,csv文件 ,还可以对数据来做一些相对应的设置哈。
- 如图,我们可以看到哈,我们对文档里面的数据设置了 以 逗号 分割开的,并且我们没有标题行。全都是数据哈。
- 看下相关的参数和设置哈。
read_toexcel函数
- 该方法可以对excel来进行读取哈,使用方法和csv差不多,就是多了一个分表的指定的操作,
- 因为excel中默认有三个表满,我们需要指定一下。
有了这些知识哈,我们就可以正式进入matplotlib 绘图哈
绘画流程
创建画布与创建子图
- 第一部分主要是构建出来一张空白的画布,并可以选择是否将整个画布划分成为多个部分,方便在同一幅画上绘制多个图形的情况。最简单的绘图其实还可以省略第一部分,直接在默认的画布上进行绘制,但是不推荐哈。
- 创建画布后就是要添加画布的内容了哈
例如一些: 标题、坐标轴名称、绘制图形等等步骤哈,他们之间的设置是没有先后顺序的。
- 来看下设置的方式哈。
"格式控制字符串"最多可以包括三部分, “颜色”, “点型”, “线型”
有了这个我们来看看哈。
- 字典,通过转换也是可以试别的
- 列表,我们也是可以的。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
color=['b','g','r','c','m','y','k','w']
linestyle=['-','--','-.',':']
dic1=[[0,1,2],[3,4,5]]
x=pd.DataFrame(dic1)
dic2=[[2,3,2],[3,4,3],[4,5,4],[5,6,5]]
y=pd.DataFrame(dic2)
# 循环输出所有"颜色"与"线型"
for i in range(2):
for j in range(4):
plt.plot(x.loc[i],y.loc[j],color[i*4+j]+line_style[j])
plt.show()
- 当我们出现xy的数量不匹配的时候,可以使用循环来进行打印哈,设置行号和列号即可。
- 其中loc参数表示位置哈,1表示右上角。可以调整的哈
位置字符串 | 位置代码 |
---|---|
最好的事务 | 0 |
右上角 | 1 |
左上 | 2 |
左下 | 3 |
右下 | 4 |
对 | 5 |
中左 | 6 |
中右 | 7 |
下中心 | 8 |
上中心 | 9 |
中央 | 10 |
- 当我们向图面上进行设计中文的时候,可能会报错哈,
- 我们需要添加设置上中文显示才行哈
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
加上这两句话就完事了。
散点图 scatter
import time
import numpy as np
import matplotlib.pyplot as plt
# 时间戳
np.random.seed(int(time.time()))
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (50 * np.random.rand(N))**2
plt.figure(figsize=[10,8])
plt.scatter(x,y,s=area,c=colors,alpha=0.5) # 半透明
plt.show()
条形图
import matplotlib.pyplot as plt
import numpy as np
# 完成简单的条形图展现不同的电影票房之间的对比
plt.figure(figsize=(20, 8), dpi=80)
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 准备电影的名字以及电影的票房数据
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 放进横坐标的数字列表
x = range(len(y))
# 画出条形图
plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','g'])
# 修改刻度名称
plt.xticks(x, movie_name)
plt.show()
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 8), dpi=80)
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]
x = range(len(movie_name))
# 画出柱状图
plt.bar(x, first_day, width=0.2, label="首日票房")
# 首周柱状图显示的位置在首日的位置右边
plt.bar([i+0.2 for i in x], first_weekend, width=0.2, label="首周票房")
# 显示X轴中文,固定在首日和首周的中间位置
plt.xticks([i+0.1 for i in x], movie_name,size=33)
plt.legend(loc=1)
plt.show()
饼图 pie
import matplotlib.pyplot as plt
#显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)
plt.figure(figsize=[6,4])
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
# plt.axis('equal')
plt.show()
溜了溜了