matplotlib.pyplot 让数据可视化

1.条形图

import matplotlib.pyplot as plt
plt.style.use('ggplot')  #  使用ggplot样式来模拟ggplot2风格的图形,ggplot2是一个常用的R语言绘图包
customers = ['ABC','DEF','GHI','JKL','MNO']
customers_index = range(len(customers))
sale_amounts = [127,90,201,111,232]
fig = plt.figure() #  创建基础图
ax1 = fig.add_subplot(1,1,1)  #  向基础图中添加一个子图  1,1,1表示穿件1行1列的子图,并使用第一个也是唯一的一个子图
ax1.bar(customers_index,sale_amounts,align='center',color='darkblue') # 创建条形图,customers_index设置天性左侧在x轴上的坐标,sale_amounts设置条形图的高度,align 设置条形图与标签中间对齐,color设置条形图的衍射

plt.xlabel('用户姓名', fontproperties="SimHei") #  设置X轴的标题
plt.ylabel('销售数量', fontproperties="SimHei") # 设置Y轴的标题
plt.title('销售额/客户', fontproperties="SimHei") #  设置title的标题

plt.savefig('bar_plot.png',dpi=400,bbox_inches='tight')  # 讲统计图保存在当前文件夹中,文件名为bar_plot.png,dpi=400设置图形分辨率,【每英寸(1英寸=2.54厘米)的点数】,bbox_inches='tight' 表示在保存图形时,将图形四周的空白部分去掉
plt.show() # 在一个新窗口中显示统计图,

2.直方图

# @author: erlang
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
mu1,mu2,sigma = 100,130,15
x1 = mu1 + sigma * np.random.randn(10000)  # 生成两个正太分布变量x1和x2,x1的均值是100,x2的均值是130,
x2 = mu2 + sigma * np.random.randn(10000)
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
n, bins, patches = ax1.hist(x1,bins=50,normed=False,color='darkgreen')  #创建两个柱形图或称频率分布图,bins= 50表示每个变量的值应该被分成50份
n, bins, patches = ax1.hist(x2,bins=50,normed=False,color='orange',alpha=0.2) # normed= False表示直方图显示是平率分布,而不是概率密度。alpha=0.2 表示第二个直方图应该是透明的
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
plt.xlabel('Bins')
plt.ylabel('Number中值数',fontproperties="SimHei")
fig.suptitle('直方图',fontproperties="SimHei")
ax1.set_title('两个频率分布',fontproperties="SimHei")
plt.savefig('histogram.png',dpi=400,bbox_inches='tight') 
plt.show()

3.折线图

# @author: erlang
from numpy.random import randn
import matplotlib.pyplot as plt
import matplotlib
#  保证图中的中文可以正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

plt.style.use('ggplot')
plot_data1 = randn(50).cumsum()
plot_data2 = randn(50).cumsum()
plot_data3 = randn(50).cumsum()
plot_data4 = randn(50).cumsum()

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

# 穿件4条折线,每条折线都可以通过选项进行设置。使用不同的数据点类型、颜色和现行,label参数盘整折线在图列中可以正确标记
ax1.plot(plot_data1,marker='o',color=u'blue',linestyle='-',label='Blue solid(蓝色固体)',)
ax1.plot(plot_data2,marker='+',color=u'red',linestyle='--',label='Red Dashed(红色虚线)',)
ax1.plot(plot_data3,marker='*',color=u'green',linestyle='-.',label='Green Dash Dot(绿色冲点)',)
ax1.plot(plot_data4,marker='s',color=u'orange',linestyle=':',label='Orange Dotted(橙色的虚线)',)


ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
ax1.set_title('Line Plots:Markers,colors,and Linestyles(情节:标记、颜色和线型)')
plt.xlabel('Draw(画)')  # x轴标题
plt.ylabel('Random Number(随机数)')# Y轴标题
plt.legend(loc='best') # 指示matplotlib根据图中空白部分将图列放在最合适的位置
plt.savefig('line_plot.png',dpi=400,bbox_inches='tight')
plt.show()

 

4散点图

# @author: erlang
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
#  保证图中的中文可以正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

plt.style.use('ggplot')
x = np.arange(start=1.,stop=15.,step=1.)

y_linear = x + 5. * np.random.randn(14)
y_quadratic = x** 2 + 10. * np.random.randn(14) # 通过随机数是数据与一条直线和一条二次曲线悄悄偏离

#  使用numpy的polyfit函数通过函数两组数据点(x,y_linear)和(x,y_quadratic)拟合出一条直线和一条二次曲线
#  再使用polyid函数根据直线和二次曲线的参数与生成一个线性方程和二次方程
fn_linear = np.poly1d(np.polyfit(x,y_linear,deg=1))
fn_quadratic = np.poly1d(np.polyfit(x,y_quadratic,deg=2)) #

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

# 代码创建带有两个回归曲线的散点图,'bo'表示(x,_y_linear)点事是蓝色圆圈,'go'表示(,x,y_quadratic)点是绿色圆圈,
# 同样'b-'表示(x,y_linear)点之间的显示一条蓝色实线 'g-'表示(,x,y_quadratic)点是绿色实线, 通过linewidth可以设置线的高度
ax1.plot(x,y_linear,'bo',x,y_quadratic,'go',x,fn_linear(x),'b-',x,fn_quadratic(x),'g-',linewidth = 2.)
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
ax1.set_title('Scatter ploys Regression Lines(散射伎俩回归直线)',)
plt.xlabel('x')
plt.ylabel('f(x)')

# 设置了x轴和Y轴的范围。这两条曲线使用min和max函数基于实际数据设置坐标轴范围,你也可以使用具体的数值设置范围,列入xlim(0,20)和ylom(0,200)
# 如果你没有设置坐标范围,那么matplotlib会替你自己设置,
plt.xlim(min(x)-1,max(x)+1)
plt.ylim(min(y_quadratic)-10.,max(y_quadratic)+10.)
plt.savefig('scatter_plot.png',dpi=400,bbox_inches='tight')
plt.show()

 

 

 

posted @ 2018-07-12 16:14  菜鸟程序猿_python  阅读(1482)  评论(0编辑  收藏  举报