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