数据蛙就业班

matplotlib 学习

2020-02-13  本文已影响0人  卅清

matplotlib是PYTHON绘图的基础库,是模仿matlab绘图工具开发的一个开源库。 PYTHON其它第三方绘图库都依赖与matplotlib

折线图 plot chart

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

# 导入matplotlib.pyplot 模块

import matplotlib.pyplot as plt

import random

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签/如果想默认为SimHei,可直接在配置文件中修改

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

%matplotlib inline

# 数据准备

x = range(60)

y_shanghai = [random.uniform(15, 18) for i in x]

# 增加北京的温度数据

y_beijing = [random.uniform(1, 3) for i in x]

# 创建画布(容器层) figsize:指定图的长宽,dpi:图像的清晰度

plt.figure(figsize=(15,4),dpi=80)

# 绘制折线图(图像层)

plt.plot(x, y_shanghai, label="北京")

# 使用多次plot可以画多个折线

plt.plot(x, y_beijing, color='r', linestyle='-.', label="北京")

# 构造x轴刻度标签

x_ticks_label = ["11点{}分".format(i) for i in x]

# 显示图例

plt.legend(loc=0)

# 构造y轴刻度

y_ticks = range(40)

# 修改x,y轴坐标的刻度显示

plt.xticks(x[::5], x_ticks_label[::5])

plt.yticks(y_ticks[::5])

# 添加网格显示

plt.grid(True, linestyle='--', alpha=0.5)

# 添加x轴、y轴描述信息及标题

plt.xlabel("时间")

plt.ylabel("温度")

plt.title("中午11点0分到12点之间的温度变化图示")

# 保存图片到指定路径

plt.savefig("test.png")

# 注意:plt.show()会释放figure资源,所以要在plt.show()前面。

# 显示图像

# plt.show()

# 多个坐标系显示-plt.subplots(面向对象的画图方法)

#  matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的

# 折线图的排列方式

fig,axes = plt.subplots(nrows=1,ncols=2, figsize=(20, 5), dpi=80)

# 2)绘制折线图

axes[0].plot(x, y_shanghai, label="上海")

axes[1].plot(x, y_beijing, color='r', linestyle='--', label="北京")

axes[0].legend()

axes[1].legend()

# 使用subplot

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

plt.subplot(1,2,1)

plt.plot(x, y_shanghai, label="上海")

plt.subplot(1,2,2)

plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

柱状图 bar chart

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

verticle 图垂直

data = [5,25,50,20]

plt.bar(range(len(data)),data)

horizontal 图水平

data = [5,25,50,20]

plt.barh(range(len(data)),data)

多个bar

import numpy as np

data = [[5,25,50,20],

        [4,23,51,17],

        [6,22,52,19]]

X = np.arange(4)

plt.bar(X + 0.00, data[0],color='b',width=0.25,label="A")

plt.bar(X + 0.20, data[0],color='y',width=0.25,label="B")

plt.bar(X + 0.50, data[0],color='r',width=0.25,label="C")

plt.legend(loc='best')

stacked 多个图叠加

data = [[5,25,50,20],

        [4,23,51,17],

        [6,22,52,19]]

X = np.arange(4)

plt.bar(X+0.25, data[0], color = 'b', width = 0.25)

plt.bar(X, data[1], color = 'y', width = 0.25,bottom=data[0])

plt.bar(X, data[0], color = 'r', width = 0.25,bottom=np.array(data[0])+np.array(data[1]))

scatter points 散点图

散点图用来衡量两个连续变量之间的相关性

N = 50

x = np.random.rand(N)

y = np.random.rand(N)

colors = np.random.randn(N)

#  调整大小

area = np.pi*(15*np.random.rand(N)**2)

plt.scatter(x, y,c=colors,s=area)

histogram 直方图

直方图是用来衡量连续变量的概率分布的。在构建直方图之前,我们需要先定义好bin(值的范围),也就是说我们需要先把连续值划分成不同等份,然后计算每一份里面数据的数量

