matplotlib 学习

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()


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342