使用matplotlib绘图

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

# 使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定matplotlib图表的显示方式。inline表示将图表嵌入到Notebook中。

plt.rcParams['font.sans-serif']=['SimHei']

# 用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False

# 用来显示正负号

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

Y=np.sin(X)

Y1=np.cos(X)

plt.title("Hello,matplotlib!!!")

plt.plot(X,Y)

plt.plot(X,Y1)


X=np.linspace(0,2*np.pi,100)

Y=np.sin(X)

Y1=np.cos(X)

plt.subplot(211)

plt.plot(X,Y,color='dodgerblue')

plt.subplot(212)

plt.plot(X,Y1,color = 'r')


# 柱状图

 柱状图一般用来统计一些类型的数量,例如不同产品的销售额。柱状图一般有两种,一个是传统的,一个是叠加的。

data=[10,35,60,40]

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

plt.title('柱状图')


data=[10,35,60,40]

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

plt.title('水平柱状图')


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

        [4,23,30,18],

        [6,22,90,10]]

X = np.arange(4)

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

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

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

# 显示上面设置的 lable

plt.legend()

plt.title('多个柱状图')


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

        [4,23,30,18],

        [6,22,90,10]]

X = np.arange(4)

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

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

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

plt.title('叠加型柱状图')

plt.show()


散点图

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

N = 50

x = np.random.rand(N)

y = np.random.rand(N)

plt.scatter(x,y)

plt.title('普通散点图')



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,alpha=0.5, s = area)


N = 30

x = np.random.rand(N)

y = np.random.rand(N)

colors = np.random.randint(0,2,size =30)

colors = np.random.randint(0,2,size = 30)

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


直方图

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

a = np.random.rand(60)

plt.hist(a,bins=20)

plt.ylim(0,15)


a = np.random.randn(1000)

plt.hist(a,bins=50)

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


盒图

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

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

plt.boxplot(x)

plt.ylim(0,120)

# 在x轴的什么位置填一个label,我们这里制定在1,2,3位置,写上ABC

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

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



添加描述性文字

增加文字

plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)

# 设置画布颜色为blue

fig, ax =plt.subplots(facecolor='blue')

# y轴数据

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='darkorange',width = 0.25,label='A')

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

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

ax.set_title('Figure 2')

plt.legend()

W = [0.00,0.25,0.50]

for i in range(3):

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

plt.text(0.0,48,"TEXT")



注释地另一种方法:annotate

在数据可视化的过程中,图片中的文字经常被用来注释图中的一些特征。使用annotate()方法可以很方便地添加此类注释。在使用annotate时,要考虑两个地方的坐标(text只需要一个):被注释的地方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('Points',

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

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

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

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


%pylab inline

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

# np.random.seed(19680801)

n_bins = 10

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

fig, axes = plt.subplots(nrows=2, ncols=2)

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

# Make a multiple-histogram of data-sets with different length.

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

%pylab inline


import pandas as pd

df = pd.DataFrame(np.random.rand(50, 2), columns=['a', 'b'])

# 散点图

df.plot.scatter(x='a', y='b')


df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])

# 绘制柱状图

df.plot.bar()


# 堆积的柱状图

df.plot.bar(stacked=True)


# 水平的柱状图

df.plot.barh(stacked=True)


df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

# 直方图

df.plot.hist(bins=20)


# 盒图

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

df.plot.box()


你可能感兴趣的:(使用matplotlib绘图)