a = np.random.rand(100)

plt.hist(a,bins=20)

plt.ylim(0,14)

a = np.random.randn(10000)

plt.hist(a,bins=50)

plt.title("标准正态分布")

boxplots 箱型图

用于表达连续特征的百分位数分布。统计学上经常被用于检测单变量的异常值,或者用于检查离散特征和连续特征的关系

x = np.random.randint(20,100,size=(30,3))

plt.boxplot(x)

plt.ylim(0,120)

plt.xticks([1,2,3],['A','B','C'])

# 横线 横线开始横坐标,横线结束横坐标 ,vlines是竖线

plt.hlines(y = np.mean(x,axis = 0)[1],xmin=0,xmax=3)

颜色调整与添加文字 color /text

# 画布颜色

fig,axs = plt.subplots(facecolor='darkseagreen')

data = [[5,25,50,20],

        [4,23,51,17],

        [6,22,52,19]]

X = np.arange(4)

# 图形颜色

plt.bar(X,data[0],color='darkorange',width=0.25,label="A")

plt.bar(X+0.25,data[1],color='blue',width=0.25,label="B")

plt.bar(X+0.5,data[2],color='violet',width=0.25,label="C")

axs.set_title('Figur 1')

axs.legend()

#添加文字

plt.text(1.0,30,"lalal")

W = [0.00,0.25,0.50]

for i in range(3):

#    zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。

    for a,b in zip(X+W[i],data[i]):

        plt.text(a,b,"%.0f"% b,ha="center",va="bottom")

plt.xlabel("Group")

plt.ylabel("Num")

注释

在数据可视化的过程中,图片中的文字经常被用来注释图中的一些特征。使用annotate()方法可以很方便地添加此类注释。在使用annotate时,要考虑两个点的坐标:被注释的地方xy(x, y)和插入文本的地方xytext(x, y)

X = np.linspace(0, 2*np.pi,100)# 均匀的划分数据

Y = np.sin(X)

Y1 = np.cos(X)

plt.plot(X,Y)

plt.plot(X,Y1)

plt.annotate("Y",

            xy=(1, np.sin(1)),

            xytext=(2,0.5),fontsize=14,

            arrowprops=dict(arrowstyle="->"))

plt.title("这是一副测试图")

subplots 用法

plt.rcParams['figure.figsize'] = (10, 6) # 调整图片大小

np.random.seed(19680801) #随机数种子,设置后让每次生成的随机数一致

n_bins = 10

x = np.random.randn(1000, 3)

fig,axes = plt.subplots(2,2,facecolor="darkorange")

ax0, ax1, ax2, ax3 = axes.flatten() #将拆分的区域进行分发

colors = ['red', 'tan', 'lime']

ax0.hist(x, n_bins, normed=1, histtype='bar', color=colors, label=colors)

ax0.legend(prop={'size': 10})

ax0.set_title('bars with legend')

ax1.hist(x, n_bins, normed=1, histtype='bar', stacked=True)

ax1.set_title('stacked bar')

ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False)

ax2.set_title('stack step (unfilled)')

# x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]

# ax3.hist(x_multi, n_bins, histtype='bar')

# ax3.set_title('different sample sizes')

fig.tight_layout() # Adjust subplot parameters to give specified padding.自动调整一个合适的大小

ShareX or ShareY 共享xy轴

N_points = 100000

n_bins = 20

x = np.random.randn(N_points)

y = .4 * x + np.random.randn(100000) + 5

fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)

axs[0].hist(x,bins=n_bins)

axs[1].hist(y,bins=n_bins)

pandas api 使用pandas调用matplotlib

import pandas as pd

df = pd.read_csv("stock_day.csv",sep=',')

df.head()

# 散点图

df.plot.scatter(x="open",y="close",c="volume")

# 直方图

df[["open","close"]].plot.hist()

# 箱型图

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])

df.plot.box()

上一篇下一篇

猜你喜欢

热点阅读